From f70fe99114047c49efd25100b24ba1c3521234f0 Mon Sep 17 00:00:00 2001 From: nattthebear Date: Fri, 14 Jul 2023 06:00:05 -0400 Subject: [PATCH] refactor tooltip --- docs/index.1445ecdb.css | 2 ++ docs/index.203c95b7.js | 10 -------- docs/index.928c49fb.css | 2 -- docs/index.9c03c1ec.js | 10 ++++++++ docs/index.html | 2 +- src/MouseOver.ts | 34 -------------------------- src/component/App.tsx | 27 --------------------- src/component/CharacterPlanner.tsx | 25 +++++++++++++++---- src/{ => component}/MouseOver.css | 4 +++ src/component/MouseOver.tsx | 35 +++++++++++++++++++++++++++ src/component/{App.css => shared.css} | 3 ++- src/index.tsx | 15 ++++++++---- 12 files changed, 84 insertions(+), 85 deletions(-) create mode 100644 docs/index.1445ecdb.css delete mode 100644 docs/index.203c95b7.js delete mode 100644 docs/index.928c49fb.css create mode 100644 docs/index.9c03c1ec.js delete mode 100644 src/MouseOver.ts delete mode 100644 src/component/App.tsx rename src/{ => component}/MouseOver.css (86%) create mode 100644 src/component/MouseOver.tsx rename src/component/{App.css => shared.css} (97%) diff --git a/docs/index.1445ecdb.css b/docs/index.1445ecdb.css new file mode 100644 index 0000000..62292ef --- /dev/null +++ b/docs/index.1445ecdb.css @@ -0,0 +1,2 @@ +.tooltip{white-space:pre-wrap;color:#fff;pointer-events:none;background-color:#000000b3;border-radius:6px;padding:6px;font-size:12px;position:absolute;top:0;left:0}.tooltip.hidden{display:none}.character-panel{flex-direction:column;display:flex}.character-panel .actions{flex:none;display:flex}.character-panel .actions .action{flex:1 0 0;font-size:12px}.character-panel .character-select{flex:none;display:flex}.character-panel .character-select .character{text-align:center;cursor:pointer}.character-panel .character-select .character>.name{font-weight:700}.character-panel .character-select .character .job{background-color:#0000;border:none;font-size:14px}.character-panel .character-select .character .job:hover{background-color:#afa}.character-panel .character-select .character .job[aria-pressed=true]{background-color:#aaf}.character-panel .character-select .character .job.nojob{font-style:italic}.character-panel .character-select .character .job:disabled{color:#aaa}.character-panel .stats{flex-flow:column wrap;flex:0 auto;place-content:flex-start;align-items:flex-start;display:flex;overflow:auto}.character-panel .stats .group{flex:none;margin:4px}.character-panel .stats .group .name{margin:0;font-size:16px}.character-panel .stats .group .l{margin:0;font-size:12px}.license-board-holder{background-color:#333;min-width:240px;overflow:auto}.license-board-holder .license-board{border-spacing:0}.license-board-holder .license-board td{vertical-align:top;min-width:80px;max-width:80px;height:80px;padding:4px;position:relative}.license-board-holder .license-board .l{box-shadow:inset 0 0 2px #000}.license-board-holder .license-board .l .name{font-size:10px}.license-board-holder .license-board .l .cost{font-size:24px;font-weight:700;position:absolute;bottom:4px;right:4px}.license-board-holder .license-board .l .mist{opacity:.1;object-fit:contain;width:100%;height:100%;padding:10px;position:absolute;top:0;left:0}.select-job{background-color:#aaa;place-content:center;min-width:240px;display:grid;position:relative}.select-job .job{text-align:left;line-height:32px}.select-job .job .zodiac{float:right;height:32px;margin-left:20px}@keyframes octocat-wave{0%,to{transform:rotate(0)}20%,60%{transform:rotate(-25deg)}40%,80%{transform:rotate(10deg)}}.github-corner{pointer-events:none;border:0;position:absolute;top:0;right:0}.github-corner svg{color:#fff;fill:#000;display:block}.github-corner svg g{pointer-events:initial}.github-corner svg g:hover .octo-arm{animation:.56s ease-in-out octocat-wave}.github-corner svg g .octo-arm{transform-origin:130px 106px}.qe-board{text-align:center;grid-template-columns:1fr 1fr 1fr 1fr 1fr 1fr 1fr;grid-auto-rows:1fr;display:grid}.qe-board>*{flex-direction:column;justify-content:center;align-items:center;display:flex}.qe-board .character-name,.qe-board .license-name{font-size:14px;font-weight:700}.qe-board .job{font-size:12px}.qe-board .job.nojob{font-style:italic}.qe-board .l{font-size:12px;box-shadow:inset 0 0 2px #000}.qe-board .l.unreachable{color:#888;background-color:#ddd;font-style:italic}.dps-optimizer{flex-direction:column;display:flex}.dps-optimizer .controls{flex:none}.dps-optimizer .controls .control{padding:2px;display:inline-block}.dps-optimizer .controls .control input[type=number]{text-align:right;margin-left:4px}.dps-optimizer .controls .control input[type=number].d-1{width:2.2em}.dps-optimizer .controls .control input[type=number].d-2{width:3em}.dps-optimizer .controls .control input[type=number].d-3{width:3.8em}.dps-optimizer .controls .control input[type=number].d-4{width:4.6em}.dps-optimizer .controls .control input[type=number].d-5{width:5.4em}.dps-optimizer .controls .control input[type=checkbox]{margin-right:4px}.dps-optimizer .controls .control select{margin-left:4px}.dps-optimizer .results{font-size:12px;overflow:auto}.dps-optimizer .results table{border-collapse:collapse}.dps-optimizer .results.busy{color:#aaa}.dps-optimizer .results tr:nth-child(2n){background-color:#f8f8f8}.dps-optimizer .results .sticky{background-color:#fff;height:20px;position:sticky;top:0}.dps-optimizer .results .sticky.second-row{top:20px}.dps-optimizer .results th,.dps-optimizer .results td{padding:2px}.dps-optimizer .results tr.data-row:hover{background-color:#efe}.dps-optimizer .results th{text-align:left}.dps-optimizer .results .r{text-align:right}.character-planner{width:100%;height:100%;display:flex}.character-planner>:first-child{flex:none}.character-planner>:nth-child(2){flex:1 0 0}*,:before,:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;tab-size:4;font-family:system-ui,Segoe UI,Roboto,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji;line-height:1.15}body{margin:0}hr{color:inherit;height:0}abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:100%;line-height:1.15}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}::-moz-focus-inner{border-style:none;padding:0}:-moz-focusring{outline:1px dotted ButtonText}:-moz-ui-invalid{box-shadow:none}legend{padding:0}progress{vertical-align:baseline}:is(){height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}button{cursor:pointer}button:disabled{cursor:not-allowed}:root,body{width:100%;min-width:800px;height:100%;min-height:640px;font-family:HelveticaNeue-Light,Helvetica Neue Light,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif}.button{background-color:#fff;border:2px solid #000;border-radius:6px;margin:2px;padding:6px}.button:hover{background-color:#efe}.button:disabled{color:#999;background-color:#ccc;border-color:#999}.button:disabled img{opacity:.3}.button[aria-pressed=true]{background-color:#eef;border-color:#33f}.l{cursor:pointer}.l.obtained{background-color:#fff}.l.obtained:hover{box-shadow:inset 0 0 8px red}.l.certain{background-color:#ddd}.l.certain:hover{box-shadow:inset 0 0 8px #0a0}.l.possible{background-color:#ffa}.l.possible:hover{box-shadow:inset 0 0 8px #0a0}.l.blocked{cursor:not-allowed;background-color:#fbb}.l.blocked:hover{box-shadow:inset 0 0 8px red}.l.unreachable{cursor:not-allowed}.l.unreachable:hover{box-shadow:inset 0 0 8px red}.l.planned{background-color:#afa} +/*# sourceMappingURL=index.1445ecdb.css.map */ diff --git a/docs/index.203c95b7.js b/docs/index.203c95b7.js deleted file mode 100644 index 867a4e1..0000000 --- a/docs/index.203c95b7.js +++ /dev/null @@ -1,10 +0,0 @@ -let e;function a(e){return e&&e.__esModule?e.default:e}const l=/^on([a-z]+?)(capture)?$/i,t=/^children|value|checked$/;function n(a,n,r,o,i,s){let c;if(!(r===o||t.test(n))){if("ref"===n){var m,u;r?.(null),m=s,u=()=>o?.(a),e?.push({depth:m,cb:u})??u();return}if(c=n.match(l)){let[,e,l]=c;e=e.toLowerCase();let t=!!l;r&&a.removeEventListener(e,r,t),o&&a.addEventListener(e,o,t);return}if(!i&&n in a){a[n]=o;return}null==o?a.removeAttribute(n):a.setAttribute(n,o)}}function r(e,a,l){if(a in l){let t=l[a];void 0!==t&&t!==e[a]&&(e[a]=t??"")}}function o(e){return"string"==typeof e?.type}function i(e){return"function"==typeof e?.type}const{isArray:s}=Array;function c(e){return s(e)}function m(e){return null==e||"object"!=typeof e}const u="http://www.w3.org/2000/svg",{min:g,max:d}=Math;class h{cleanup(){}remove(){let e=new Range;return e.setStartBefore(this.start()),e.setEndAfter(this.end()),e.extractContents()}unmount(){this.cleanup(),this.remove()}moveTo(e){let a=this.start().parentElement;a.insertBefore(this.remove(),e)}}class p extends h{vNode;static guard=i;parentLayer;layerRNode;depth;alive=!0;pending=!0;cleanupQueue;opc;context;start(){return this.layerRNode.start()}end(){return this.layerRNode.end()}constructor(e,a,l,t){let n;super(),this.vNode=e,this.parentLayer=t,this.depth=(t?.depth??-1)+1;let{type:r,props:o}=e,i=r(o,this);"function"==typeof i?(this.opc=i,n=i(o,this)):(this.opc=r,n=i),this.layerRNode=new f(void 0,a,l),this.finishLayerUpdate(n)}runLayerUpdate(e){this.alive&&(this.pending||e)&&this.finishLayerUpdate((0,this.opc)(this.vNode.props,this))}finishLayerUpdate(e){this.pending=!1,this.layerRNode=k(this.layerRNode,e,this)}scheduleLayerUpdate(){this.alive&&!this.pending&&(this.pending=!0,L(this))}cleanup(){this.alive=!1;let{cleanupQueue:e}=this;if(e)for(let a=e.length-1;a>=0;a--)(0,e[a])();this.layerRNode.cleanup()}update(e){if(this.vNode.type!==e.type)return!1;let a=this.vNode.props;return this.vNode=e,a!==e.props&&this.runLayerUpdate(!0),!0}}function y(e){return null==e||"boolean"==typeof e?"":String(e)}class f extends h{vNode;static guard=m;text;start(){return this.text}end(){return this.text}constructor(e,a,l){super(),this.vNode=e;let t=new Text(y(e));a.insertBefore(t,l),this.text=t}update(e){return this.text.nodeValue=y(e),this.vNode=e,!0}}const b=[class extends h{vNode;static guard=o;children;element;svg;start(){return this.element}end(){return this.element}constructor(e,a,l,t){super(),this.vNode=e;let{type:o}=e,i="svg"===o||a.namespaceURI===u&&"foreignObject"!==a.tagName,s=i?document.createElementNS(u,o):document.createElement(o);this.svg=i,this.element=s;let{props:c}=e;for(let e in c)n(s,e,void 0,c[e],this.svg,t.depth+1);let{children:m}=c;void 0!==m&&(this.children=A(m,s,null,t)),r(s,"value",c),r(s,"checked",c),a.insertBefore(s,l)}cleanup(){this.children?.cleanup(),this.vNode.props.ref?.(null)}update(e,a){if(this.vNode.type!==e.type)return!1;let l=this.vNode.props,t=e.props,{element:o,svg:i}=this,s=a.depth+1;for(let e in l)e in t||n(o,e,l[e],void 0,i,s);for(let e in t)n(o,e,l[e],t[e],i,s);this.vNode=e;let{children:c}=t;return this.children&&void 0!==c?this.children=k(this.children,c,a):this.children?(this.children.unmount(),this.children=void 0):void 0!==c&&(this.children=A(c,o,null,a)),r(o,"value",t),r(o,"checked",t),!0}},p,class extends h{vNode;static guard=c;children;start(){return this.children[0].start()}end(){return this.children.at(-1).end()}constructor(e,a,l,t){super(),this.vNode=e;let n=e.length>0?e:[void 0];this.children=n.map(e=>A(e,a,l,t))}cleanup(){for(let e of this.children)e.cleanup()}update(e,a){let l,t,n,r;let{children:o}=this,i=this.vNode;{let e=this.end();l=e.parentElement,t=e.nextSibling}let s=i.length,c=e.length,m=g(s,c);function u(e,t,i,s,c){if(void 0!==t){let m=r?.get(t);if(m){r.delete(t),m.moveTo(e),o[s]=k(m,i,a);return}if(c){let a=new Text;l.insertBefore(a,e),(n??=[]).push({adjacent:a,key:t,vNode:i,index:s});return}}o[s]=A(i,l,e,a)}function h(e,a){void 0!==a?(r??=new Map).set(a,e):e.unmount()}m=d(m,1),c=d(c,1);let p=0;for(;pe.depth-a.depth,v=(e,a)=>a.depth-e.depth;let S=[];function T(){for(;S.length;){let a=S;for(let l of(S=[],a.sort(w),e=[],a))l.runLayerUpdate(!1);for(;e.length;){let a=e;for(let{cb:l}of(e=[],a.sort(v),a))l()}e=void 0}}const M=({rootNode:e})=>e();async function L(e){S.push(e),await 0,T()}function B(e,a){e.alive?(e.cleanupQueue??=[]).push(a):a()}function H(e){e.scheduleLayerUpdate()}const x={},P=Symbol("vdomk.Fragment");function G(e,a,...l){let t=a?.key;if(e===P){let e=l.length>0?l:a?.children??[];return e.key=t,e}return l.length>0&&(a={...a,children:l}),{type:e,key:t,props:a??x}}var C,D={};D='';var R={};R='';var E={};E='';var N={};N='';var I={};I='';var j={};j='';var W={};W='';var z={};z='';var F={};F='';var O={};O='';var V={};V='';var K={};K='';var Q={};Q='';var Z={};Z='';const U=e=>URL.createObjectURL(new Blob([e],{type:"image/svg+xml"})),q=U(a(D)),$=U(a(R)),J=U(a(E)),Y=U(a(N)),_=U(a(I)),X=U(a(j)),ee=U(a(W)),ea=U(a(z)),el=U(a(F)),et=U(a(O)),en=U(a(V)),er=U(a(K)),eo=U(a(Q)),ei=U(a(Z));let es=0;const ec=[];ec.push({fullName:"Essentials",cost:1,text:"Attack\nItem",limited:!1,sortOrder:es++}),ec.push({fullName:"Second Board",cost:30,text:"Second Board",limited:!1,sortOrder:es++});{let e="",a=1,l=l=>{e=l,a=1},t=(l,...t)=>{ec.push({fullName:e+" "+a,cost:l,text:t.join("\n"),limited:!1,grants:{group:e,what:t},sortOrder:es++}),a++};l("White Magick"),t(15,"Cure","Blindna"),t(20,"Vox","Poisona"),t(25,"Protect","Shell"),t(30,"Cura","Raise"),t(40,"Dispel","Stona"),t(50,"Curaga","Regen"),t(60,"Cleanse","Esuna"),t(70,"Confuse","Faith"),t(80,"Bravery","Curaja"),t(90,"Dispelga","Arise"),t(100,"Holy","Esunaga"),t(110,"Protectga","Shellga"),t(155,"Renew"),l("Black Magick"),t(15,"Fire","Thunder"),t(20,"Blizzard","Blind"),t(25,"Aqua","Silence"),t(30,"Aero","Sleep"),t(40,"Fira","Poison"),t(50,"Thundara","Blizzara"),t(60,"Bio","Blindga"),t(70,"Aeroga","Silencega"),t(90,"Firaga","Thundaga"),t(90,"Blizzaga","Sleepga"),t(100,"Shock","Toxify"),t(120,"Scourge","Flare"),t(165,"Scathe"),l("Time Magick"),t(20,"Slow","Immobilize"),t(30,"Reflect","Disable"),t(40,"Vanish","Balance"),t(50,"Gravity","Haste"),t(60,"Stop","Bleed"),t(70,"Break","Doom"),t(80,"Float","Berserk"),t(90,"Vanishga","Warp"),t(100,"Reflectga","Slowga"),t(125,"Graviga","Hastega"),l("Green Magick"),t(40,"Decoy","Oil"),t(50,"Drain","Reverse"),t(90,"Bubble","Syphon"),l("Arcane Magick"),t(40,"Dark","Darkra"),t(50,"Death","Darkga"),t(110,"Ardor")}{let e=(e,a,l)=>{ec.push({fullName:a,cost:e,text:l,limited:!1,grants:{group:"Technicks",what:[a]},sortOrder:es++})};e(35,"1000 Needles","Deal 1,000 damage to one foe."),e(40,"Achilles","Render one foe vulnerable to an additional element."),e(30,"Bonecrusher","Consume HP to reduce the HP of one foe to 0."),e(50,"Wither","Lower one foe's strength."),e(50,"Expose","Lower one foe's defense."),e(50,"Shear","Lower one foe's magick resist."),e(50,"Addle","Lower one foe's magick power."),e(30,"Charge","Restore user's MP. If the technick fails, MP is reduced to 0."),e(30,"Charm","Cause one foe to confuse friend with foe."),e(35,"Souleater","Consume HP to deal damage to one foe."),e(20,"First Aid","Restore HP to one HP Critical ally."),e(30,"Gil Toss","Throw gil, damaging all foes in range."),e(50,"Horology","Deal damage based on a factor of time to all foes in range."),e(25,"Libra","Reveal more detailed target information."),e(30,"Infuse","Fully consume user's MP, changing one ally's HP to 10 times that amount."),e(40,"Numerology","Deal damage that increases with successive hits."),e(30,"Poach","Capture HP Critical foes to obtain loot."),e(70,"Shades of Black","Cast a random black magick on one foe."),e(40,"Revive","Fully consume user's HP, reviving and fully restoring HP of one KO'd ally."),e(40,"Sight Unseeing","Unleash an attack only available when blind."),e(40,"Stamp","Inflict one foe with any status effects on the user."),e(20,"Steal","Steal from one foe."),e(50,"Traveler","Deal damage based on total steps taken to all foes in range."),e(80,"Telekinesis","Deal ranged damage with melee weapons.")}{let e=(e,a,...l)=>{let t=1;for(let n of l)ec.push({fullName:e+" "+t,cost:n,text:a,limited:!1,grants:{group:e,what:1},sortOrder:es++}),t++};e("Battle Lore","Increase physical attack damage.",30,30,30,30,50,50,50,50,70,70,70,70,100,100,100,100),e("Magick Lore","Increase Magick potency.",30,30,30,30,50,50,50,50,70,70,70,70,100,100,100,100),e("Gambit Slot","Adds an additional gambit slot",15,20,25,30,35,40,45,50,70,100)}{let e=(e,a)=>{ec.push({fullName:`+${e} HP`,cost:a,text:`Increase max HP by ${e}.`,limited:!1,grants:{group:"HP",what:e},sortOrder:es++})};e(30,20),e(70,30),e(110,40),e(150,50),e(190,60),e(230,70),e(270,80),e(310,90),e(350,100),e(390,115),e(435,130),e(500,220)}{let e=1;for(let a of[50,75,100,125])ec.push({fullName:"Quickening "+e,cost:a,text:"Unleash a devastating attack.",limited:!0,grants:{group:"Quickening",what:1},image:ei,sortOrder:es++}),e++}{let e=(e,a,l,t)=>{ec.push({fullName:a,cost:e,text:`Summon ${a} ${l}`,limited:!0,grants:{group:"Esper",what:[a]},image:t,sortOrder:es++})};e(20,"Belias","the Gigas",q),e(30,"Mateus","the Corrupt",er),e(35,"Adrammelech","the Wroth",et),e(30,"Zalera","the Death Seraph",J),e(50,"C\xfachulainn","the Impure",ea),e(65,"Zeromus","The Condemner",Y),e(65,"Exodus","the Judge-Sal",ee),e(50,"Shemhazai","the Whisperer",el),e(50,"Hashmal","Bringer of Order",_),e(100,"Famfrit","the Darkening Cloud",en),e(100,"Chaos","Walker of the Wheel",$),e(115,"Ultima","High Seraph",X),e(200,"Zodiark","Keeper of Precepts",eo)}{let e=(e,a,l)=>{ec.push({fullName:a,cost:e,text:l,limited:!1,grants:{group:"Passive",what:[a]},sortOrder:es++})};e(70,"Focus","Increases strength when HP is full."),e(70,"Serenity","Increases magick when HP is full."),e(65,"Adrenaline","Increases strength when HP Critical."),e(65,"Spellbreaker","Increases magick power when HP Critical."),e(70,"Last Stand","Increases defense when HP Critical."),e(90,"Brawler","Increases attack power when fighting empty-handed."),e(25,"Shield Block 1","Increases chance to block with a shield."),e(45,"Shield Block 2","Increases chance to block with a shield."),e(75,"Shield Block 3","Increases chance to block with a shield."),e(30,"Inquisitor","Gain MP after dealing damage."),e(30,"Warmage","Gain MP after dealing magick damage."),e(30,"Headsman","Gain MP after defeating a foe."),e(30,"Martyr","Gain MP after taking damage."),e(30,"Swiftness 1","Reduces action time by 10%."),e(50,"Swiftness 2","Reduces action time by 10%."),e(80,"Swiftness 3","Reduces action time by 10%."),e(30,"Channeling 1","Reduces MP cost of Spells"),e(50,"Channeling 2","Reduces MP cost of Spells"),e(80,"Channeling 3","Reduces MP cost of Spells"),e(30,"Spellbound","Increases duration of status effects."),e(20,"Potion Lore 1","Potions restore more HP."),e(35,"Potion Lore 2","Potions restore more HP."),e(70,"Potion Lore 3","Potions restore more HP."),e(20,"Ether Lore 1","Ethers restore more MP."),e(35,"Ether Lore 2","Ethers restore more MP."),e(70,"Ether Lore 3","Ethers restore more MP."),e(20,"Remedy Lore 1","Sleep, Sap, Immobilize, and Disable"),e(30,"Remedy Lore 2","Petrify, Confuse, and Oil"),e(70,"Remedy Lore 3","Stop, Doom, and Disease."),e(30,"Phoenix Lore 1","Phoenix Down restores more HP."),e(50,"Phoenix Lore 2","Phoenix Down restores more HP."),e(90,"Phoenix Lore 3","Phoenix Down restores more HP.")}{let e=(e,a,l,...t)=>{ec.push({fullName:l,cost:e,text:t.join("\n"),limited:!1,grants:{group:a,what:t},sortOrder:es++})};e(5,"Accessories","Accessories 1","Orrachea Armlet"),e(20,"Accessories","Accessories 2","Bangle","Firefly"),e(25,"Accessories","Accessories 3","Diamond Armlet","Argyle Armlet"),e(35,"Accessories","Accessories 4","Battle Harness","Steel Gorget"),e(35,"Accessories","Accessories 5","Tourmaline Ring","Embroidered Tippet"),e(35,"Accessories","Accessories 6","Golden Amulet","Leather Gorget"),e(40,"Accessories","Accessories 7","Rose Corsage","Turtleshell Choker"),e(45,"Accessories","Accessories 8","Thief's Cuffs","Gauntlets"),e(30,"Accessories","Accessories 9","Amber Armlet","Black Belt"),e(40,"Accessories","Accessories 10","Jade Collar","Nishijin Belt"),e(45,"Accessories","Accessories 11","Pheasant Netsuke","Blazer Gloves"),e(60,"Accessories","Accessories 12","Gillie Boots","Steel Poleyns"),e(60,"Accessories","Accessories 13","Berserker Bracers","Magick Gloves"),e(70,"Accessories","Accessories 14","Sage's Ring","Agate Ring"),e(70,"Accessories","Accessories 15","Ruby Ring","Bowline Sash"),e(70,"Accessories","Accessories 16","Cameo Belt","Cat-ear Hood"),e(80,"Accessories","Accessories 17","Bubble Belt","Fuzzy Miter"),e(80,"Accessories","Accessories 18","Sash","Power Armlet"),e(100,"Accessories","Accessories 19","Indigo Pendant","Winged Boots"),e(115,"Accessories","Accessories 20","Opal Ring","Hermes Sandals"),e(130,"Accessories","Accessories 21","Quasimodo Boots","Nihopalaoa"),e(160,"Accessories","Accessories 22","Germinas Boots","Ring of Renewal"),e(215,"Accessories","Ribbon","Ribbon"),e(15,"Shields","Shields 1","Leather Shield","Buckler"),e(20,"Shields","Shields 2","Bronze Shield","Round Shield"),e(25,"Shields","Shields 3","Golden Shield","Ice Shield","Flame Shield"),e(30,"Shields","Shields 4","Diamond Shield","Platinum Shield","Dragon Shield"),e(35,"Shields","Shields 5","Crystal Shield","Kaiser Shield"),e(40,"Shields","Shields 6","Aegis Shield","Demon Shield"),e(65,"Shields","Shields 7","Venetian Shield"),e(90,"Shields","Shell Shield","Shell Shield"),e(100,"Shields","Ensanguined Shield","Ensanguined Shield"),e(235,"Shields","Zodiac Escutcheon","Zodiac Escutcheon"),e(10,"Light Armor","Light Armor 1","Leather Cap","Leather Clothing"),e(15,"Light Armor","Light Armor 2","Headgear","Headguard","Chromed Leathers","Leather Breastplate"),e(20,"Light Armor","Light Armor 3","Leather Headgear","Horned Hat","Bronze Chestplate","Ringmail"),e(25,"Light Armor","Light Armor 4","Balaclava","Soldier's Cap","Windbreaker","Heavy Coat"),e(30,"Light Armor","Light Armor 5","Green Beret","Red Cap","Survival Vest","Brigandine"),e(40,"Light Armor","Light Armor 6","Headband","Pirate Hat","Jujitsu Gi","Viking Coat"),e(50,"Light Armor","Light Armor 7","Goggle Mask","Adamant Hat","Metal Jerkin","Adamant Vest"),e(60,"Light Armor","Light Armor 8","Officer's Hat","Chakra Band","Barrel Coat","Power Vest"),e(70,"Light Armor","Light Armor 9","Thief's Cap","Gigas Hat","Ninja Gear","Gigas Chestplate"),e(75,"Light Armor","Light Armor 10","Chaperon","Minerva Bustier"),e(80,"Light Armor","Light Armor 11","Crown of Laurels","Rubber Suit"),e(90,"Light Armor","Light Armor 12","Renewing Morion","Mirage Vest"),e(110,"Light Armor","Light Armor 13","Dueling Mask","Brave Suit"),e(25,"Heavy Armor","Heavy Armor 1","Leather Helm","Bronze Helm","Leather Armor","Bronze Armor"),e(30,"Heavy Armor","Heavy Armor 2","Sallet","Iron Helm","Scale Armor","Iron Armor"),e(35,"Heavy Armor","Heavy Armor 3","Barbut","Winged Helm","Linen Cuirass","Chainmail"),e(40,"Heavy Armor","Heavy Armor 4","Golden Helm","Burgonet","Golden Armor","Shielded Armor"),e(50,"Heavy Armor","Heavy Armor 5","Close Helmet","Bone Helm","Demon Mail","Bone Mail"),e(55,"Heavy Armor","Heavy Armor 6","Diamond Helm","Diamond Armor"),e(60,"Heavy Armor","Heavy Armor 7","Steel Mask","Mirror Mail"),e(65,"Heavy Armor","Heavy Armor 8","Platinum Helm","Platinum Armor"),e(70,"Heavy Armor","Heavy Armor 9","Giant's Helmet","Carabineer Mail"),e(80,"Heavy Armor","Heavy Armor 10","Dragon Helm","Dragon Mail"),e(90,"Heavy Armor","Heavy Armor 11","Magepower Shishak","Maximillian"),e(110,"Heavy Armor","Heavy Armor 12","Grand Helm","Grand Armor"),e(10,"Mystic Armor","Mystic Armor 1","Cotton Cap","Magick Curch","Cotton Shirt","Light Woven Shirt"),e(15,"Mystic Armor","Mystic Armor 2","Pointy Hat","Topkapi Hat","Silken Shirt","Kilimweave Shirt"),e(20,"Mystic Armor","Mystic Armor 3","Calot Hat","Wizard's Hat","Shepherd's Bolero","Wizard's Robes"),e(25,"Mystic Armor","Mystic Armor 4","Lambent Hat","Feathered Cap","Chanter's Djellaba","Traveler's Vestment"),e(30,"Mystic Armor","Mystic Armor 5","Mage's Hat","Lamia's Tiara","Mage's Habit","Enchanter's Habit"),e(40,"Mystic Armor","Mystic Armor 6","Sorcerer's Hat","Black Cowl","Sorcerer's Habit","Black Garb"),e(50,"Mystic Armor","Mystic Armor 7","Astrakhan Hat","Gaia Hat","Carmagnole","Maduin Gear"),e(60,"Mystic Armor","Mystic Armor 8","Hypnocrown","Gold Hairpin","Jade Gown","Gaia Gear"),e(70,"Mystic Armor","Mystic Armor 9","Celebrant's Miter","Cleric's Robes"),e(75,"Mystic Armor","Mystic Armor 10","Black Mask","Black Robes"),e(80,"Mystic Armor","Mystic Armor 11","White Mask","White Robes"),e(90,"Mystic Armor","Mystic Armor 12","Golden Skullcap","Glimmering Robes"),e(110,"Mystic Armor","Mystic Armor 13","Circlet","Lordly Robes"),e(190,"Genji Armor","Genji Armor","Genji Shield","Genji Helm","Genji Armor","Genji Gloves"),e(15,"Swords","Swords 1","Broadsword"),e(25,"Swords","Swords 2","Longsword","Iron Sword"),e(35,"Swords","Swords 3","Zwill Blade","Ancient Sword"),e(50,"Swords","Swords 4","Lohengrin","Flametongue"),e(55,"Swords","Swords 5","Demonsbane","Icebrand"),e(60,"Swords","Swords 6","Platinum Sword","Bastard Sword"),e(70,"Swords","Swords 7","Diamond Sword","Runeblade"),e(80,"Swords","Swords 8","Deathbringer","Stoneblade"),e(90,"Swords","Swords 9","Durandal","Simha"),e(50,"Swords","Blood Sword","Blood Sword"),e(80,"Swords","Karkata","Karkata"),e(20,"Bows","Bows 1","Shortbow"),e(30,"Bows","Bows 2","Silver Bow","Aevis Killer"),e(35,"Bows","Bows 3","Longbow","Killer Bow"),e(45,"Bows","Bows 4","Elfin Bow","Loxley Bow"),e(60,"Bows","Bows 5","Giant Stonebow","Burning Bow"),e(70,"Bows","Bows 6","Traitor's Bow","Yoichi Bow"),e(90,"Bows","Bows 7","Perseus Bow","Artemis Bow"),e(130,"Bows","Sagittarius","Sagittarius"),e(200,"Bows","Dhanusha","Dhanusha"),e(20,"Spears","Spears 1","Javelin","Spear"),e(25,"Spears","Spears 2","Partisan","Heavy Lance"),e(35,"Spears","Spears 3","Storm Spear","Obelisk"),e(60,"Spears","Spears 4","Halberd","Trident"),e(40,"Spears","Spears 5","Holy Lance","Gungnir"),e(70,"Spears","Dragon Whisker","Dragon Whisker"),e(100,"Spears","Vrsabha","Vrsabha"),e(240,"Spears","Zodiac Spear","Zodiac Spear"),e(20,"Axes & Hammers","Axes & Hammers 1","Handaxe"),e(25,"Axes & Hammers","Axes & Hammers 2","Iron Hammer","Broadaxe"),e(35,"Axes & Hammers","Axes & Hammers 3","War Hammer","Slasher"),e(50,"Axes & Hammers","Axes & Hammers 4","Sledgehammer","Hammerhead"),e(60,"Axes & Hammers","Axes & Hammers 5","Francisca","Morning Star"),e(65,"Axes & Hammers","Axes & Hammers 6","Greataxe","Golden Axe"),e(85,"Axes & Hammers","Axes & Hammers 7","Scorpion Tail"),e(175,"Axes & Hammers","Vrscika","Vrscika"),e(35,"Katana","Katana 1","Kotetsu","Osafune"),e(50,"Katana","Katana 2","Kogarasumaru","Magoroku"),e(70,"Katana","Katana 3","Murasame","Kiku-ichimonji"),e(90,"Katana","Katana 4","Yakei","Ame-no-Murakumo"),e(100,"Katana","Katana 5","Muramasa"),e(130,"Katana","Masamune","Masamune"),e(200,"Katana","Kumbha","Kumbha"),e(50,"Greatswords","Greatswords 1","Claymore"),e(70,"Greatswords","Greatswords 2","Defender","Save the Queen"),e(80,"Greatswords","Greatswords 3","Ultima Blade"),e(100,"Greatswords","Greatswords 4","Ragnarok"),e(135,"Greatswords","Excalibur","Excalibur"),e(150,"Greatswords","Excalipur","Excalipur"),e(225,"Greatswords","Tournesol","Tournesol"),e(20,"Rods","Rods 1","Rod","Serpent Rod"),e(30,"Rods","Rods 2","Healing Rod","Gaia Rod"),e(40,"Rods","Rods 3","Power Rod","Empyrean Rod"),e(50,"Rods","Rods 4","Holy Rod"),e(130,"Rods","Rod of Faith","Rod of Faith"),e(15,"Staves","Staves 1","Oak Staff"),e(25,"Staves","Staves 2","Cherry Staff","Wizard's Staff"),e(30,"Staves","Staves 3","Flame Staff","Storm Staff"),e(40,"Staves","Staves 4","Glacial Staff","Golden Staff"),e(65,"Staves","Staves 5","Judicer's Staff","Cloud Staff"),e(115,"Staves","Staff of the Magi","Staff of the Magi"),e(30,"Maces","Maces 1","Mace","Bronze Mace"),e(40,"Maces","Maces 2","Bhuj","Miter"),e(60,"Maces","Maces 3","Thorned Mace","Chaos Mace"),e(65,"Maces","Maces 4","Doom Mace","Zeus Mace"),e(50,"Maces","Maces 5","Grand Mace","Bone of Byblos"),e(40,"Measures","Measures 1","Gilt Measure"),e(50,"Measures","Measures 2","Arc Scale","Multiscale"),e(70,"Measures","Measures 3","Cross Scale","Caliper"),e(100,"Measures","Measures 4","Euclid's Sextant"),e(15,"Daggers","Daggers 1","Dagger"),e(20,"Daggers","Daggers 2","Mage Masher","Assassin's Dagger"),e(35,"Daggers","Daggers 3","Chopper","Main Gauche"),e(45,"Daggers","Daggers 4","Gladius","Avenger"),e(60,"Daggers","Daggers 5","Orichalcum Dirk","Platinum Dagger"),e(80,"Daggers","Daggers 6","Zwill Crossblade"),e(220,"Daggers","Shikari Nagasa & Mina","Shikari Nagasa","Mina"),e(30,"Guns","Guns 1","Altair"),e(50,"Guns","Guns 2","Capella","Vega"),e(60,"Guns","Guns 3","Sirius","Betelgeuse"),e(70,"Guns","Guns 4","Ras Algethi","Aldebaran"),e(90,"Guns","Guns 5","Spica","Antares"),e(100,"Guns","Guns 6","Arcturus","Fomalhaut"),e(190,"Guns","Mithuna","Mithuna"),e(20,"Poles","Poles 1","Oaken Pole"),e(30,"Poles","Poles 2","Battle Bamboo","Cypress Pole"),e(35,"Poles","Poles 3","Musk Stick","Iron Pole"),e(40,"Poles","Poles 4","Six-fluted Pole","Gokuu Pole"),e(50,"Poles","Poles 5","Zephyr Pole","Ivory Pole"),e(60,"Poles","Poles 6","Sweep","Eight-fluted Pole"),e(90,"Poles","Whale Whisker","Whale Whisker"),e(180,"Poles","Kanya","Kanya"),e(25,"Crossbows","Crossbows 1","Bowgun","Crossbow"),e(40,"Crossbows","Crossbows 2","Paramina Crossbow","Recurve Crossbow"),e(60,"Crossbows","Crossbows 3","Hunting Crossbow","Penetrator Crossbow"),e(115,"Crossbows","Crossbows 4","Gastrophetes","Tula"),e(35,"Hand-bombs","Hand-bombs 1","Hornito"),e(55,"Hand-bombs","Hand-bombs 2","Fumarole","Tumulus"),e(75,"Hand-bombs","Hand-bombs 3","Caldera","Volcano"),e(105,"Hand-bombs","Hand-bombs 4","Makara"),e(100,"Ninja Swords","Ninja Swords 1","Ashura","Sakura-saezuri","Kagenui","Orochi"),e(120,"Ninja Swords","Ninja Swords 2","Iga Blade"),e(120,"Ninja Swords","Ninja Swords 3","Koga Blade"),e(180,"Ninja Swords","Yagyu Darkblade & Mesa","Yagyu Darkblade","Mesa")}const em=new Map;for(const e of ec){if(em.has(e.fullName))throw Error("Duplicate license name "+e.fullName);em.set(e.fullName,e)}function eu(e){let a=em.get(e);if(!a)throw Error("Internal error: Unknown license "+e);return a}const eg=[];{let e;for(let a of ec)a.grants&&(e&&e.name===a.grants.group||(e={name:a.grants.group,contents:[]},eg.push(e)),e.contents.push(a))}const ed=eg.find(e=>"Quickening"===e.name).contents,eh=eg.find(e=>"Esper"===e.name).contents,ep=[{name:"Vaan",innateLicenses:["Essentials","Steal","Daggers 1","Light Armor 1"].map(eu)},{name:"Balthier",innateLicenses:["Essentials","Steal","First Aid","Guns 1","Light Armor 2"].map(eu)},{name:"Fran",innateLicenses:["Essentials","White Magick 1","Black Magick 1","Steal","Bows 1","Light Armor 2"].map(eu)},{name:"Basch",innateLicenses:["Essentials","Libra","Swords 2","Shields 1","Heavy Armor 1"].map(eu)},{name:"Ashe",innateLicenses:["Essentials","White Magick 1","Swords 2","Shields 1","Heavy Armor 1","Accessories 2"].map(eu)},{name:"Penelo",innateLicenses:["Essentials","White Magick 1","First Aid","Daggers 1","Mystic Armor 1"].map(eu)}],ey=[{name:"White Mage",image:q,imageAlt:"Aries",text:"Mages who wield healing and support magicks.",rawBoardData:[[null,null,null,null,null,"Libra",null,null,null,null,null,"+230 HP"],[null,null,null,null,null,"C\xfachulainn",null,null,null,null,null,"Shemhazai",null,"Quickening 4"],[null,null,"Accessories 22","Accessories 20","Accessories 18","Accessories 16","Accessories 14",null,"+190 HP",null,"Accessories 13","Accessories 15","Accessories 17","Battle Lore 1","Ribbon"],["+270 HP","Zeromus","Mystic Armor 13","Magick Lore 13","Stamp","Inquisitor","Accessories 12",null,"Quickening 2",null,"Accessories 11","Spellbreaker","Accessories 19","Accessories 21","Rod of Faith","Chaos","+310 HP"],[null,null,"Mystic Armor 12","Serenity","Ether Lore 2","Magick Lore 5","Accessories 10","Accessories 8","Accessories 6","Accessories 7","Accessories 9","Magick Lore 6","Headsman","Magick Lore 9","+110 HP",null,"Greatswords 2"],[null,null,"Mystic Armor 11","Mystic Armor 10","Mystic Armor 9","Mystic Armor 8","Mystic Armor 7","Mystic Armor 6","Accessories 5","Charge","Rods 3","Channeling 2","Rods 4","Channeling 3","Battle Lore 2"],[null,null,"Magick Lore 14","Swiftness 2","Magick Lore 10",null,null,"Mystic Armor 5","Accessories 4","Ether Lore 1","Second Board",null,"Battle Lore 4","Magick Lore 11","Magick Lore 15","Ultima"],[null,"Zodiark","White Magick 13","Magick Lore 12","+70 HP",null,"Mateus","Mystic Armor 4","Accessories 3","Rods 2","Belias",null,"Warmage","Swiftness 1","Achilles"],[null,"Greatswords 1",null,null,"Famfrit",null,null,"Mystic Armor 3","Accessories 2","Battle Lore 3",null,null,"Exodus"],[null,null,null,"Numerology","Daggers 5",null,null,"Mystic Armor 2","Accessories 1","Rods 1",null,null,"Battle Lore 6"],[null,null,null,null,null,null,null,"Mystic Armor 1","Essentials","Gambit Slot 1"],[null,null,null,null,null,null,null,"Gambit Slot 2","White Magick 1","Magick Lore 1"],[null,null,null,null,"+150 HP","Quickening 1","Gambit Slot 4","Martyr","White Magick 2","Gambit Slot 3","Magick Lore 2"],[null,null,null,null,null,null,"Magick Lore 3","+30 HP","White Magick 3","Channeling 1","Gambit Slot 5"],[null,null,null,"Battle Lore 7","Adrammelech","Magick Lore 7","Gambit Slot 7","Magick Lore 4","White Magick 4","Magick Lore 8","Green Magick 3","Gambit Slot 6"],[null,null,null,"Souleater",null,"Gambit Slot 10","Gambit Slot 9","Green Magick 1","White Magick 5","Green Magick 2","Gambit Slot 8","Spellbound","Zalera"],[null,null,null,null,null,"White Magick 12","White Magick 10","White Magick 8","White Magick 6","White Magick 7","White Magick 9","White Magick 11"],[null,null,null,null,null,null,null,"Hashmal",null,null,"Quickening 3"],[null,null,null,null,null,null,null,null,null,null,"Battle Lore 5"]]},{name:"Uhlan",image:$,imageAlt:"Taurus",text:"Warriors who wield spears to pierce enemy armor.",rawBoardData:[[null,null,"Zeromus",null,null,null,null,null,null,"Quickening 4"],[null,null,"Heavy Armor 12","Poach","Phoenix Lore 2",null,"Black Magick 6",null,"Adrenaline","Accessories 21","Ribbon"],[null,null,"Heavy Armor 11","Heavy Armor 10","Swiftness 1",null,"Black Magick 5","Quickening 3","Swiftness 2","Accessories 19","Accessories 22","Zodiark"],[null,null,null,"Heavy Armor 9","Shades of Black",null,null,null,"+350 HP","Accessories 17"],[null,null,null,"Heavy Armor 8","Headsman","Shemhazai",null,null,"+310 HP","Accessories 15","Ultima","Expose"],[null,null,null,"Heavy Armor 7","Infuse",null,null,"Exodus","+270 HP","Accessories 13"],["Battle Lore 13","Adrammelech",null,"Heavy Armor 6","Phoenix Lore 1",null,null,null,"+230 HP","Accessories 11"],[null,"Charm","Heavy Armor 4","Heavy Armor 5","+30 HP","+70 HP","+110 HP","+150 HP","+190 HP","Focus","Accessories 12","Accessories 14"],["Quickening 1","Remedy Lore 1","Heavy Armor 3","Accessories 4","Accessories 5","Accessories 6","Accessories 7","Accessories 8","Accessories 9","Accessories 10","Remedy Lore 2","Accessories 16","Chaos","Black Magick 7"],[null,"Battle Lore 4","Heavy Armor 2","Accessories 3",null,"Belias","Second Board",null,null,"Last Stand","Battle Lore 6","Accessories 18",null,"Black Magick 8"],[null,"Martyr","Heavy Armor 1","Accessories 2",null,null,null,null,null,"Battle Lore 1","Battle Lore 8","Accessories 20"],[null,"Spears 1","Essentials","Accessories 1",null,null,null,"Bonecrusher","Hashmal","Achilles","Battle Lore 12","Magick Lore 1"],[null,"Spears 2","Battle Lore 3","Gambit Slot 1",null,null,null,null,null,"Battle Lore 10","Battle Lore 9","Magick Lore 2","Famfrit","Potion Lore 3"],[null,"Spears 3","First Aid","Gambit Slot 2","Gambit Slot 3","Gambit Slot 4","Quickening 2","Gambit Slot 8","Gambit Slot 9","Gambit Slot 10","Battle Lore 11","Magick Lore 4"],[null,"Spears 5","Spears 4","Inquisitor","Potion Lore 1","Gambit Slot 5","Gambit Slot 6","Gambit Slot 7","Battle Lore 2","Battle Lore 7","Battle Lore 15","Magick Lore 3"],[null,null,"Dragon Whisker","Vrsabha","Zodiac Spear","Revive","Zalera","Potion Lore 2","Battle Lore 5","Spellbound","Souleater"],[null,"Magick Lore 7","Mateus",null,null,null,null,null,null,null,"C\xfachulainn","Wither"],[null,null,"Magick Lore 8"]]},{name:"Machinist",image:J,imageAlt:"Gemini",text:"Warriors who snipe their foes with deadly precision.",rawBoardData:[[null,"Green Magick 1",null,"Quickening 2",null,null,null,null,null,null,null,null,null,"+350 HP","Chaos"],[null,"Exodus","Gambit Slot 10","Gambit Slot 7",null,"Belias","Second Board",null,null,null,null,null,null,null,"Battle Lore 4","Mithuna"],[null,null,"Gambit Slot 9","Gambit Slot 5","Gambit Slot 4","Gambit Slot 3","Gambit Slot 2",null,null,"Adrammelech",null,"Poach","Magick Lore 1","Magick Lore 2","Battle Lore 3","Battle Lore 2"],[null,null,"Gambit Slot 8","Gambit Slot 6","Martyr","Accessories 2","Accessories 1","Light Armor 1","Light Armor 2","Light Armor 3","Potion Lore 1","Light Armor 4","Light Armor 5","Guns 5","Magick Lore 4","Guns 6"],[null,null,null,"Mateus",null,"Accessories 3","Essentials","Guns 1","Guns 2","Inquisitor","Guns 3","Guns 4","Headsman"],[null,null,null,null,null,"Accessories 4","Gambit Slot 1",null,null,"Quickening 1",null,"Potion Lore 2","Light Armor 6"],[null,null,null,null,null,"Accessories 5","Measures 1",null,null,null,null,"Achilles","Light Armor 7","Quickening 3"],[null,null,null,null,"Zalera","Accessories 6","Libra",null,null,null,null,"Ether Lore 1","Light Armor 8"],[null,null,null,null,null,"Accessories 7","Measures 2",null,null,null,null,"Gil Toss","Last Stand",null,"Time Magick 9","Time Magick 10"],[null,null,null,null,null,"Accessories 8","Steal","Hashmal",null,null,null,"Potion Lore 3","Light Armor 9","Famfrit","Time Magick 8"],[null,null,null,null,null,"Accessories 9","Measures 3",null,null,null,null,"Numerology","Light Armor 10"],["Hand-bombs 4",null,null,null,"Phoenix Lore 1","Accessories 10","Charm","Remedy Lore 1","Traveler","Remedy Lore 2","Horology","Remedy Lore 3","Light Armor 11","Swiftness 1",null,null,"Zodiark","+390 HP"],["Zeromus","+310 HP","+190 HP","+150 HP","+30 HP","Accessories 11","Accessories 12","Accessories 13","Accessories 14","Accessories 15","Accessories 16","Accessories 17","Light Armor 12","Light Armor 13","Swiftness 2","Stamp","Swiftness 3"],[null,"+270 HP","+230 HP","+110 HP","+70 HP","Spellbound","Measures 4",null,null,"C\xfachulainn",null,"Accessories 18","Accessories 19","Accessories 20","Accessories 21","Accessories 22","Ribbon"],[null,null,null,null,null,"Shemhazai",null,null,null,"Magick Lore 3",null,null,null,"Ultima",null,"Quickening 4"],[null,null,null,null,null,"Hand-bombs 3",null,null,null,null,null,null,null,"Magick Lore 8","Magick Lore 7","Magick Lore 6"]]},{name:"Red Battlemage",image:Y,imageAlt:"Cancer",text:"Battlemages equally skilled with maces and magicks.",rawBoardData:[[null,null,null,"Steal",null,"White Magick 2"],[null,null,null,"Hashmal",null,"Quickening 1",null,"Mateus",null,null,"White Magick 7",null,"+230 HP",null,"Heavy Armor 9","Heavy Armor 10"],[null,null,"Accessories 16","Accessories 11","Gambit Slot 6","Gambit Slot 4","Gambit Slot 3","Time Magick 2",null,null,"Shemhazai",null,"Quickening 2",null,"Heavy Armor 8"],[null,null,"Accessories 14","Accessories 10","Gambit Slot 5","Martyr","Gambit Slot 2","White Magick 3","Black Magick 3","Green Magick 2","Black Magick 4","Black Magick 5","Black Magick 6","Time Magick 3","Exodus"],[null,null,"Accessories 22","Accessories 13","Second Board","Belias","Gambit Slot 1","Green Magick 1","White Magick 4","Arcane Magick 2","White Magick 5","Green Magick 3","White Magick 6","Arcane Magick 3"],["Channeling 3","Zeromus","Ribbon","Accessories 20",null,null,"Arcane Magick 1","Time Magick 1",null,null,null,"C\xfachulainn"],[null,null,"Accessories 21","Accessories 19",null,null,"Essentials","Mystic Armor 1",null,null,null,"Black Magick 9","Black Magick 10",null,"Battle Lore 4","Battle Lore 2"],[null,null,"Accessories 18","Accessories 12",null,null,"Accessories 1","Maces 1",null,null,null,null,null,null,"Famfrit"],[null,null,"Accessories 15","Accessories 8","Accessories 6","Accessories 4","Accessories 2","Mystic Armor 2","Mystic Armor 3","Mystic Armor 4","Shields 2","Gambit Slot 7","Shields 3","Gambit Slot 8","Gambit Slot 9","Gambit Slot 10"],[null,"Zalera","Accessories 17","Accessories 9","Accessories 7","Accessories 5","Accessories 3","Charge","Shields 1","Maces 2","Warmage","Mystic Armor 5","Mystic Armor 6","Mystic Armor 7","Mystic Armor 8","Shields 4"],[null,null,null,null,"Adrammelech",null,null,null,null,null,"Battle Lore 3","+110 HP",null,null,"Mystic Armor 9","Shields 5"],[null,null,null,null,null,null,"Greatswords 4",null,null,null,"Maces 3","Ether Lore 1",null,null,"Mystic Armor 10","Shields 6",null,"Greatswords 2"],[null,null,null,"+435 HP",null,null,"Zodiark",null,null,null,"Inquisitor","Spellbreaker",null,null,"Mystic Armor 11","Shields 7","Ultima","Greatswords 1"],[null,null,null,"Quickening 4","Ensanguined Shield","Magick Lore 11","Magick Lore 10","Magick Lore 6","Magick Lore 7","Magick Lore 2","Maces 4","Channeling 1",null,null,"Mystic Armor 12","Shell Shield"],[null,null,null,null,"Zodiac Escutcheon","Magick Lore 12","Magick Lore 9","Magick Lore 5","Magick Lore 8","Magick Lore 3","Magick Lore 1","+190 HP","Swiftness 1","Serenity","Mystic Armor 13","Souleater"],[null,null,null,null,null,null,null,null,"Quickening 3",null,"Magick Lore 4","Maces 5","Channeling 2","Headsman","+270 HP","Spellbound"],[null,null,null,null,null,null,null,null,null,null,null,null,null,"Chaos"],[null,null,null,null,null,null,null,null,null,null,null,null,null,"Greatswords 3"]]},{name:"Knight",image:_,imageAlt:"Leo",text:"Stalwart warriors who wield swords and shield.",rawBoardData:[[null,null,null,null,null,null,null,null,null,null,"Potion Lore 2"],[null,null,"Souleater","Adrenaline","Headsman",null,"Quickening 2",null,null,null,"Shemhazai"],[null,null,"+270 HP","Heavy Armor 4","Shield Block 1","Heavy Armor 5","Battle Lore 3","Heavy Armor 6","Battle Lore 4","Heavy Armor 7","Battle Lore 2","Heavy Armor 8"],["White Magick 7",null,"Gambit Slot 6","Martyr","Swords 3","Shields 3","Swords 4","Shields 4","Swords 5","Shields 5","Swords 6","Battle Lore 1"],["White Magick 6","Mateus","Gambit Slot 5","Heavy Armor 3","Shields 2",null,null,null,null,null,"Shields 6","Heavy Armor 9","Quickening 3"],[null,null,"Gambit Slot 4","+230 HP","Swords 2","Belias","Potion Lore 1",null,null,null,"Swords 7","Battle Lore 5"],[null,null,"Gambit Slot 3","Heavy Armor 2","Shields 1","Second Board",null,null,"Battle Lore 9","C\xfachulainn","Shields 7","Greatswords 1"],[null,null,"Gambit Slot 2","Inquisitor","Swords 1",null,null,null,null,null,"Swords 8","Heavy Armor 10","Exodus","+350 HP"],["+190 HP","+110 HP","+70 HP","Heavy Armor 1","Essentials","Accessories 1","Accessories 2",null,null,null,"Shield Block 2","Greatswords 2"],["Gambit Slot 7","Last Stand","+30 HP","Gambit Slot 1","First Aid","Accessories 3","Accessories 4",null,null,null,"Swords 9","Battle Lore 6",null,"Famfrit"],["Gambit Slot 8","+150 HP",null,null,null,"Accessories 5","Accessories 6","Quickening 1",null,null,"+310 HP","Greatswords 3","Heavy Armor 11","Greatswords 4","Heavy Armor 12"],["Gambit Slot 9","Infuse",null,null,null,"Accessories 7","Accessories 8",null,null,"Zeromus","Spellbound","Battle Lore 7","Shell Shield","Battle Lore 10","Excalibur",null,"Battle Lore 11"],["Gambit Slot 10","Focus",null,"Zalera",null,"Accessories 9","Accessories 10",null,null,null,"Shield Block 3","Sight Unseeing","Battle Lore 8","Battle Lore 12","Genji Armor","Ultima","Telekinesis"],["Blood Sword","Accessories 21","Accessories 19","Accessories 17","Accessories 13","Accessories 11","Accessories 12","Adrammelech",null,null,"Karkata","Ensanguined Shield","Swiftness 1","Zodiac Escutcheon","Tournesol"],["Ribbon","Accessories 22","Accessories 20","Accessories 18","Accessories 16","Accessories 14","Accessories 15",null,null,null,null,"Chaos","Quickening 4","Zodiark"],[null,"Hashmal",null,null,null,null,null,null,null,null,null,"+390 HP","Revive","Excalipur"],[null,"White Magick 8","White Magick 9"]]},{name:"Monk",image:X,imageAlt:"Virgo",text:"Warriors who temper their bodies into deadly weapons.",rawBoardData:[[null,null,null,"C\xfachulainn",null,null,null,null,"Belias","Second Board"],[null,null,"Brawler","Battle Lore 1",null,"Inquisitor","Martyr",null,"First Aid","Libra"],[null,null,"Battle Lore 5","Light Armor 4","Light Armor 3","Light Armor 2","Light Armor 1","Gambit Slot 1","Gambit Slot 2","Gambit Slot 3","Quickening 1"],["Traveler","Zalera","Battle Lore 2","Light Armor 5","Battle Lore 3","+30 HP","Essentials","Accessories 1","Accessories 2","Gambit Slot 4"],[null,null,"Battle Lore 4","Light Armor 6",null,"+70 HP","Poles 1",null,"Accessories 3","Gambit Slot 5",null,"Adrammelech",null,null,"Phoenix Lore 2"],["White Magick 9","Quickening 2","Numerology","Light Armor 7",null,"+110 HP","Poles 2",null,"Accessories 4","Potion Lore 1","Gambit Slot 6","Focus","Gambit Slot 7","Gambit Slot 8","Quickening 4"],[null,null,"Battle Lore 6","Light Armor 8",null,"+150 HP","Poles 3",null,"Accessories 5","Phoenix Lore 1","Last Stand","Spellbound","+310 HP","Gambit Slot 9","Zeromus","Sight Unseeing"],["White Magick 4","Hashmal","Headsman","Light Armor 9",null,"+190 HP","Poles 4",null,"Accessories 6","Accessories 7",null,null,"+350 HP","Gambit Slot 10"],[null,null,"Battle Lore 7","Light Armor 10",null,"Potion Lore 2","Poles 5",null,"Accessories 8","Accessories 9",null,"Quickening 3","+390 HP","Swiftness 1","Chaos","White Magick 11"],["Potion Lore 3","Shemhazai","Battle Lore 8","Light Armor 11",null,"+230 HP","Poles 6",null,"Accessories 10","Accessories 11","Mateus",null,"+500 HP","Battle Lore 9",null,"White Magick 12"],[null,null,"Battle Lore 10","Light Armor 12",null,"Revive","Bonecrusher",null,"Accessories 12","Accessories 13",null,null,"Accessories 22","Battle Lore 11"],[null,null,"Battle Lore 12","Light Armor 13",null,"+270 HP","Whale Whisker",null,"Achilles","Accessories 14","Accessories 15","Accessories 17","Accessories 19","Ribbon","Battle Lore 13","Ultima","Swiftness 2"],[null,null,"Wither","+435 HP",null,"Expose","Kanya",null,"Adrenaline","Shades of Black","Accessories 16","Accessories 18","Accessories 20","Accessories 21","Battle Lore 14",null,"Swiftness 3"],[null,null,null,null,null,"Exodus",null,null,null,"Famfrit",null,null,"Battle Lore 15","Battle Lore 16"],[null,null,null,null,null,"Souleater",null,null,null,"White Magick 10",null,"White Magick 13","Zodiark"]]},{name:"Time Battlemage",image:ee,imageAlt:"Libra",text:"Battlemages who wield crossbows and bend time to their will.",rawBoardData:[[null,null,null,null,null,"Channeling 3",null,"+150 HP",null,"White Magick 4"],[null,null,null,null,null,"Hashmal",null,"Quickening 2",null,"Adrammelech"],[null,null,null,"Gambit Slot 8","Channeling 1","Magick Lore 7","Warmage","Magick Lore 8","Charge","Magick Lore 3","Magick Lore 4","Poach","Spellbreaker"],[null,"Battle Lore 12","Exodus","Gambit Slot 9","Headsman","Heavy Armor 6","Time Magick 6","Swiftness 1","Heavy Armor 5","Time Magick 5","Heavy Armor 4","Ether Lore 2","Gambit Slot 7"],[null,null,null,"Gambit Slot 10","Magick Lore 6","Time Magick 7",null,"Zalera",null,null,"Magick Lore 2","Time Magick 4","Gambit Slot 6","Mateus","+230 HP"],[null,null,null,"+190 HP","Remedy Lore 2","Heavy Armor 7",null,"Ether Lore 3",null,"Second Board","Heavy Armor 3","Time Magick 3","Gambit Slot 5"],[null,null,"Quickening 3","Horology","Last Stand","Heavy Armor 8",null,null,null,"Belias","Heavy Armor 2","Time Magick 2","Gambit Slot 4","Quickening 1"],[null,null,null,"Spellbound","Magick Lore 5","Time Magick 8",null,null,null,null,"Magick Lore 1","Time Magick 1","Gambit Slot 2"],["Battle Lore 9","Famfrit",null,"Ether Lore 1","Serenity","Heavy Armor 9","Zeromus","Addle","Shear",null,"Heavy Armor 1","Essentials","Gambit Slot 1"],[null,"Magick Lore 9","Heavy Armor 12","Stamp","Time Magick 9","Heavy Armor 10",null,null,null,null,"Martyr","Accessories 1","Accessories 2","Inquisitor","Remedy Lore 1"],[null,"Swiftness 3","Time Magick 10","Heavy Armor 11","Channeling 2","Swiftness 2",null,"+270 HP",null,null,"Gambit Slot 3","Crossbows 1","Accessories 3","Accessories 4","Crossbows 2"],[null,null,null,null,null,null,null,"Chaos",null,null,null,null,null,"Accessories 5"],[null,null,"Accessories 20","Accessories 18","Accessories 16","Accessories 14","Accessories 13","Accessories 12","Accessories 11","Accessories 10","Accessories 9","Accessories 8","Accessories 7","Accessories 6"],[null,"Accessories 22","Accessories 21","Accessories 19","Accessories 17","Accessories 15","Crossbows 4","Battle Lore 7","Battle Lore 6","Battle Lore 5","Battle Lore 1","Battle Lore 2","Battle Lore 4","Battle Lore 3","+110 HP"],[null,"Ribbon","Battle Lore 10","Battle Lore 8","Green Magick 3",null,"Ultima",null,null,"C\xfachulainn",null,"Green Magick 2","Crossbows 3","Green Magick 1","Numerology","Shemhazai"],[null,null,"Zodiark",null,"Quickening 4",null,"Swords 7"],[null,null,"Swords 9",null,null,null,"Swords 8"]]},{name:"Foebreaker",image:ea,imageAlt:"Scorpio",text:"Warriors who use mighty weapons to tear their foes asunder.",rawBoardData:[[null,null,null,"Shades of Black",null,"Swiftness 2"],[null,null,null,"C\xfachulainn",null,"Hashmal","Quickening 2",null,null,"Quickening 1"],[null,null,"Shell Shield","Last Stand",null,"Shear","Martyr",null,"Gambit Slot 3","Gambit Slot 4"],[null,"Shemhazai","Gambit Slot 9","Gambit Slot 8","Gambit Slot 7","Gambit Slot 6","Gambit Slot 5","Infuse","Gambit Slot 1","Gambit Slot 2"],[null,null,"Heavy Armor 6","Heavy Armor 5","Heavy Armor 4","Heavy Armor 3","Heavy Armor 2","Heavy Armor 1","Essentials","Accessories 1"],["+390 HP","Quickening 3","Heavy Armor 7","Axes & Hammers 6","Axes & Hammers 5","Axes & Hammers 4","Axes & Hammers 3","Axes & Hammers 2","Axes & Hammers 1","Accessories 2"],[null,null,"Heavy Armor 8","Axes & Hammers 7",null,"Inquisitor","Shields 1",null,"+30 HP","Accessories 3","Belias","Horology"],[null,null,"Heavy Armor 9","Vrscika",null,"Shield Block 1","Shields 2",null,"Battle Lore 3","Accessories 4","Second Board",null,null,null,"Swiftness 3"],[null,null,"Heavy Armor 10","Gambit Slot 10",null,"Adrenaline","Shields 3",null,"+70 HP","Accessories 5",null,null,null,null,"Ultima"],["Magick Lore 1","Exodus","Heavy Armor 11","Sight Unseeing",null,"Shield Block 2","Shields 4",null,"Battle Lore 4","Accessories 6",null,null,"Accessories 17","Accessories 18","Accessories 19","Zodiark"],["Magick Lore 2",null,"Heavy Armor 12","Spellbound",null,"Headsman","Shields 5",null,"+110 HP","Accessories 7","Mateus",null,"Accessories 16","Battle Lore 9","Accessories 22"],["Magick Lore 4",null,"Genji Armor","Expose",null,"Shield Block 3","Shields 6",null,"Battle Lore 2","Accessories 8",null,null,"Accessories 15","Battle Lore 12","Accessories 21"],["Magick Lore 3","Zeromus","Swiftness 1","Ensanguined Shield",null,"Focus","Shields 7",null,"+150 HP","Accessories 9",null,null,"Accessories 14","Battle Lore 10","Accessories 20"],[null,null,"Addle","Wither",null,"Hand-bombs 2","Hand-bombs 1",null,"Battle Lore 1","Accessories 10","Accessories 11","Accessories 12","Accessories 13","+310 HP","+350 HP"],[null,null,"Ribbon","Zodiac Escutcheon",null,"Hand-bombs 4","Hand-bombs 3",null,"+190 HP","Battle Lore 5","+230 HP","Battle Lore 6","+270 HP","Battle Lore 7","Battle Lore 8","Chaos"],[null,null,null,"Quickening 4",null,null,"Adrammelech",null,null,"Zalera",null,null,null,null,"Famfrit"],[null,null,null,"Battle Lore 15",null,null,"Battle Lore 11",null,null,"Traveler",null,null,null,null,"Magick Lore 8"]]},{name:"Archer",image:el,imageAlt:"Sagittarius",text:"Warriors who rain death on their foes from afar.",rawBoardData:[[null,null,null,null,null,null,"Quickening 4",null,null,"Hashmal"],[null,null,null,null,null,null,"+230 HP","Revive","Gambit Slot 10","Gambit Slot 9","Gambit Slot 8"],[null,null,"+435 HP","+390 HP","Famfrit","+310 HP","+270 HP","Focus","Traveler","+110 HP","Gambit Slot 7","Gambit Slot 6"],[null,null,null,null,null,null,"Ribbon","+190 HP","+150 HP","Charm","+70 HP","Gambit Slot 5","Zalera"],[null,null,null,null,null,null,null,null,null,null,"+30 HP","Gambit Slot 4"],[null,null,null,null,null,"Battle Lore 4","Accessories 19",null,null,"Mateus","Poach","Gambit Slot 3","Quickening 1","White Magick 4"],[null,null,null,null,null,"Accessories 21","Accessories 13","Zeromus",null,null,"Libra","Gambit Slot 2"],[null,null,"Quickening 3",null,null,"Accessories 16","Accessories 9",null,null,null,"First Aid","Gambit Slot 1",null,null,null,null,"Exodus"],["Infuse","Ultima","Remedy Lore 3","Shear","Accessories 15","Accessories 11","Accessories 7","Accessories 5","Accessories 3","Accessories 1","Essentials","Bows 1","Martyr","Headsman","Remedy Lore 1","Phoenix Lore 1","Spellbound","Potion Lore 2"],["1000 Needles","Zodiark","Phoenix Lore 3","Addle","Accessories 17","Accessories 12","Accessories 8","Accessories 6","Accessories 4","Accessories 2","Light Armor 1","Bows 2","Inquisitor","Swiftness 1","Potion Lore 1","Remedy Lore 2","Battle Lore 3","Potion Lore 3"],[null,null,null,null,null,"Shades of Black","Accessories 10",null,null,null,"Light Armor 2","Steal",null,null,"C\xfachulainn"],[null,null,null,"Magick Lore 2","Chaos","Accessories 18","Accessories 14",null,null,"Belias","Light Armor 3","Bows 3"],[null,"Magick Lore 8","Magick Lore 3","Magick Lore 4",null,"Accessories 22","Accessories 20","Quickening 2",null,"Second Board","Light Armor 4","Last Stand"],[null,"Magick Lore 7",null,null,null,null,null,null,null,null,"Light Armor 5","Bows 4","Adrammelech"],[null,null,null,null,null,null,"Light Armor 10","Light Armor 9","Light Armor 8","Light Armor 7","Light Armor 6","Gil Toss"],[null,null,null,null,null,"Light Armor 12","Light Armor 11","Swiftness 3","Bows 7","Achilles","Bows 5","Magick Lore 1"],[null,null,null,null,null,"Light Armor 13","Dhanusha","Sagittarius","Phoenix Lore 2","Bows 6","Swiftness 2"],[null,null,null,null,null,null,null,null,"Shemhazai"],[null,null,null,null,null,null,"Heavy Armor 12","Heavy Armor 11","Heavy Armor 10"]]},{name:"Black Mage",image:et,imageAlt:"Capricorn",text:"Mages who channel elemental forces into deadly magicks.",rawBoardData:[[null,null,null,null,null,null,null,null,"+70 HP"],[null,null,null,null,"Zodiark",null,"Hand-bombs 3",null,"Quickening 1"],[null,null,null,"Mystic Armor 13","Mystic Armor 12",null,"Mateus","Magick Lore 4","Gambit Slot 5","Adrammelech","Hand-bombs 2"],[null,"+390 HP","Quickening 4","Mystic Armor 11","Staves 5",null,null,"Channeling 1","Gambit Slot 4"],[null,null,null,"Magick Lore 11","Mystic Armor 10",null,null,"Magick Lore 2","Gambit Slot 2"],[null,null,null,"Magick Lore 10","Mystic Armor 9",null,null,"Magick Lore 1","Gambit Slot 1","Gambit Slot 3","Gambit Slot 6","Martyr"],[null,null,null,"Magick Lore 9","Staves 4","Quickening 3",null,"Mystic Armor 1","Essentials","Accessories 1","Accessories 2","Accessories 4"],[null,null,null,"Magick Lore 5","Mystic Armor 8",null,"Second Board","Mystic Armor 2","Black Magick 1",null,"Accessories 3","Gambit Slot 7",null,"Poach"],[null,null,null,"Black Magick 13","Mystic Armor 7",null,"Belias","Staves 1","Black Magick 2",null,"Ether Lore 1","Accessories 5","Zalera","Steal"],[null,null,null,"Black Magick 12","Staves 3",null,null,"Mystic Armor 3","Black Magick 3",null,"Accessories 6","Magick Lore 3",null,null,"Hand-bombs 4"],[null,null,null,"Black Magick 11","Mystic Armor 6","Mystic Armor 5","Staves 2","Mystic Armor 4","Black Magick 4",null,"Warmage","Accessories 7",null,null,"Hashmal"],[null,null,null,"Black Magick 10","Black Magick 9","Black Magick 8","Black Magick 7","Black Magick 6","Black Magick 5",null,"Accessories 8","Inquisitor","Magick Lore 8","Green Magick 1","Channeling 2","+270 HP"],[null,null,null,null,null,null,null,null,null,null,"Charge","Accessories 9","Ether Lore 2","Spellbreaker","Magick Lore 7","Magick Lore 6"],["Telekinesis","Ultima","Magick Lore 14","Magick Lore 15","Ribbon","Channeling 3","Accessories 19","Gambit Slot 9","Accessories 15","Remedy Lore 1","Accessories 10","+150 HP",null,null,"Remedy Lore 2","Headsman","Shemhazai","Heavy Armor 7"],[null,null,"Magick Lore 16","Magick Lore 13","Magick Lore 12","Accessories 21","Green Magick 2","Accessories 17","Charm","Accessories 12","Serenity","Accessories 11",null,null,"Ether Lore 3","Green Magick 3"],[null,null,null,"Chaos",null,"Famfrit",null,null,"Zeromus",null,"Accessories 13","Gambit Slot 8","Accessories 16","Gambit Slot 10","Accessories 20","Staff of the Magi"],[null,null,null,null,"+230 HP","+190 HP",null,null,"Heavy Armor 9",null,"Spellbound","Accessories 14","Swiftness 1","Accessories 18","Swiftness 2","Accessories 22"],[null,null,null,null,"+310 HP",null,null,null,null,null,"Quickening 2",null,"C\xfachulainn",null,"Exodus"],[null,null,null,null,null,null,null,null,null,null,null,null,null,null,"Heavy Armor 8"]]},{name:"Bushi",image:en,imageAlt:"Aquarius",text:"Swordmasters who devote themselves body and soul to their lords.",rawBoardData:[[null,null,null,null,null,null,null,null,null,null,"Karkata",null,"Masamune","Kumbha"],[null,null,null,null,null,null,null,null,"Souleater",null,"Blood Sword","Zalera","Magick Lore 7","Serenity",null,"Battle Lore 7"],[null,null,null,null,null,null,null,null,"Adrammelech",null,null,null,"Magick Lore 8","Katana 5","Quickening 3","+390 HP"],[null,null,null,null,null,null,null,"Magick Lore 2","+230 HP","Magick Lore 4","+270 HP","Spellbreaker","Magick Lore 3","+310 HP"],[null,null,null,null,null,null,"Second Board","+190 HP","Inquisitor","Katana 2","Swiftness 2","Katana 3","Headsman","Katana 4",null,null,"Gambit Slot 9","Gambit Slot 10"],[null,null,null,null,null,"Libra","Belias","Magick Lore 1","Swiftness 1",null,"Mateus",null,"Hashmal",null,null,null,"Gambit Slot 8","Sight Unseeing"],[null,null,null,null,null,null,null,"+150 HP","Katana 1",null,null,null,null,null,null,null,"Gambit Slot 7","1000 Needles"],[null,null,null,"Shield Block 1",null,null,null,"+70 HP","Essentials","Accessories 1","Accessories 2","Last Stand","Gambit Slot 1","Gambit Slot 3","Gambit Slot 4","Gambit Slot 5","Gambit Slot 6","Gil Toss"],[null,null,null,"Shemhazai",null,null,null,"+110 HP","Mystic Armor 1",null,null,"Accessories 3","Gambit Slot 2","Infuse","Bonecrusher","Remedy Lore 2","Shades of Black","Spellbound"],[null,null,"Magick Lore 5","Magick Lore 6","Mystic Armor 9","Mystic Armor 7","Mystic Armor 5","Mystic Armor 3","Mystic Armor 2",null,null,"Accessories 4","Remedy Lore 1",null,"Quickening 2"],[null,null,"Magick Lore 9","Mystic Armor 11","Mystic Armor 10","Mystic Armor 8","Mystic Armor 6","Mystic Armor 4","Martyr","Quickening 1",null,"Accessories 5","Accessories 6",null,"+350 HP"],["+500 HP","Exodus","Magick Lore 10","Mystic Armor 12",null,null,null,null,null,null,null,"Accessories 7","Accessories 8",null,"Battle Lore 8"],[null,null,"Magick Lore 11","Mystic Armor 13","C\xfachulainn","Stamp","Ultima",null,null,"Famfrit",null,"Accessories 9","Accessories 10"],[null,null,"Magick Lore 12","Genji Armor",null,null,"Ribbon","Accessories 21","Accessories 19","Accessories 17","Accessories 14","Accessories 11","Accessories 13"],[null,null,"Zeromus",null,null,null,"Battle Lore 3","Accessories 22","Accessories 20","Accessories 18","Accessories 16","Accessories 15","Accessories 12"],[null,"Magick Lore 13","Magick Lore 15",null,"+435 HP","Quickening 4","Battle Lore 2","Battle Lore 4"],[null,null,null,null,null,null,"Battle Lore 5","Battle Lore 1","Chaos","Brawler"],[null,null,null,"Heavy Armor 10","Heavy Armor 9","Zodiark","Swiftness 3","Battle Lore 6"],[null,null,null,"Heavy Armor 11"]]},{name:"Shikari",image:er,imageAlt:"Pisces",text:"Warriors who fight nimbly across hill and dale.",rawBoardData:[[null,null,null,"Shades of Black",null,null,null,null,null,null,null,null,null,"Phoenix Lore 1","Phoenix Lore 2"],[null,null,null,"Adrammelech",null,null,null,null,null,null,null,null,null,"Ultima"],[null,null,"Gambit Slot 10","Gambit Slot 8","Remedy Lore 2","Gambit Slot 7",null,null,null,null,null,"Light Armor 10","Daggers 6","Light Armor 12","Shikari Nagasa & Mina","Chaos"],[null,"Quickening 2","Gambit Slot 9","Swiftness 1","Gambit Slot 6","Gambit Slot 5","Mateus","Gil Toss",null,"White Magick 12","C\xfachulainn","Daggers 5","Light Armor 11","Shields 7","Light Armor 13"],[null,"Ninja Swords 2",null,"Second Board","Gambit Slot 4","Gambit Slot 3",null,null,null,null,null,"Light Armor 9","Shields 6"],[null,null,null,"Belias","Gambit Slot 2","Gambit Slot 1",null,null,null,null,null,"Daggers 4","Light Armor 8","Exodus","Stamp"],["Ninja Swords 1",null,null,null,"First Aid","Daggers 1","Light Armor 2","Daggers 2","Shields 2","Light Armor 5","Shields 3","Light Armor 7","Shields 5"],["Quickening 1","Adrenaline","Last Stand","+30 HP","Martyr","Essentials","Light Armor 1","Light Armor 3","Light Armor 4","Daggers 3","Light Armor 6","Shields 4","Shield Block 2","Accessories 19","Accessories 22","Telekinesis"],[null,"Spellbound","+230 HP","+110 HP","Libra","Accessories 1",null,null,null,null,null,"Shield Block 1","Focus","Accessories 18","Accessories 21","Ribbon"],[null,"+310 HP","Headsman","+190 HP","+70 HP","Accessories 2","Accessories 3","Accessories 6","Accessories 8","Accessories 10","Accessories 12","Accessories 14","Accessories 16","Accessories 17","Accessories 20","+390 HP"],[null,null,"Hashmal",null,"+150 HP","Accessories 4","Accessories 5","Accessories 7","Accessories 9","Accessories 11","Accessories 13","Accessories 15","+350 HP"],[null,null,"Bonecrusher",null,"Battle Lore 3","Inquisitor",null,null,null,null,null,"Potion Lore 1","Traveler","Famfrit"],[null,null,null,null,"Battle Lore 4","+270 HP","Zalera","+435 HP",null,null,"Zeromus","Potion Lore 2","Magick Lore 1"],[null,null,"Remedy Lore 3","Battle Lore 1","Battle Lore 2","Remedy Lore 1",null,null,null,null,null,"Swiftness 3","Magick Lore 2","Magick Lore 4","Magick Lore 8","Zodiark"],["Ninja Swords 3","Quickening 3","Revive","Swiftness 2","Battle Lore 5","Battle Lore 6",null,null,null,null,null,"1000 Needles","Potion Lore 3","Magick Lore 3","Brawler"],[null,null,null,"Shemhazai",null,null,null,null,null,null,null,null,null,"Quickening 4"],[null,null,"Guns 6","Guns 5",null,null,null,null,null,null,null,null,null,"Yagyu Darkblade & Mesa"]]}],ef=ey.map(function(e){let a={name:e.name,text:e.text,image:e.image,imageAlt:e.imageAlt,rows:e.rawBoardData.map(e=>e.map(e=>e?{value:eu(e),adjacent:[]}:void 0)),lookup:new Map};for(let e=0;ea.rows[e]&&a.rows[e][l]&&n.adjacent.push(a.rows[e][l]);l(e-1,t),l(e+1,t),l(e,t-1),l(e,t+1),a.lookup.set(n.value,n)}}}return a});class eb{compare;nodes;constructor(e){this.compare=e,this.nodes=[]}size(){return this.nodes.length}insert(e){let a=this.nodes.length;for(this.nodes.push(e);a>0;){let e=a-1>>1;if(!this.compare(this.nodes[a],this.nodes[e]))return;let l=this.nodes[a];this.nodes[a]=this.nodes[e],this.nodes[e]=l,a=e}}remove(){if(this.nodes.length<2)return this.nodes.pop();let e=this.nodes[0],a=this.nodes.pop();this.nodes[0]=a;let l=0;for(;;){let t=2*l+1,n=t+1,r=l;if(te.slice()),this.selected=e.selected.map(e=>new Set(e)),this.blockedEspers=new Set(e.blockedEspers),this.quickeningCount=e.quickeningCount.slice()):(this.jobs=ep.map(e=>[]),this.selected=ep.map(e=>new Set),this.blockedEspers=new Set,this.quickeningCount=ep.map(e=>0),this.verify())}verify(){this.blockedEspers.clear();for(let e=0;e<6;e++){let a=this.selected[e];for(let l of eh)if(a.has(l))for(let a=e+1;a<6;a++)this.selected[a].delete(l);for(let l of(4===ed.filter(e=>a.has(e)).length&&a.delete(ed[3]),ep[e].innateLicenses))a.add(l);let l=new Set,t=[...ep[e].innateLicenses];for(;t.length;){let n=t.pop();if(!l.has(n)&&a.has(n))for(let a of(l.add(n),this.jobs[e])){let e=a.lookup.get(n);e&&t.push(...e.adjacent.map(e=>e.value))}}for(let e of eh)l.has(e)&&this.blockedEspers.add(e);this.quickeningCount[e]=ed.filter(e=>l.has(e)).length,this.selected[e]=l}}getJob(e,a){return this.jobs[e][a]}unemployed(e){return 0===this.jobs[e].length}allUnemployed(){return!this.jobs.find(e=>e.length>0)}getLpCount(e){let a=0;for(let l of this.selected[e])ep[e].innateLicenses.includes(l)||(a+=l.cost);return a}findPath(e,a){let l=new eb(function(e,a){return e.length{for(let n of a.keys())for(let r of this.jobs[e]){let e=r.lookup.get(n);if(e)for(let{value:n}of e.adjacent)!a.has(n)&&l(n)&&a.set(n,t)}};return l(e=>!e.limited,C.CERTAIN),l(a=>!this.blockedEspers.has(a)&&(!ed.includes(a)||this.quickeningCount[e]<3),C.POSSIBLE),a}encode(){let e="";for(let a=0;a<6;a++)e+=function(e,a){let l=ew.get(e[0]).get(e[1]),t=ek[l],n=[l],r=1,o=0;for(let e of t.licenses)a.has(e)&&(o|=r),256==(r<<=1)&&(n.push(o),o=0,r=1);for(1!==r&&n.push(o);n.length>1&&0===n[n.length-1];)n.pop();return btoa(String.fromCharCode(...n)).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}(this.jobs[a],this.selected[a]),5!==a&&(e+=".");return e}static decode(e){let a=e.split("."),l=a.map(ev),t=new eA;for(let e=0;e<6;e++){let a=l[e];a&&(t.jobs[e]=a.jobs,t.selected[e]=a.licenses)}return t.verify(),t}}const{urlLookup:ek,urlReverseLookup:ew}=function(){let e=ef.slice();e.unshift(void 0);let a=[];for(let l of e)for(let t of e){if(l&&l===t)continue;let e={job1:l,job2:t,licenses:[]};if(l)for(let a of l.rows)for(let l of a)l&&e.licenses.push(l.value);if(t)for(let a of t.rows)for(let t of a)t&&l&&!l.lookup.has(t.value)&&e.licenses.push(t.value);a.push(e)}let l=new Map;for(let e=0;ee),licenses:t}}function eS(e){let a=e,l=new Set;return{useStore(e){let t=()=>H(e);return l.add(t),B(e,()=>{l.delete(t)}),()=>a},dispatch(e){for(let t of(a=e(a),l))t()}}}const eT=e=>a=>a.boardIndex&&!e.getJob(a.characterIndex,a.boardIndex)?{...a,party:e,boardIndex:0,plannedParty:void 0}:{...a,party:e,plannedParty:void 0},eM=(e,a)=>l=>(a&&!l.party.getJob(e,0)&&(a=0),{...l,characterIndex:e,boardIndex:a}),eL=()=>e=>e.qeActive?{...e,qeActive:!1}:{...e,qeActive:!0,dpsActive:!1},eB=()=>e=>e.dpsActive?{...e,dpsActive:!1}:{...e,dpsActive:!0,qeActive:!1},eH=e=>a=>({...a,plannedParty:e}),{useStore:ex,dispatch:eP}=eS(function(){let e=window.location.search&&eA.decode(window.location.search.slice(1));return{party:e||new eA,characterIndex:0,boardIndex:0,qeActive:!1,dpsActive:!1,plannedParty:void 0}}());var eG=(e,a)=>{let l;let t=ex(a);return e=>{let n=t(),r=n.party===l?.from?l:void 0;return r?G("button",{class:"action button","aria-label":r.label,onClick:()=>eP(eT(r.to))},r.children):G("button",{class:"action button","aria-label":e.label,disabled:e.disabled,onClick:async()=>{let t=n.party,r=e.getNextParty();eP(eT(r));let o={from:r,to:t,label:`Undo ${e.label}`,children:G("i",null,"Undo ",e.children)};l=o,H(a),await new Promise(e=>setTimeout(e,5e3)),l===o&&(l=void 0,H(a))}},e.children)}},eC=(e,a)=>{let l=ex(a);return()=>{let e=l();function a(a,l){let t=e.party.getJob(a,l),n=e.characterIndex===a&&e.boardIndex===l;if(t)return G("button",{class:"job","aria-pressed":n,onClick:e=>{e.stopPropagation(),eP(eM(a,l))}},G("span",{class:"name"},t.name));{let t=1===l&&!e.party.getJob(a,0);return G("button",{disabled:t,class:"job nojob","aria-pressed":n,onClick:e=>{e.stopPropagation(),eP(eM(a,l))}},G("span",{class:"name"},"No Job"))}}return G("div",{class:"character-panel"},G("div",{class:"actions"},function(){let a,l;let t=e.characterIndex,n=e.party.getJob(t,e.boardIndex);return n?(a=`Unlearn ${n.name} from ${ep[t].name}`,l=!1):(a=`Unlearn current job from ${ep[t].name}`,l=!0),G(eG,{label:a,disabled:l,getNextParty:()=>e.party.removeJob(t,n)},"Reset Job")}(),function(){let a=e.characterIndex,l=e.party.unemployed(a),t=`Unlearn all jobs from ${ep[a].name}`;return G(eG,{label:t,disabled:l,getNextParty:()=>e.party.removeAllJobs(a)},"Reset Character")}(),function(){let a=e.party.allUnemployed();return G(eG,{label:"Unlearn all jobs from all characters",disabled:a,getNextParty:()=>new eA},"Reset All")}(),G("button",{class:"action button","aria-label":"Manage Quickenings and Espers for all characters at once.",onClick:()=>eP(eL()),"aria-pressed":e.qeActive},e.qeActive?"Hide Mist Planner":"Show Mist Planner"),G("button",{class:"action button","aria-label":"Simulate character damage output",onClick:()=>eP(eB()),"aria-pressed":e.dpsActive},e.dpsActive?"Hide DPS Simulator":"Show DPS Simulator")),G("div",{class:"character-select"},ep.map((l,t)=>G("div",{class:"character button","aria-pressed":e.characterIndex===t,onClick:()=>(function(a){e.characterIndex===a?eP(eM(a,1^e.boardIndex)):eP(eM(a,0))})(t)},G("span",{class:"name"},l.name),G("br",null),a(t,0),G("br",null),a(t,1),G("br",null),G("span",null,e.party.getLpCount(t)," LP")))),G("div",{class:"stats"},function(){let a=e.party.color(e.characterIndex),l=e.plannedParty&&e.plannedParty.color(e.characterIndex);return eg.map(t=>(function(a,l,t){let n=[];if("number"==typeof a.contents[0].grants.what){let r=[],o=[],i=[],s=[];for(let e of a.contents)switch(l.get(e)){case C.OBTAINED:r.push(e);break;case C.CERTAIN:o.push(e);break;case C.POSSIBLE:i.push(e);break;default:t&&t.has(e)&&s.push(e)}let c=(a,l)=>{let t=a.map(a=>({c:e.characterIndex,l:a})),n=l?e.party.deleteAndAdd([],t):e.party.deleteAndAdd(t,[]);eP(eT(n))},m=e=>e.reduce((e,a)=>e+a.grants.what,0);r.length&&n.push(G("p",{class:"l obtained",onClick:()=>c(r,!1)},"+",m(r))),o.length&&n.push(G("p",{class:"l certain",onClick:()=>c(o,!0)},"+",m(o))),i.length&&n.push(G("p",{class:"l possible",onClick:()=>c(i,!0)},"+",m(i))),s.length&&n.push(G("p",{class:"l planned"},"+",m(s)))}else for(let r of a.contents){let a;let o=!1;switch(l.get(r)){case C.OBTAINED:a="l obtained",o=!0;break;case C.CERTAIN:a="l certain";break;case C.POSSIBLE:a="l possible";break;default:if(!(t&&t.has(r)))continue;a="l planned"}let i=()=>{o?eP(eT(e.party.delete(e.characterIndex,r))):eP(eT(e.party.add(e.characterIndex,r)))};n.push(G("p",{class:a,"aria-label":r.text,onClick:i},r.fullName))}return n.length?G("div",{class:"group"},G("h3",{class:"name"},a.name),n):null})(t,a,l))}()))}};const eD=G("a",{href:"https://github.com/nattthebear/ff12characterplanner",target:"_blank",rel:"noopener noreferrer",class:"github-corner","aria-label":"View source on Github"},G("svg",{width:"80",height:"80",viewBox:"0 0 250 250","aria-hidden":!0},G("g",null,G("path",{d:"M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z"}),G("path",{d:"M128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2",fill:"currentColor",class:"octo-arm"}),G("path",{d:"M115.0,115.0 C114.9,115.1 118.7,116.5 119.8,115.4 L133.7,101.6 C136.9,99.2 139.9,98.4 142.2,98.6 C133.8,88.0 127.5,74.4 143.8,58.0 C148.5,53.4 154.0,51.2 159.7,51.0 C160.3,49.4 163.2,43.6 171.4,40.1 C171.4,40.1 176.1,42.5 178.8,56.2 C183.1,58.6 187.2,61.8 190.9,65.4 C194.5,69.0 197.7,73.2 200.1,77.6 C213.8,80.2 216.3,84.9 216.3,84.9 C212.7,93.1 206.9,96.0 205.4,96.6 C205.1,102.4 203.0,107.8 198.3,112.5 C181.9,128.9 168.3,122.5 157.7,114.1 C157.9,116.9 156.7,120.9 152.7,124.9 L141.0,136.5 C139.8,137.7 141.6,141.9 141.8,141.8 Z",fill:"currentColor",class:"octo-body"}))));function eR(){return eD}var eE=(e,a)=>{let l;let t=ex(a),n=t(),r=null,o=e=>{r=e};function i(e){let a=r,t=l;t&&a&&(a.scrollLeft=t.x-e.screenX,a.scrollTop=t.y-e.screenY)}function s(){l=void 0}function c(e){let a=r,t=e.target;a&&(t.classList.contains("empty")||"TABLE"===t.nodeName)&&(l={x:a.scrollLeft+e.screenX,y:a.scrollTop+e.screenY},e.preventDefault())}return document.addEventListener("mousemove",i,{passive:!0}),document.addEventListener("mouseup",s,{passive:!0}),B(a,()=>{document.removeEventListener("mousemove",i),document.removeEventListener("mouseup",s)}),()=>{n=t();let e=n.party.getJob(n.characterIndex,n.boardIndex);if(e)return function(e){let a=n.party.color(n.characterIndex);return G("div",{class:"license-board-holder",ref:o,onMouseDown:c},G("table",{class:"license-board"},G("tbody",null,e.rows.map(e=>G("tr",null,e.map(e=>(function(e,a){let l;if(!e)return G("td",{class:"empty"});let t=e.value,r=!1;switch(a.get(t)){case C.OBTAINED:l="l obtained",r=!0;break;case C.CERTAIN:l="l certain";break;case C.POSSIBLE:l="l possible";break;default:l="l blocked"}return G("td",{class:l,onClick:()=>{r?eP(eT(n.party.delete(n.characterIndex,t))):eP(eT(n.party.add(n.characterIndex,t)))},"aria-label":t.text},G("div",{class:"name"},t.fullName),G("div",{class:"cost"},t.cost),t.image&&G("img",{class:"mist",src:t.image,"aria-role":"none"}))})(e,a)))))))}(e);{let e=n.party.getJob(n.characterIndex,1^n.boardIndex);return G("div",{class:"select-job"},ef.map(a=>G("button",{onClick:()=>eP(eT(n.party.addJob(n.characterIndex,a))),class:"job button",disabled:a===e,"aria-label":a.text,onMouseOver:()=>eP(eH(n.party.addJob(n.characterIndex,a))),onMouseOut:()=>eP(eH(void 0))},G("img",{class:"zodiac",src:a.image,alt:a.imageAlt}),a.name)),G(eR,null))}}};const{is:eN}=Object,eI=e=>e(),ej=[...eh,...ed];function eW(e,a){return e.sortOrder-a.sortOrder}const ez=e=>ep.map((a,l)=>e.color(l));var eF=(e,a)=>{let l=ex(a),{party:t}=l(),n=function(...e){let a,l;let t=e.slice(0,-1),n=e.at(-1);return function(){let e=t.map(eI);return a&&function(e,a){for(let l=0;lt,ez),r=n();function o(e,a){return G(P,null,G("div",null,G("div",{class:"license-name","aria-label":e.text},e.fullName)),ep.map((l,n)=>(function(e,a,l){let n,o;if(t.unemployed(a))return G("div",{class:"l unreachable",onClick:()=>{eP(eM(a,0)),eP(eL())}},"Choose a job first.");let i=r[a],s=[];switch(i.get(e)){case C.OBTAINED:{n="l obtained";let l=ej.filter(l=>l!==e&&t.has(a,l)),r=t.deleteAndAdd([{c:a,l:e}],l.map(e=>({c:a,l:e}))),c=r.color(a);for(let[a,l]of c)if(l===C.POSSIBLE&&a!==e){let e=i.get(a);(e===C.OBTAINED||e===C.CERTAIN)&&s.push(a)}o=()=>eP(eT(r));break}case C.POSSIBLE:{n="l possible";let l=t.add(a,e),r=l.color(a);for(let[e,a]of i)a==C.POSSIBLE&&r.get(e)===C.CERTAIN&&s.push(e);o=()=>eP(eT(l));break}default:{n="l blocked";let r=t.deleteAndAdd(l?ep.map((a,l)=>({c:l,l:e})):ed.map(e=>({c:a,l:e})),[{c:a,l:e}]),o=r.color(a);for(let[e,a]of o)if(a===C.CERTAIN){let a=i.get(e);(null==a||a===C.POSSIBLE)&&s.push(e)}}}return s.sort(eW),G("div",{class:n,onClick:o},s.map(e=>G("div",{"aria-label":e.text},e.fullName)))})(e,n,a)))}function i(e){return e?G("div",{class:"job","aria-label":e.text},e.name):G("div",{class:"job nojob"},"No Job")}return()=>({party:t}=l(),r=n(),G("div",{class:"qe-board"},G("div",null),ep.map((e,a)=>G("div",null,G("div",{class:"character-name"},e.name),i(t.getJob(a,0)),i(t.getJob(a,1)))),eh.map(e=>o(e,!0)),ed.map(e=>o(e,!1))))};const eO=["fire","ice","lightning","water","wind","earth","dark","holy"];function eV(e){for(let a of e)(function(e){let a="";for(let l in e){if("name"===l||"l"===l||"type"===l)continue;let t=e[l];if("boolean"==typeof t&&t)a+=`ret.${l} = true; -`;else if("number"==typeof t)a+=`ret.${l} += ${t}; -`;else if("string"==typeof t)a+=`ret.${l} = ${JSON.stringify(t)}; -`;else throw Error(`Unexpected type on Profile[${l}]: ${typeof t}`)}e.mutateProfile=Function("ret",a)})(a),function(e){let a=[];function l(l,t){let n=e[l];"number"==typeof n&&n>0?a.push(`${n} ${t}`):!0===n&&a.push(t)}for(let t of(e.animationType&&a.push({unarmed:"Unarmed",dagger:"Dagger",ninja:"Ninja Sword",katana:"Katana",sword:"Sword",bigsword:"Greatsword",hammer:"Hammer/Axe",pole:"Pole",spear:"Spear",mace:"Mace",bow:"Bow",gun:"Gun",xbow:"Crossbow",measure:"Measure",rod:"Rod",staff:"Staff",handbomb:"Handbomb"}[e.animationType]),"gun"===e.damageType&&"gun"!==e.animationType&&a.push("Pierce"),l("attack","Att"),l("chargeTime","CT"),l("combo","Cb"),l("str","Str"),l("mag","Mag"),l("vit","Vit"),l("spd","Spd"),l("brawler","Brawler"),l("berserk","Berserk"),l("haste","Haste"),l("bravery","Bravery"),l("faith","Faith"),l("focus","Focus"),l("adrenaline","Adrenaline"),l("serenity","Serenity"),l("spellbreaker","Spellbreaker"),l("genjiGloves","Combo+"),l("cameoBelt","Ignore Evasion"),l("agateRing","Ignore Weather"),eO))l(`${t}Damage`,t[0].toUpperCase()+t.slice(1)+" Damage");for(let e of eO)l(`${e}Bonus`,e[0].toUpperCase()+e.slice(1)+" Bonus");e.tooltip=a.join(",")}(a);return e}function eK(e,a){let l={...e};return a.weapon.mutateProfile(l),a.ammo?.mutateProfile(l),a.helm?.mutateProfile(l),a.armor?.mutateProfile(l),a.accessory?.mutateProfile(l),l.str>99&&(l.str=99),l.mag>99&&(l.mag=99),l.vit>99&&(l.vit=99),l.spd>99&&(l.spd=99),l}const eQ=eV([{name:"Unarmed",damageType:"unarmed",animationType:"unarmed",attack:12,chargeTime:26,combo:5},{name:"Mythril Sword",damageType:"sword",animationType:"sword",attack:14,chargeTime:30,combo:5},{name:"Broadsword",l:eu("Swords 1"),damageType:"sword",animationType:"sword",attack:14,chargeTime:32,combo:5},{name:"Longsword",l:eu("Swords 2"),damageType:"sword",animationType:"sword",attack:20,chargeTime:32,combo:5},{name:"Iron Sword",l:eu("Swords 2"),damageType:"sword",animationType:"sword",attack:25,chargeTime:32,combo:5},{name:"Mythril Blade",damageType:"sword",animationType:"sword",attack:23,chargeTime:30,combo:5},{name:"Zwill Blade",l:eu("Swords 3"),damageType:"sword",animationType:"sword",attack:30,chargeTime:32,combo:5},{name:"Ancient Sword",l:eu("Swords 3"),damageType:"sword",animationType:"sword",attack:35,chargeTime:32,combo:5},{name:"Blood Sword",l:eu("Blood Sword"),damageType:"sword",animationType:"sword",attack:38,chargeTime:32,combo:5},{name:"Lohengrin",l:eu("Swords 4"),damageType:"sword",animationType:"sword",attack:40,chargeTime:32,combo:5},{name:"Flametongue",l:eu("Swords 4"),damageType:"sword",animationType:"sword",attack:45,chargeTime:32,combo:5,fireDamage:!0},{name:"Demonsbane",l:eu("Swords 5"),damageType:"sword",animationType:"sword",attack:51,chargeTime:32,combo:5},{name:"Icebrand",l:eu("Swords 5"),damageType:"sword",animationType:"sword",attack:55,chargeTime:32,combo:5,iceDamage:!0},{name:"Platinum Sword",l:eu("Swords 6"),damageType:"sword",animationType:"sword",attack:61,chargeTime:32,combo:5},{name:"Bastard Sword",l:eu("Swords 6"),damageType:"sword",animationType:"sword",attack:67,chargeTime:32,combo:5},{name:"Diamond Sword",l:eu("Swords 7"),damageType:"sword",animationType:"sword",attack:73,chargeTime:32,combo:5},{name:"Runeblade",l:eu("Swords 7"),damageType:"sword",animationType:"sword",attack:78,chargeTime:32,combo:5},{name:"Deathbringer",l:eu("Swords 8"),damageType:"sword",animationType:"sword",attack:83,chargeTime:32,combo:5},{name:"Stoneblade",l:eu("Swords 8"),damageType:"sword",animationType:"sword",attack:95,chargeTime:32,combo:5},{name:"Durandal",l:eu("Swords 9"),damageType:"sword",animationType:"sword",attack:99,chargeTime:32,combo:5},{name:"Great Trango",damageType:"sword",animationType:"sword",attack:153,chargeTime:25,combo:30},{name:"Karkata",l:eu("Karkata"),damageType:"sword",animationType:"sword",attack:92,chargeTime:32,combo:7},{name:"Simha",l:eu("Swords 9"),damageType:"sword",animationType:"sword",attack:103,chargeTime:32,combo:10},{name:"Dagger",l:eu("Daggers 1"),damageType:"dagger",animationType:"dagger",attack:14,chargeTime:21,combo:12},{name:"Mage Masher",l:eu("Daggers 2"),damageType:"dagger",animationType:"dagger",attack:18,chargeTime:21,combo:12},{name:"Assassin's Dagger",l:eu("Daggers 2"),damageType:"dagger",animationType:"dagger",attack:31,chargeTime:21,combo:12},{name:"Chopper",l:eu("Daggers 3"),damageType:"dagger",animationType:"dagger",attack:40,chargeTime:21,combo:12},{name:"Main Gauche",l:eu("Daggers 3"),damageType:"dagger",animationType:"dagger",attack:46,chargeTime:21,combo:5},{name:"Gladius",l:eu("Daggers 4"),damageType:"dagger",animationType:"dagger",attack:56,chargeTime:21,combo:12,windDamage:!0},{name:"Avenger",l:eu("Daggers 4"),damageType:"dagger",animationType:"dagger",attack:66,chargeTime:21,combo:12},{name:"Orichalcum Dirk",l:eu("Daggers 5"),damageType:"dagger",animationType:"dagger",attack:79,chargeTime:21,combo:12},{name:"Platinum Dagger",l:eu("Daggers 5"),damageType:"dagger",animationType:"dagger",attack:83,chargeTime:21,combo:12},{name:"Zwill Crossblade",l:eu("Daggers 6"),damageType:"dagger",animationType:"dagger",attack:87,chargeTime:21,combo:12,windDamage:!0},{name:"Shikari Nagasa",l:eu("Shikari Nagasa & Mina"),damageType:"dagger",animationType:"dagger",attack:90,chargeTime:21,combo:12},{name:"Mina",l:eu("Shikari Nagasa & Mina"),damageType:"dagger",animationType:"dagger",attack:104,chargeTime:21,combo:15},{name:"Handaxe",l:eu("Axes & Hammers 1"),damageType:"hammer",animationType:"hammer",attack:17,chargeTime:29,combo:6},{name:"Broadaxe",l:eu("Axes & Hammers 2"),damageType:"hammer",animationType:"hammer",attack:36,chargeTime:29,combo:6},{name:"Slasher",l:eu("Axes & Hammers 3"),damageType:"hammer",animationType:"hammer",attack:54,chargeTime:29,combo:6},{name:"Hammerhead",l:eu("Axes & Hammers 4"),damageType:"hammer",animationType:"hammer",attack:81,chargeTime:29,combo:6},{name:"Francisca",l:eu("Axes & Hammers 5"),damageType:"hammer",animationType:"hammer",attack:88,chargeTime:29,combo:6},{name:"Greataxe",l:eu("Axes & Hammers 6"),damageType:"hammer",animationType:"hammer",attack:110,chargeTime:29,combo:6},{name:"Golden Axe",l:eu("Axes & Hammers 6"),damageType:"hammer",animationType:"hammer",attack:120,chargeTime:29,combo:6},{name:"Iron Hammer",l:eu("Axes & Hammers 2"),damageType:"hammer",animationType:"hammer",attack:24,chargeTime:32,combo:8},{name:"War Hammer",l:eu("Axes & Hammers 3"),damageType:"hammer",animationType:"hammer",attack:42,chargeTime:32,combo:8},{name:"Sledgehammer",l:eu("Axes & Hammers 4"),damageType:"hammer",animationType:"hammer",attack:66,chargeTime:32,combo:8},{name:"Morning Star",l:eu("Axes & Hammers 5"),damageType:"hammer",animationType:"hammer",attack:100,chargeTime:32,combo:8},{name:"Scorpion Tail",l:eu("Axes & Hammers 7"),damageType:"hammer",animationType:"hammer",attack:124,chargeTime:32,combo:8},{name:"Vrscika",l:eu("Vrscika"),damageType:"hammer",animationType:"hammer",attack:133,chargeTime:32,combo:20},{name:"Mace",l:eu("Maces 1"),damageType:"mace",animationType:"mace",attack:17,chargeTime:30,combo:5},{name:"Bronze Mace",l:eu("Maces 1"),damageType:"mace",animationType:"mace",attack:24,chargeTime:30,combo:5},{name:"Bhuj",l:eu("Maces 2"),damageType:"mace",animationType:"mace",attack:34,chargeTime:30,combo:5},{name:"Miter",l:eu("Maces 2"),damageType:"mace",animationType:"mace",attack:42,chargeTime:30,combo:5,waterDamage:!0},{name:"Thorned Mace",l:eu("Maces 3"),damageType:"mace",animationType:"mace",attack:53,chargeTime:30,combo:5},{name:"Chaos Mace",l:eu("Maces 3"),damageType:"mace",animationType:"mace",attack:69,chargeTime:30,combo:5},{name:"Doom Mace",l:eu("Maces 4"),damageType:"mace",animationType:"mace",attack:75,chargeTime:30,combo:5},{name:"Zeus Mace",l:eu("Maces 4"),damageType:"mace",animationType:"mace",attack:81,chargeTime:30,combo:5,darkBonus:!0},{name:"Grand Mace",l:eu("Maces 5"),damageType:"mace",animationType:"mace",attack:88,chargeTime:30,combo:5},{name:"Bonebreaker",damageType:"gun",animationType:"mace",attack:10,chargeTime:30,combo:10},{name:"Bone of Byblos",l:eu("Maces 5"),damageType:"mace",animationType:"mace",attack:100,chargeTime:30,combo:5},{name:"Gilt Measure",l:eu("Measures 1"),damageType:"gun",animationType:"measure",attack:5,chargeTime:32,combo:0},{name:"Arc Scale",l:eu("Measures 2"),damageType:"gun",animationType:"measure",attack:10,chargeTime:32,combo:0},{name:"Multiscale",l:eu("Measures 2"),damageType:"gun",animationType:"measure",attack:13,chargeTime:32,combo:0,fireDamage:!0},{name:"Cross Scale",l:eu("Measures 3"),damageType:"gun",animationType:"measure",attack:16,chargeTime:32,combo:0,lightningDamage:!0},{name:"Caliper",l:eu("Measures 3"),damageType:"gun",animationType:"measure",attack:19,chargeTime:32,combo:0,windDamage:!0},{name:"Euclid's Sextant",l:eu("Measures 4"),damageType:"gun",animationType:"measure",attack:24,chargeTime:32,combo:0,holyDamage:!0},{name:"Claymore",l:eu("Greatswords 1"),damageType:"sword",animationType:"bigsword",attack:83,chargeTime:35,combo:8},{name:"Defender",l:eu("Greatswords 2"),damageType:"sword",animationType:"bigsword",attack:90,chargeTime:35,combo:5},{name:"Save the Queen",l:eu("Greatswords 2"),damageType:"sword",animationType:"bigsword",attack:92,chargeTime:35,combo:8},{name:"Ultima Blade",l:eu("Greatswords 3"),damageType:"sword",animationType:"bigsword",attack:109,chargeTime:35,combo:8},{name:"Ragnarok",l:eu("Greatswords 4"),damageType:"sword",animationType:"bigsword",attack:117,chargeTime:35,combo:8},{name:"Excalibur",l:eu("Excalibur"),damageType:"sword",animationType:"bigsword",attack:127,chargeTime:35,combo:8,holyDamage:!0},{name:"Tournesol",l:eu("Tournesol"),damageType:"sword",animationType:"bigsword",attack:138,chargeTime:35,combo:10},{name:"Wyrmhero Blade",damageType:"sword",animationType:"bigsword",attack:131,chargeTime:99,combo:80,holyDamage:!0,bravery:!0,faith:!0},{name:"Excalipur",l:eu("Excalipur"),damageType:"gun",animationType:"bigsword",attack:1,chargeTime:20,combo:20},{name:"Treaty-Blade",damageType:"sword",animationType:"bigsword",attack:67,chargeTime:30,combo:25},{name:"Sword of Kings",damageType:"sword",animationType:"bigsword",attack:53,chargeTime:30,combo:20},{name:"Kumbha",l:eu("Kumbha"),damageType:"katana",animationType:"sword",attack:117,chargeTime:31,combo:35},{name:"Kotetsu",l:eu("Katana 1"),damageType:"katana",animationType:"katana",attack:16,chargeTime:41,combo:20},{name:"Osafune",l:eu("Katana 1"),damageType:"katana",animationType:"katana",attack:26,chargeTime:31,combo:20},{name:"Kogarasumaru",l:eu("Katana 2"),damageType:"katana",animationType:"katana",attack:40,chargeTime:31,combo:20},{name:"Magoroku",l:eu("Katana 2"),damageType:"katana",animationType:"katana",attack:50,chargeTime:31,combo:20},{name:"Murasame",l:eu("Katana 3"),damageType:"katana",animationType:"katana",attack:62,chargeTime:31,combo:20,waterDamage:!0},{name:"Kiku-ichimonji",l:eu("Katana 3"),damageType:"katana",animationType:"katana",attack:71,chargeTime:31,combo:20},{name:"Yakei",l:eu("Katana 4"),damageType:"katana",animationType:"katana",attack:83,chargeTime:31,combo:20},{name:"Ame-no-Murakumo",l:eu("Katana 4"),damageType:"katana",animationType:"katana",attack:96,chargeTime:31,combo:20,windDamage:!0},{name:"Muramasa",l:eu("Katana 4"),damageType:"katana",animationType:"katana",attack:104,chargeTime:31,combo:20},{name:"Masamune",l:eu("Masamune"),damageType:"katana",animationType:"katana",attack:111,chargeTime:31,combo:30},{name:"Ashura",l:eu("Ninja Swords 1"),damageType:"dagger",animationType:"ninja",attack:72,chargeTime:22,combo:12},{name:"Sakura-saezuri",l:eu("Ninja Swords 1"),damageType:"dagger",animationType:"ninja",attack:77,chargeTime:22,combo:15},{name:"Kagenui",l:eu("Ninja Swords 1"),damageType:"dagger",animationType:"ninja",attack:81,chargeTime:22,combo:18},{name:"Koga Blade",l:eu("Ninja Swords 3"),damageType:"dagger",animationType:"ninja",attack:87,chargeTime:22,combo:22,earthDamage:!0},{name:"Iga Blade",l:eu("Ninja Swords 2"),damageType:"dagger",animationType:"ninja",attack:87,chargeTime:22,combo:22,waterDamage:!0},{name:"Orochi",l:eu("Ninja Swords 1"),damageType:"dagger",animationType:"ninja",attack:94,chargeTime:22,combo:25},{name:"Yagyu Darkblade",l:eu("Yagyu Darkblade & Mesa"),damageType:"dagger",animationType:"ninja",attack:98,chargeTime:24,combo:28,darkDamage:!0},{name:"Mesa",l:eu("Yagyu Darkblade & Mesa"),damageType:"dagger",animationType:"ninja",attack:102,chargeTime:22,combo:32},{name:"Javelin",l:eu("Spears 1"),damageType:"sword",animationType:"spear",attack:16,chargeTime:28,combo:4},{name:"Spear",l:eu("Spears 1"),damageType:"sword",animationType:"spear",attack:26,chargeTime:28,combo:4},{name:"Partisan",l:eu("Spears 2"),damageType:"sword",animationType:"spear",attack:34,chargeTime:28,combo:4},{name:"Heavy Lance",l:eu("Spears 2"),damageType:"sword",animationType:"spear",attack:42,chargeTime:28,combo:4},{name:"Storm Spear",l:eu("Spears 3"),damageType:"sword",animationType:"spear",attack:53,chargeTime:28,combo:4,lightningDamage:!0},{name:"Obelisk",l:eu("Spears 3"),damageType:"sword",animationType:"spear",attack:68,chargeTime:28,combo:4},{name:"Halberd",l:eu("Spears 4"),damageType:"sword",animationType:"spear",attack:75,chargeTime:28,combo:4},{name:"Trident",l:eu("Spears 4"),damageType:"sword",animationType:"spear",attack:85,chargeTime:28,combo:4,iceDamage:!0},{name:"Holy Lance",l:eu("Spears 5"),damageType:"sword",animationType:"spear",attack:91,chargeTime:28,combo:4,holyDamage:!0},{name:"Gungnir",l:eu("Spears 5"),damageType:"sword",animationType:"spear",attack:95,chargeTime:28,combo:4,fireDamage:!0},{name:"Dragon Whisker",l:eu("Dragon Whisker"),damageType:"sword",animationType:"spear",attack:100,chargeTime:28,combo:4},{name:"Vrsabha",l:eu("Vrsabha"),damageType:"sword",animationType:"spear",attack:108,chargeTime:28,combo:10},{name:"Zodiac Spear",l:eu("Zodiac Spear"),damageType:"sword",animationType:"spear",attack:141,chargeTime:28,combo:4},{name:"Oaken Pole",l:eu("Poles 1"),damageType:"pole",animationType:"pole",attack:15,chargeTime:25,combo:15},{name:"Cypress Pole",l:eu("Poles 2"),damageType:"pole",animationType:"pole",attack:22,chargeTime:25,combo:15,earthDamage:!0},{name:"Battle Bamboo",l:eu("Poles 2"),damageType:"pole",animationType:"pole",attack:34,chargeTime:25,combo:15},{name:"Musk Stick",l:eu("Poles 3"),damageType:"pole",animationType:"pole",attack:39,chargeTime:25,combo:15},{name:"Iron Pole",l:eu("Poles 3"),damageType:"pole",animationType:"pole",attack:46,chargeTime:25,combo:15},{name:"Six-fluted Pole",l:eu("Poles 4"),damageType:"pole",animationType:"pole",attack:59,chargeTime:25,combo:15,waterBonus:!0},{name:"Gokuu Pole",l:eu("Poles 4"),damageType:"pole",animationType:"pole",attack:72,chargeTime:25,combo:15},{name:"Zephyr Pole",l:eu("Poles 5"),damageType:"pole",animationType:"pole",attack:77,chargeTime:25,combo:15,windDamage:!0},{name:"Ivory Pole",l:eu("Poles 5"),damageType:"pole",animationType:"pole",attack:83,chargeTime:25,combo:15},{name:"Sweep",l:eu("Poles 6"),damageType:"pole",animationType:"pole",attack:88,chargeTime:25,combo:15},{name:"Eight-fluted Pole",l:eu("Poles 6"),damageType:"pole",animationType:"pole",attack:91,chargeTime:25,combo:15},{name:"Whale Whisker",l:eu("Whale Whisker"),damageType:"pole",animationType:"pole",attack:108,chargeTime:25,combo:15},{name:"Kanya",l:eu("Kanya"),damageType:"pole",animationType:"pole",attack:112,chargeTime:25,combo:35},{name:"Rod",l:eu("Rods 1"),damageType:"sword",animationType:"rod",attack:16,chargeTime:33,mag:2},{name:"Serpent Rod",l:eu("Rods 1"),damageType:"sword",animationType:"rod",attack:25,chargeTime:33,mag:2,iceDamage:!0},{name:"Healing Rod",l:eu("Rods 2"),damageType:"gun",animationType:"rod",attack:7,chargeTime:33,mag:2},{name:"Gaia Rod",l:eu("Rods 2"),damageType:"sword",animationType:"rod",attack:43,chargeTime:33,mag:2,earthDamage:!0},{name:"Power Rod",l:eu("Rods 3"),damageType:"sword",animationType:"rod",attack:56,chargeTime:33,mag:3},{name:"Empyrean Rod",l:eu("Rods 3"),damageType:"sword",animationType:"rod",attack:60,chargeTime:33,mag:2},{name:"Holy Rod",l:eu("Rods 4"),damageType:"sword",animationType:"rod",attack:63,chargeTime:33,mag:4,holyDamage:!0,holyBonus:!0},{name:"Rod of Faith",l:eu("Rod of Faith"),damageType:"gun",animationType:"rod",attack:21,chargeTime:33,mag:6},{name:"Oak Staff",l:eu("Staves 1"),damageType:"katana",animationType:"staff",attack:15,chargeTime:34,mag:2},{name:"Cherry Staff",l:eu("Staves 2"),damageType:"katana",animationType:"staff",attack:20,chargeTime:34,mag:3,windBonus:!0},{name:"Wizard's Staff",l:eu("Staves 2"),damageType:"katana",animationType:"staff",attack:26,chargeTime:34,mag:4},{name:"Flame Staff",l:eu("Staves 3"),damageType:"katana",animationType:"staff",attack:34,chargeTime:34,mag:4,fireBonus:!0},{name:"Storm Staff",l:eu("Staves 3"),damageType:"katana",animationType:"staff",attack:36,chargeTime:34,mag:4,lightningBonus:!0},{name:"Glacial Staff",l:eu("Staves 4"),damageType:"katana",animationType:"staff",attack:38,chargeTime:34,mag:5,iceBonus:!0},{name:"Golden Staff",l:eu("Staves 4"),damageType:"katana",animationType:"staff",attack:42,chargeTime:34,mag:6},{name:"Judicer's Staff",l:eu("Staves 5"),damageType:"katana",animationType:"staff",attack:48,chargeTime:34,mag:7},{name:"Cloud Staff",l:eu("Staves 5"),damageType:"katana",animationType:"staff",attack:49,chargeTime:34,mag:7,lightningBonus:!0,windBonus:!0,waterBonus:!0},{name:"Staff of the Magi",l:eu("Staff of the Magi"),damageType:"katana",animationType:"staff",attack:53,chargeTime:34,mag:8,iceBonus:!0,windBonus:!0,holyBonus:!0},{name:"Shortbow",l:eu("Bows 1"),damageType:"dagger",animationType:"bow",attack:15,chargeTime:36,combo:5},{name:"Silver Bow",l:eu("Bows 2"),damageType:"dagger",animationType:"bow",attack:19,chargeTime:36,combo:5},{name:"Aevis Killer",l:eu("Bows 2"),damageType:"dagger",animationType:"bow",attack:25,chargeTime:36,combo:5},{name:"Killer Bow",l:eu("Bows 3"),damageType:"dagger",animationType:"bow",attack:36,chargeTime:36,combo:5},{name:"Longbow",l:eu("Bows 3"),damageType:"dagger",animationType:"bow",attack:48,chargeTime:36,combo:0},{name:"Elfin Bow",l:eu("Bows 4"),damageType:"dagger",animationType:"bow",attack:54,chargeTime:36,combo:5},{name:"Loxley Bow",l:eu("Bows 4"),damageType:"dagger",animationType:"bow",attack:60,chargeTime:36,combo:5},{name:"Giant Stonebow",l:eu("Bows 5"),damageType:"dagger",animationType:"bow",attack:73,chargeTime:36,combo:5},{name:"Burning Bow",l:eu("Bows 5"),damageType:"dagger",animationType:"bow",attack:77,chargeTime:36,combo:5,fireBonus:!0},{name:"Traitor's Bow",l:eu("Bows 6"),damageType:"dagger",animationType:"bow",attack:82,chargeTime:36,combo:5},{name:"Yoichi Bow",l:eu("Bows 6"),damageType:"dagger",animationType:"bow",attack:89,chargeTime:36,combo:5},{name:"Perseus Bow",l:eu("Bows 7"),damageType:"dagger",animationType:"bow",attack:92,chargeTime:36,combo:5},{name:"Artemis Bow",l:eu("Bows 7"),damageType:"dagger",animationType:"bow",attack:94,chargeTime:36,combo:5},{name:"Sagittarius",l:eu("Sagittarius"),damageType:"dagger",animationType:"bow",attack:97,chargeTime:36,combo:5},{name:"Dhanusha",l:eu("Dhanusha"),damageType:"dagger",animationType:"bow",attack:109,chargeTime:36,combo:20},{name:"Seitengrat",damageType:"dagger",animationType:"bow",attack:224,chargeTime:10,combo:25},{name:"Bowgun",l:eu("Crossbows 1"),damageType:"sword",animationType:"xbow",attack:21,chargeTime:24,combo:7},{name:"Crossbow",l:eu("Crossbows 1"),damageType:"sword",animationType:"xbow",attack:31,chargeTime:24,combo:7},{name:"Paramina Crossbow",l:eu("Crossbows 2"),damageType:"sword",animationType:"xbow",attack:42,chargeTime:24,combo:7},{name:"Recurve Crossbow",l:eu("Crossbows 2"),damageType:"sword",animationType:"xbow",attack:57,chargeTime:24,combo:7},{name:"Hunting Crossbow",l:eu("Crossbows 3"),damageType:"sword",animationType:"xbow",attack:70,chargeTime:24,combo:7},{name:"Penetrator Crossbow",l:eu("Crossbows 3"),damageType:"sword",animationType:"xbow",attack:79,chargeTime:24,combo:7},{name:"Gastrophetes",l:eu("Crossbows 4"),damageType:"sword",animationType:"xbow",attack:84,chargeTime:24,combo:7},{name:"Tula",l:eu("Crossbows 4"),damageType:"sword",animationType:"xbow",attack:91,chargeTime:24,combo:7},{name:"Altair",l:eu("Guns 1"),damageType:"gun",animationType:"gun",attack:6,chargeTime:50,combo:5},{name:"Capella",l:eu("Guns 2"),damageType:"gun",animationType:"gun",attack:8,chargeTime:50,combo:5},{name:"Vega",l:eu("Guns 2"),damageType:"gun",animationType:"gun",attack:13,chargeTime:50,combo:5},{name:"Sirius",l:eu("Guns 3"),damageType:"gun",animationType:"gun",attack:17,chargeTime:50,combo:5},{name:"Betelgeuse",l:eu("Guns 3"),damageType:"gun",animationType:"gun",attack:22,chargeTime:50,combo:5},{name:"Ras Algethi",l:eu("Guns 4"),damageType:"gun",animationType:"gun",attack:29,chargeTime:50,combo:5},{name:"Aldebaran",l:eu("Guns 4"),damageType:"gun",animationType:"gun",attack:33,chargeTime:50,combo:5},{name:"Spica",l:eu("Guns 5"),damageType:"gun",animationType:"gun",attack:38,chargeTime:50,combo:5},{name:"Antares",l:eu("Guns 5"),damageType:"gun",animationType:"gun",attack:41,chargeTime:50,combo:5},{name:"Arcturus",l:eu("Guns 6"),damageType:"gun",animationType:"gun",attack:45,chargeTime:50,combo:5},{name:"Fomalhaut",l:eu("Guns 6"),damageType:"gun",animationType:"gun",attack:52,chargeTime:50,combo:5},{name:"Mithuna",l:eu("Mithuna"),damageType:"gun",animationType:"gun",attack:66,chargeTime:50,combo:10},{name:"Hornito",l:eu("Hand-bombs 1"),damageType:"hammer",animationType:"handbomb",attack:66,chargeTime:33},{name:"Fumarole",l:eu("Hand-bombs 2"),damageType:"hammer",animationType:"handbomb",attack:71,chargeTime:33,waterBonus:!0},{name:"Tumulus",l:eu("Hand-bombs 2"),damageType:"hammer",animationType:"handbomb",attack:76,chargeTime:33},{name:"Caldera",l:eu("Hand-bombs 3"),damageType:"hammer",animationType:"handbomb",attack:83,chargeTime:33},{name:"Volcano",l:eu("Hand-bombs 3"),damageType:"hammer",animationType:"handbomb",attack:90,chargeTime:33},{name:"Makara",l:eu("Hand-bombs 4"),damageType:"hammer",animationType:"handbomb",attack:96,chargeTime:33}]),eZ=eV([{name:"Leather Cap",l:eu("Light Armor 1")},{name:"Headgear",l:eu("Light Armor 2")},{name:"Headguard",l:eu("Light Armor 2")},{name:"Leather Headgear",l:eu("Light Armor 3")},{name:"Horned Hat",l:eu("Light Armor 3")},{name:"Balaclava",l:eu("Light Armor 4"),str:1},{name:"Soldier's Cap",l:eu("Light Armor 4")},{name:"Green Beret",l:eu("Light Armor 5"),spd:3},{name:"Red Cap",l:eu("Light Armor 5"),vit:3},{name:"Headband",l:eu("Light Armor 6"),str:2},{name:"Pirate Hat",l:eu("Light Armor 6")},{name:"Goggle Mask",l:eu("Light Armor 7")},{name:"Adamant Hat",l:eu("Light Armor 7")},{name:"Officer's Hat",l:eu("Light Armor 8"),spd:3},{name:"Chakra Band",l:eu("Light Armor 8"),str:2},{name:"Thief's Cap",l:eu("Light Armor 9"),spd:4},{name:"Gigas Hat",l:eu("Light Armor 9"),mag:2},{name:"Chaperon",l:eu("Light Armor 10")},{name:"Crown of Laurels",l:eu("Light Armor 11")},{name:"Renewing Morion",l:eu("Light Armor 12"),vit:4},{name:"Dueling Mask",l:eu("Light Armor 13"),str:2},{name:"Leather Helm",l:eu("Heavy Armor 1"),str:2},{name:"Bronze Helm",l:eu("Heavy Armor 1"),str:2},{name:"Sallet",l:eu("Heavy Armor 2"),str:3},{name:"Iron Helm",l:eu("Heavy Armor 2"),str:3},{name:"Barbut",l:eu("Heavy Armor 3"),str:4},{name:"Winged Helm",l:eu("Heavy Armor 3"),str:5,spd:3},{name:"Golden Helm",l:eu("Heavy Armor 4"),str:5},{name:"Burgonet",l:eu("Heavy Armor 4"),str:4},{name:"Close Helmet",l:eu("Heavy Armor 5"),str:5},{name:"Bone Helm",l:eu("Heavy Armor 5"),str:6},{name:"Diamond Helm",l:eu("Heavy Armor 6"),str:7,vit:3},{name:"Steel Mask",l:eu("Heavy Armor 7"),str:7,spd:4},{name:"Platinum Helm",l:eu("Heavy Armor 8"),str:8},{name:"Giant's Helmet",l:eu("Heavy Armor 9"),str:8},{name:"Dragon Helm",l:eu("Heavy Armor 10"),str:9},{name:"Genji Helm",l:eu("Genji Armor"),str:9,mag:4},{name:"Magepower Shishak",l:eu("Heavy Armor 11"),str:11,mag:5},{name:"Grand Helm",l:eu("Heavy Armor 12"),str:12,vit:10},{name:"Cotton Cap",l:eu("Mystic Armor 1"),mag:2},{name:"Magick Curch",l:eu("Mystic Armor 1"),mag:2},{name:"Pointy Hat",l:eu("Mystic Armor 2"),mag:2},{name:"Topkapi Hat",l:eu("Mystic Armor 2"),mag:3},{name:"Calot Hat",l:eu("Mystic Armor 3"),mag:3},{name:"Wizard's Hat",l:eu("Mystic Armor 3"),mag:4},{name:"Lambent Hat",l:eu("Mystic Armor 4"),mag:4,spd:3},{name:"Feathered Cap",l:eu("Mystic Armor 4"),mag:5},{name:"Mage's Hat",l:eu("Mystic Armor 5"),mag:5},{name:"Lamia's Tiara",l:eu("Mystic Armor 5"),mag:4,vit:7},{name:"Sorcerer's Hat",l:eu("Mystic Armor 6"),mag:6},{name:"Black Cowl",l:eu("Mystic Armor 6"),mag:5,spd:4},{name:"Astrakhan Hat",l:eu("Mystic Armor 7"),mag:6},{name:"Gaia Hat",l:eu("Mystic Armor 7"),mag:7},{name:"Hypnocrown",l:eu("Mystic Armor 8"),str:2,mag:7},{name:"Gold Hairpin",l:eu("Mystic Armor 8"),mag:7,vit:8},{name:"Celebrant's Miter",l:eu("Mystic Armor 9"),mag:6,spd:5},{name:"Black Mask",l:eu("Mystic Armor 10"),mag:8},{name:"White Mask",l:eu("Mystic Armor 11"),mag:8},{name:"Golden Skullcap",l:eu("Mystic Armor 12"),mag:10,spd:3},{name:"Circlet",l:eu("Mystic Armor 13"),str:2,mag:10}]),eU=eV([{name:"Leather Clothing",l:eu("Light Armor 1")},{name:"Chromed Leathers",l:eu("Light Armor 2")},{name:"Leather Breastplate",l:eu("Light Armor 2")},{name:"Bronze Chestplate",l:eu("Light Armor 3")},{name:"Ringmail",l:eu("Light Armor 3"),str:1},{name:"Windbreaker",l:eu("Light Armor 4")},{name:"Heavy Coat",l:eu("Light Armor 4")},{name:"Survival Vest",l:eu("Light Armor 5"),vit:5},{name:"Brigandine",l:eu("Light Armor 5")},{name:"Jujitsu Gi",l:eu("Light Armor 6"),str:2},{name:"Viking Coat",l:eu("Light Armor 6")},{name:"Metal Jerkin",l:eu("Light Armor 7")},{name:"Adamant Vest",l:eu("Light Armor 7")},{name:"Barrel Coat",l:eu("Light Armor 8")},{name:"Power Vest",l:eu("Light Armor 8"),str:2},{name:"Ninja Gear",l:eu("Light Armor 9"),spd:4},{name:"Gigas Chestplate",l:eu("Light Armor 9"),mag:2},{name:"Minerva Bustier",l:eu("Light Armor 10")},{name:"Rubber Suit",l:eu("Light Armor 11")},{name:"Mirage Vest",l:eu("Light Armor 12"),vit:10,spd:10},{name:"Brave Suit",l:eu("Light Armor 13"),bravery:!0},{name:"Leather Armor",l:eu("Heavy Armor 1"),str:2},{name:"Bronze Armor",l:eu("Heavy Armor 1"),str:2},{name:"Scale Armor",l:eu("Heavy Armor 2"),str:3,spd:3},{name:"Iron Armor",l:eu("Heavy Armor 2"),str:3},{name:"Linen Cuirass",l:eu("Heavy Armor 3"),str:4},{name:"Chainmail",l:eu("Heavy Armor 3"),str:3},{name:"Golden Armor",l:eu("Heavy Armor 4"),str:4},{name:"Shielded Armor",l:eu("Heavy Armor 4"),str:5},{name:"Demon Mail",l:eu("Heavy Armor 5"),str:5,vit:3},{name:"Bone Mail",l:eu("Heavy Armor 5"),str:6},{name:"Diamond Armor",l:eu("Heavy Armor 6"),str:7,vit:5},{name:"Mirror Mail",l:eu("Heavy Armor 7"),str:6},{name:"Platinum Armor",l:eu("Heavy Armor 8"),str:7},{name:"Carabineer Mail",l:eu("Heavy Armor 9"),str:8,mag:2},{name:"Dragon Mail",l:eu("Heavy Armor 10"),str:8},{name:"Genji Armor",l:eu("Genji Armor"),str:9,mag:3},{name:"Maximillian",l:eu("Heavy Armor 11"),str:9,spd:6},{name:"Grand Armor",l:eu("Heavy Armor 12"),str:12},{name:"Cotton Shirt",l:eu("Mystic Armor 1"),mag:1},{name:"Light Woven Shirt",l:eu("Mystic Armor 1"),mag:2},{name:"Silken Shirt",l:eu("Mystic Armor 2"),mag:2},{name:"Kilimweave Shirt",l:eu("Mystic Armor 2"),mag:3},{name:"Shepherd's Bolero",l:eu("Mystic Armor 3"),mag:3},{name:"Wizard's Robes",l:eu("Mystic Armor 3"),mag:4},{name:"Chanter's Djellaba",l:eu("Mystic Armor 4"),mag:4,vit:5},{name:"Traveler's Vestment",l:eu("Mystic Armor 4"),mag:5},{name:"Mage's Habit",l:eu("Mystic Armor 5"),mag:6},{name:"Enchanter's Habit",l:eu("Mystic Armor 5"),mag:7,vit:10},{name:"Sorcerer's Habit",l:eu("Mystic Armor 6"),mag:8},{name:"Black Garb",l:eu("Mystic Armor 6"),mag:6,spd:3},{name:"Carmagnole",l:eu("Mystic Armor 7"),mag:7},{name:"Maduin Gear",l:eu("Mystic Armor 7"),str:1,mag:8},{name:"Jade Gown",l:eu("Mystic Armor 8"),mag:8},{name:"Gaia Gear",l:eu("Mystic Armor 8"),mag:8},{name:"Cleric's Robes",l:eu("Mystic Armor 9"),mag:9},{name:"White Robes",l:eu("Mystic Armor 11"),mag:10,spd:4,holyBonus:!0},{name:"Black Robes",l:eu("Mystic Armor 10"),mag:12,darkBonus:!0},{name:"Glimmering Robes",l:eu("Mystic Armor 12"),mag:12,vit:10},{name:"Lordly Robes",l:eu("Mystic Armor 13"),str:5,mag:15}]),eq=eV([{name:"Bangle",l:eu("Accessories 2")},{name:"Berserker Bracers",l:eu("Accessories 13"),berserk:!0},{name:"Ruby Ring",l:eu("Accessories 15")},{name:"Bubble Belt",l:eu("Accessories 17")},{name:"Winged Boots",l:eu("Accessories 19"),spd:5},{name:"Hermes Sandals",l:eu("Accessories 20"),str:5,haste:!0},{name:"Ring of Renewal",l:eu("Accessories 22")},{name:"Orrachea Armlet",l:eu("Accessories 1")},{name:"Blazer Gloves",l:eu("Accessories 11"),focus:!0},{name:"Steel Gorget",l:eu("Accessories 4"),adrenaline:!0},{name:"Magick Gloves",l:eu("Accessories 13"),serenity:!0},{name:"Leather Gorget",l:eu("Accessories 6"),spellbreaker:!0},{name:"Amber Armlet",l:eu("Accessories 9"),spd:2,brawler:!0},{name:"Sage's Ring",l:eu("Accessories 14")},{name:"Agate Ring",l:eu("Accessories 14"),vit:20,agateRing:!0},{name:"Opal Ring",l:eu("Accessories 20"),mag:5},{name:"Battle Harness",l:eu("Accessories 4"),str:2},{name:"Gauntlets",l:eu("Accessories 8"),vit:5},{name:"Jade Collar",l:eu("Accessories 10"),spd:3},{name:"Cameo Belt",l:eu("Accessories 16"),mag:3,cameoBelt:!0},{name:"Indigo Pendant",l:eu("Accessories 19"),spd:7},{name:"Genji Gloves",l:eu("Genji Armor"),mag:3,genjiGloves:!0},{name:"Argyle Armlet",l:eu("Accessories 3"),str:1},{name:"Tourmaline Ring",l:eu("Accessories 5")},{name:"Rose Corsage",l:eu("Accessories 7"),mag:1},{name:"Black Belt",l:eu("Accessories 9"),vit:7},{name:"Nishijin Belt",l:eu("Accessories 10"),mag:3},{name:"Gillie Boots",l:eu("Accessories 12"),str:1,spd:10},{name:"Bowline Sash",l:eu("Accessories 15"),mag:2},{name:"Fuzzy Miter",l:eu("Accessories 17"),str:2},{name:"Sash",l:eu("Accessories 18"),spd:20},{name:"Power Armlet",l:eu("Accessories 18"),str:3},{name:"Germinas Boots",l:eu("Accessories 22"),vit:20,spd:50},{name:"Quasimodo Boots",l:eu("Accessories 21")},{name:"Ribbon",l:eu("Ribbon")},{name:"Steel Poleyns",l:eu("Accessories 12")},{name:"Diamond Armlet",l:eu("Accessories 3")},{name:"Thief's Cuffs",l:eu("Accessories 8"),spd:1},{name:"Pheasant Netsuke",l:eu("Accessories 11")},{name:"Nihopalaoa",l:eu("Accessories 21")},{name:"Embroidered Tippet",l:eu("Accessories 5")},{name:"Firefly",l:eu("Accessories 2"),str:1,mag:1},{name:"Golden Amulet",l:eu("Accessories 6")},{name:"Cat-ear Hood",l:eu("Accessories 16"),spd:3},{name:"Turtleshell Choker",l:eu("Accessories 7"),mag:2,spd:3},{name:"Manufacted Nethicite"},{name:"Goddess's Magicite"},{name:"Dawn Shard"}]);function e$(e){let[a,...l]=e;return{initialSwing:a/30,comboSwing:l.length?l.reduce((e,a)=>e+a)/l.length/30:0}}const eJ=function(e,a){let l={};for(let t in e)l[t]=a(e[t]);return l}({unarmed:[[36,15,23],[36,15,23],[36,15,32],[36,20,20],[36,18,18],[36,26,28]],sword:[[36,15,16],[36,15,15],[36,18,19],[36,15,15],[36,18,18],[36,20,20]],bigsword:[[36,15,15],[36,15,18],[36,19,19],[36,15,15],[36,18,20],[36,20,20]],dagger:[[36,18,23],[36,15,15],[36,23,23],[36,15,23],[36,15,15,18],[36,20,23]],ninja:[[36,15,22],[36,15,15],[36,19,19],[36,15,15],[36,15,20],[36,15,15]],katana:[[36,17,18],[36,15,15],[36,18,19],[36,15,15],[36,20,20],[36,18,25]],hammer:[[36,22,23],[36,18,18],[36,20,21],[36,15,15],[36,15,18,18],[36,26,26]],mace:[[36,15,15],[36,23,23],[36,21,23],[36,15,15],[36,18,20,30],[36,23,23]],pole:[[36,19,19],[36,19,25],[36,16,17],[36,18,18],[36,23,28],[36,20,22]],spear:[[36,18,22],[36,18,18],[36,17,20],[36,15,20],[36,17,20],[36,23,28]],bow:[[42],[48],[48],[42],[42],[42]],xbow:[[42],[48],[42],[42],[42],[48]],gun:[[42],[48],[42],[42],[42],[48]],measure:[[36],[36],[36],[36],[36],[36]],rod:[[36,18],[36,18],[36,18],[36,18],[36,18],[36,18]],handbomb:[[42],[42],[42],[42],[42],[42]],staff:[[36,18],[36,18],[36,18],[36,18],[36,18],[36,18]]},e=>e.map(e$));function eY(e,a,l,t){let n=e*a,r=e*l;return n>=t?(n+r)/2-t:r<=t?0:(1-(t-n)/(r-n))*(r-t)/2}function e_(e,a,l){e??=a.chargeTime;let t=1/(1.022342422396204*a.spd+5.268190606448866)+.1,n=1;a.swiftness1&&(n-=.12),a.swiftness2&&(n-=.12),a.swiftness3&&(n-=.12);let r=1/(.8+l.battleSpeed/5),o=1;return"attack"===a.ability.alg&&a.berserk&&(o/=2),a.haste&&(o/=1.5),(e*t+.25)*n*r*o}function eX(e,a,l,t){let n=a??l;for(let a of eO)n[`${a}Damage`]&&(l[`${a}Bonus`]&&(e*=1.5),e*=t[`${a}Reaction`]);return t.oil&&n.fireDamage&&(e*=3),!l.agateRing&&("sand"===t.terrain?n.earthDamage&&(e*=1.2):"water"===t.terrain?n.lightningDamage||n.waterDamage?e*=1.2:n.earthDamage&&(e*=.5):"snow"===t.terrain&&n.iceDamage&&(e*=1.2),("windy"===t.weather||"windy and rainy"===t.weather)&&(n.fireDamage||n.windDamage?e*=1.2:n.waterDamage&&(e*=.5)),("rainy"===t.weather||"windy and rainy"===t.weather)&&(n.lightningDamage?e*=1.2:n.fireDamage&&(e*=.5)),"foggy"===t.weather&&n.waterDamage&&(e*=1.2)),e}const e1=new Set(["fireDamage","iceDamage","lightningDamage","waterDamage","windDamage","earthDamage","darkDamage","holyDamage","agateRing","animationType"]);function e0(e,a,l){let t=[],n=[];e:for(let l of e)for(let e in l)if(a.has(e)){for(let e in l)if(a.has(e)&&e1.has(e)){n.push(l);continue e}t.push(l);continue e}for(let e=0;et)continue a}t.splice(e--,1);break}return t.push(...n),t.length||t.push(l?void 0:e[0]),t}const e2=eV([{name:"Onion Arrows",type:"bow",attack:1},{name:"Parallel Arrows",type:"bow",attack:2},{name:"Fiery Arrows",type:"bow",attack:1,fireDamage:!0},{name:"Bamboo Arrows",type:"bow",attack:2},{name:"Lightning Arrows",type:"bow",attack:2,lightningDamage:!0},{name:"Assassin's Arrows",type:"bow",attack:3},{name:"Icecloud Arrows",type:"bow",attack:4,iceDamage:!0},{name:"Artemis Arrows",type:"bow",attack:5,earthDamage:!0},{name:"Onion Bolts",type:"xbow",attack:1},{name:"Long Bolts",type:"xbow",attack:1},{name:"Stone Bolts",type:"xbow",attack:1},{name:"Lead Bolts",type:"xbow",attack:2},{name:"Black Bolts",type:"xbow",attack:2},{name:"Time Bolts",type:"xbow",attack:2},{name:"Sapping Bolts",type:"xbow",attack:3},{name:"Grand Bolts",type:"xbow",attack:4},{name:"Onion Shot",type:"gun",attack:1},{name:"Silent Shot",type:"gun",attack:1},{name:"Aqua Shot",type:"gun",attack:3,waterDamage:!0},{name:"Wyrmfire Shot",type:"gun",attack:3,fireDamage:!0},{name:"Mud Shot",type:"gun",attack:2,earthDamage:!0},{name:"Windslicer Shot",type:"gun",attack:4,windDamage:!0},{name:"Dark Shot",type:"gun",attack:4,darkDamage:!0},{name:"Stone Shot",type:"gun",attack:3},{name:"Onion Bombs",type:"handbomb",attack:1},{name:"Poison Bombs",type:"handbomb",attack:2},{name:"Stun Bombs",type:"handbomb",attack:2},{name:"Oil Bombs",type:"handbomb",attack:3},{name:"Chaos Bombs",type:"handbomb",attack:4},{name:"Stink Bombs",type:"handbomb",attack:2},{name:"Water Bombs",type:"handbomb",attack:5,waterDamage:!0},{name:"Castellanos",type:"handbomb",attack:6}]);function e3(e,a,l){let t,n;let r={weapon:l.weapons[0],ammo:void 0,armor:void 0,helm:void 0,accessory:void 0},o=function(e,a){let{ability:l}=e;return"attack"===l.alg?function(e,a){let l=new Set(["attack","spd","fireDamage","iceDamage","lightningDamage","waterDamage","windDamage","earthDamage","darkDamage","holyDamage","holyBonus","darkBonus","focus","adrenaline"]);for(let t of(e.combo>0&&l.add("genjiGloves"),(a.parry||a.block>0||("windy"===a.weather||"windy and rainy"===a.weather)&&("bow"===e.animationType||"xbow"===e.animationType))&&l.add("cameoBelt"),("other"!==a.weather||"other"!==a.terrain)&&l.add("agateRing"),["berserk","haste","bravery"]))a[t]||l.add(t);for(let a of["focus","adrenaline"])e[a]||l.add(a);switch(e.damageType){case"unarmed":l.add("str"),e.brawler||l.add("brawler");break;case"sword":case"pole":case"dagger":l.add("str");break;case"hammer":l.add("str"),l.add("vit");break;case"mace":l.add("mag");break;case"katana":l.add("str"),l.add("mag")}return l}(e,a):"magick"===l.alg?function(e,a,l){let t=new Set(["mag","spd"]);for(let a of eO)if(e[`${a}Damage`]){t.add(`${a}Bonus`);break}for(let e of(("other"!==l.weather||"other"!==l.terrain)&&t.add("agateRing"),["haste","faith"]))l[e]||t.add(e);for(let e of["serenity","spellbreaker"])a[e]||t.add(e);return t}(l,e,a):function(e,a){let l=new Set(["spd"]);return"Telekinesis"===e.name?(l.add("attack"),l.add("animationType")):"Souleater"===e.name&&(l.add("attack"),l.add("str")),a.haste||l.add("haste"),l}(l,a)}(eK(e,r),a),i=e0(l.weapons,o,!1),s=e0(l.armors,o,!0),c=e0(l.helms,o,!0),m=e0(l.accessories,o,!0);for(let l of i){r.weapon=l;let i=e0(e2.filter(e=>e.type===l.animationType),o,!1);for(let l of i)for(let o of(r.ammo=l,s))for(let l of(r.armor=o,c))for(let o of(r.helm=l,m)){r.accessory=o;let l=eK(e,r),i=function(e,a){let{ability:l}=e;return"attack"===l.alg?function(e,a){let l;switch(e.damageType){case"unarmed":{let t=e.brawler?(e.str+a.level)/2:11;l=eY(t,1,1.125,a.def)*e.str*(a.level+e.str)/256;break}case"sword":l=eY(e.attack,1,1.125,a.def)*(1+e.str*(a.level+e.str)/256);break;case"pole":l=eY(e.attack,1,1.125,a.mdef)*(1+e.str*(a.level+e.str)/256);break;case"mace":l=eY(e.attack,1,1.125,a.def)*(1+e.mag*(a.level+e.mag)/256);break;case"katana":l=eY(e.attack,1,1.125,a.def)*(1+e.str*(a.level+e.mag)/256);break;case"hammer":l=eY(e.attack,0,1.111,a.def)*(1+e.str*(a.level+e.str)/128);break;case"dagger":l=eY(e.attack,1,1.125,a.def)*(1+e.str*(a.level+e.spd)/218);break;case"gun":{let a=1.0625*e.attack;l=a*a;break}default:throw Error()}let t=l;"gun"===e.damageType&&a.resistGun&&(t/=8),t=eX(t,void 0,e,a),e.berserk&&(t*=1.5),e.bravery&&(t*=1.3),e.focus&&100===a.percentHp&&(t*=1.5),e.adrenaline&&a.percentHp<20&&(t*=2);let n=t;"gun"===e.damageType||e.cameoBelt||(a.block&&(n*=(100-a.block)/100),a.parry&&(n*=.75),("windy"===a.weather||"windy and rainy"===a.weather)&&("bow"===e.animationType?n*=.8:"xbow"===e.animationType&&(n*=.5)));let r=n,o=eJ[e.animationType][a.character],i=o.initialSwing;if(e.combo>0){let l=Math.min(1,e.combo*(e.genjiGloves?1.8:.7)/100);if(0===o.comboSwing||"gun"===e.damageType)r*=1+l;else{let e;let t=o.comboSwing;i+=(e=a.percentHp>25?1.873:a.percentHp>12?2.752:a.percentHp>6?4.509:8.028)*t*l,r*=1+e*l}}let s=e_(void 0,e,a),c=s+i,m=r/c;return{dps:m,baseDmg:l,modifiedDamage:t,nonAvoidedDamage:n,comboDamage:r,chargeTime:s,animationTime:i}}(e,a):"magick"===l.alg?function(e,a,l){let t="heal"===e.special,n=eY(e.att,1,1.125,t?0:l.mdef)*(2+a.mag*(l.level+a.mag)/256),r=n;r=eX(r,e,a,l),(l.undead&&"drain"===e.special||!l.undead&&t)&&(r=0),a.faith&&(r*=t?1.5:1.3),a.serenity&&100===l.percentHp&&(r*=1.5),a.spellbreaker&&l.percentHp<20&&(r*=t?1.5:2);let o=r,i=o,s=e.at/30;if(null!=e.aoe){let a=e.aoe/30,t=l.targetCount-1;s+=t*a,i*=l.targetCount}let c=e_(e.ct,a,l),m=c+s,u=i/m;return{dps:u,baseDmg:n,modifiedDamage:r,nonAvoidedDamage:o,comboDamage:i,chargeTime:c,animationTime:s}}(l,e,a):function(e,a,l){let t=0;switch(e.name){case"1000 Needles":t=1e3;break;case"Souleater":t=l.undead?0:1.4*eY(a.attack,1,1.125,0)*(1+a.str*(l.level+a.str)/256);break;case"Gil Toss":t=Math.min(1e4,l.partyMaxHp*l.percentHp/100);break;case"Horology":t=l.minuteOnesDigit*l.minuteOnesDigit*l.level/2;break;case"Telekinesis":t=(a.attack*l.targetLevel-1)/2}let n=t,r=n,o=l.level-l.targetLevel;o>0&&(o*=3);let i=Math.max(0,Math.min(e.chn+o,100));if(r*=i/100,"Telekinesis"===e.name)switch(a.animationType){case"bow":case"gun":case"xbow":case"handbomb":r=0}let s=r,c=e.at/30;if(null!=e.aoe){let a=e.aoe/30,t=l.targetCount-1;c+=t*a,"Gil Toss"===e.name?t>0&&(c-=20/30):s*=l.targetCount}let m=e_(e.ct,a,l),u=m+c,g=s/u;return{dps:g,baseDmg:t,modifiedDamage:n,nonAvoidedDamage:r,comboDamage:s,chargeTime:m,animationTime:c}}(l,e,a)}(l,a);(!t||i.dps>t.dps)&&(t=i,n={...r})}}return{ability:e.ability,doll:n,dps:t}}const e5={str:[23,24,23,25,21,20],mag:[22,18,20,20,24,21],vit:[24,24,26,20,23,23],spd:[24,24,23,23,23,24]},e4={str:[72,67,63,69,68,65],mag:[67,59,63,56,70,72],vit:[48,45,47,36,44,48],spd:[18,19,18,16,17,16]},e6={name:"Attack",text:"Attack with weapon in hand.",alg:"attack"},e8=[{name:"Cure",text:"Restore a small amount of HP to one ally.",l:eu("White Magick 1"),alg:"magick",ct:23,at:111,att:20,special:"heal"},{name:"Cura",text:"Restore HP to all allies in range.",l:eu("White Magick 4"),alg:"magick",ct:23,at:117,aoe:30,att:46,special:"heal"},{name:"Curaga",text:"Restore a large amount of HP to one ally.",l:eu("White Magick 6"),alg:"magick",ct:23,at:144,att:86,special:"heal"},{name:"Curaja",text:"Restore a large amount of HP to all allies in range.",l:eu("White Magick 9"),alg:"magick",ct:23,at:114,aoe:30,att:120,special:"heal"},{name:"Holy",text:"Deal heavy holy damage to one target.",l:eu("White Magick 11"),alg:"magick",ct:23,at:227,att:157,holyDamage:!0},{name:"Fire",text:"Deal fire damage to one foe.",l:eu("Black Magick 1"),alg:"magick",ct:23,at:75,att:22,fireDamage:!0},{name:"Fira",text:"Deal fire damage to all foes in range.",l:eu("Black Magick 5"),alg:"magick",ct:23,at:75,aoe:30,att:67,fireDamage:!0},{name:"Firaga",text:"Deal heavy fire damage to all foes in range.",l:eu("Black Magick 9"),alg:"magick",ct:23,at:75,aoe:30,att:120,fireDamage:!0},{name:"Thunder",text:"Deal lightning damage to one foe.",l:eu("Black Magick 1"),alg:"magick",ct:23,at:75,att:23,lightningDamage:!0},{name:"Thundara",text:"Deal lightning damage to all foes in range.",l:eu("Black Magick 6"),alg:"magick",ct:23,at:84,aoe:114,att:68,lightningDamage:!0},{name:"Thundaga",text:"Deal heavy lightning damage to all foes in range.",l:eu("Black Magick 9"),alg:"magick",ct:23,at:96,aoe:48,att:122,lightningDamage:!0},{name:"Blizzard",text:"Deal ice damage to one foe.",l:eu("Black Magick 2"),alg:"magick",ct:23,at:102,att:25,iceDamage:!0},{name:"Blizzara",text:"Deal ice damage to all foes in range.",l:eu("Black Magick 6"),alg:"magick",ct:23,at:102,aoe:30,att:70,iceDamage:!0},{name:"Blizzaga",text:"Deal heavy ice damage to all foes in range.",l:eu("Black Magick 10"),alg:"magick",ct:23,at:105,aoe:75,att:125,iceDamage:!0},{name:"Aero",text:"Deal wind damage to all foes in range.",l:eu("Black Magick 4"),alg:"magick",ct:23,at:90,aoe:24,att:51,windDamage:!0},{name:"Aeroga",text:"Deal heavy wind damage to all foes in range.",l:eu("Black Magick 8"),alg:"magick",ct:23,at:108,aoe:36,att:103,windDamage:!0},{name:"Aqua",text:"Deal water damage to one foe.",l:eu("Black Magick 3"),alg:"magick",ct:23,at:153,att:37,waterDamage:!0},{name:"Bio",text:"Inflict Sap and deal damage to all foes in range.",l:eu("Black Magick 7"),alg:"magick",ct:23,at:106,aoe:30,att:67},{name:"Shock",text:"Deal heavy damage to one foe.",l:eu("Black Magick 11"),alg:"magick",ct:23,at:123,att:133},{name:"Scourge",text:"Inflict Sap and deal heavy damage to all foes in range.",l:eu("Black Magick 12"),alg:"magick",ct:23,at:117,aoe:45,att:142},{name:"Flare",text:"Deal massive damage to one foe.",l:eu("Black Magick 12"),alg:"magick",ct:23,at:305,att:163},{name:"Scathe",text:"Deal massive damage to all foes in range.",l:eu("Black Magick 13"),alg:"magick",ct:23,at:218,aoe:0,att:190},{name:"Drain",text:"Transfer HP from one foe to the caster.",l:eu("Green Magick 2"),alg:"magick",ct:23,at:129,att:62,special:"drain"},{name:"Dark",text:"Deal moderate dark damage to all foes in range.",l:eu("Arcane Magick 1"),alg:"magick",ct:23,at:96,aoe:30,att:46,darkDamage:!0},{name:"Darkra",text:"Deal dark damage to all foes in range.",l:eu("Arcane Magick 1"),alg:"magick",ct:23,at:99,aoe:30,att:91,darkDamage:!0},{name:"Darkga",text:"Deal heavy dark damage to all foes in range.",l:eu("Arcane Magick 2"),alg:"magick",ct:23,at:110,aoe:30,att:130,darkDamage:!0},{name:"Ardor",text:"Deal massive fire damage to all foes in range.",l:eu("Arcane Magick 3"),alg:"magick",ct:23,at:141,aoe:19,att:173,fireDamage:!0}],e7=[{name:"1000 Needles",text:"Deal 1,000 damage to one foe.",l:eu("1000 Needles"),alg:"technick",ct:25,chn:100,at:114},{name:"Souleater",text:"Consume HP to deal damage to one foe.",l:eu("Souleater"),alg:"technick",ct:30,chn:200,at:126},{name:"Gil Toss",text:"Throw gil, damaging all foes in range.",l:eu("Gil Toss"),alg:"technick",ct:30,chn:200,at:75,aoe:20},{name:"Horology",text:"Deal damage based on a factor of time to all foes in range.",l:eu("Horology"),alg:"technick",ct:30,chn:90,at:105,aoe:30},{name:"Telekinesis",text:"Deal ranged damage with melee weapons.",l:eu("Telekinesis"),alg:"technick",ct:30,chn:80,at:36}],e9=eg.find(e=>"Battle Lore"===e.name).contents,ae=eg.find(e=>"Magick Lore"===e.name).contents;function aa(e){return G("div",{"aria-label":e.tooltip,class:"control"},G("label",null,e.label,G("input",{class:`d-${e.max.toString().length}`,type:"number",value:e.value,min:e.min,max:e.max,onChange:a=>{if(a.currentTarget.validity.valid){let l=a.currentTarget.valueAsNumber;l==l&&e.changeValue(l)}}})))}function al(e){return G("div",{"aria-label":e.tooltip,class:"control"},G("label",null,G("input",{type:"checkbox",checked:e.value,onChange:()=>e.changeValue(!e.value)}),e.label))}function at(e){return G("div",{"aria-label":e.tooltip,class:"control"},G("label",null,e.label,G("select",{value:e.value,onChange:a=>e.changeValue(Number(a.currentTarget.value))},G("option",{value:"0"},"Immune"),G("option",{value:"0.5"},"Strong"),G("option",{value:"1"},"Normal"),G("option",{value:"2"},"Weak"))))}function an(e){return G("div",{"aria-label":e.tooltip,class:"control"},G("label",null,e.label,G("select",{value:e.value,onChange:a=>e.changeValue(a.currentTarget.value)},G("option",{value:"other"},"None"),G("option",{value:"windy"},"Wind"),G("option",{value:"rainy"},"Rain"),G("option",{value:"foggy"},"Fog"),G("option",{value:"windy and rainy"},"Downpour"))))}function ar(e){return G("div",{"aria-label":e.tooltip,class:"control"},G("label",null,e.label,G("select",{value:e.value,onChange:a=>e.changeValue(a.currentTarget.value)},G("option",{value:"other"},"None"),G("option",{value:"sand"},"Sand"),G("option",{value:"water"},"Water"),G("option",{value:"snow"},"Snow"))))}const{useStore:ao,dispatch:ai}=eS({character:-1,def:30,mdef:30,targetCount:1,percentHp:1,fireReaction:1,iceReaction:1,lightningReaction:1,waterReaction:1,windReaction:1,earthReaction:1,darkReaction:1,holyReaction:1,level:70,targetLevel:60,minuteOnesDigit:6,partyMaxHp:25e3,resistGun:!1,battleSpeed:6,berserk:!0,haste:!0,bravery:!0,faith:!0,parry:!1,block:0,terrain:"other",weather:"other",oil:!1,undead:!1,allowCertainLicenses:!0,allowCheaterGear:!0}),as=(e,a)=>ai(l=>({...l,[e]:a}));var ac=(e,a)=>{let l=ao(a);return e=>{let a=l();return G("div",{class:"dps-optimizer"},G("div",{class:"controls"},G(aa,{min:0,max:250,label:"Def",tooltip:"Target's physical defense",value:a.def,changeValue:e=>as("def",e)}),G(aa,{min:0,max:250,label:"MDef",tooltip:"Target's magical defense",value:a.mdef,changeValue:e=>as("mdef",e)}),G(aa,{min:1,max:10,label:"Aoe",tooltip:"Number of targets",value:a.targetCount,changeValue:e=>as("targetCount",e)}),G(aa,{min:1,max:100,label:"HP%",tooltip:"Character's HP percentage",value:a.percentHp,changeValue:e=>as("percentHp",e)}),G(aa,{min:1,max:99,label:"C. Lvl",tooltip:"Character's level",value:a.level,changeValue:e=>as("level",e)}),G(aa,{min:1,max:99,label:"T. Lvl",tooltip:"Target's level",value:a.targetLevel,changeValue:e=>as("targetLevel",e)}),G(aa,{min:0,max:9,label:"Time",tooltip:"Ones digit of game clock minutes",value:a.minuteOnesDigit,changeValue:e=>as("minuteOnesDigit",e)}),G(aa,{min:100,max:5e4,label:"Party HP",tooltip:"Combined Max HP of entire active party",value:a.partyMaxHp,changeValue:e=>as("partyMaxHp",e)}),G(aa,{min:0,max:40,label:"Block",tooltip:"Target's block (EVA)",value:a.block,changeValue:e=>as("block",e)}),G(an,{label:"Weather",tooltip:"What is the current weather?",value:a.weather,changeValue:e=>as("weather",e)}),G(ar,{label:"Terrain",tooltip:"What is the current terrain?",value:a.terrain,changeValue:e=>as("terrain",e)}),G("br",null),G(al,{label:"Resist G&M",tooltip:"Does the target resist guns and measures?",value:a.resistGun,changeValue:e=>as("resistGun",e)}),G(al,{label:"Berserk",tooltip:"Is the berserk buff available?",value:a.berserk,changeValue:e=>as("berserk",e)}),G(al,{label:"Haste",tooltip:"Is the haste buff available?",value:a.haste,changeValue:e=>as("haste",e)}),G(al,{label:"Bravery",tooltip:"Is the bravery buff available?",value:a.bravery,changeValue:e=>as("bravery",e)}),G(al,{label:"Faith",tooltip:"Is the faith buff available?",value:a.faith,changeValue:e=>as("faith",e)}),G(al,{label:"Oil",tooltip:"Is the target oiled?",value:a.oil,changeValue:e=>as("oil",e)}),G(al,{label:"Parry",tooltip:"Can the target parry attacks?",value:a.parry,changeValue:e=>as("parry",e)}),G(al,{label:"Undead",tooltip:"Is the target undead?",value:a.undead,changeValue:e=>as("undead",e)}),G(al,{label:"All Licenses",tooltip:"Allow grey-shaded licenses",value:a.allowCertainLicenses,changeValue:e=>as("allowCertainLicenses",e)}),G(al,{label:"Secret Gear",tooltip:"Allow secret items",value:a.allowCheaterGear,changeValue:e=>as("allowCheaterGear",e)}),G("br",null),eO.map(e=>G(at,{label:e[0].toUpperCase()+e.slice(1),tooltip:`How much ${e} damage does the target take?`,value:a[`${e}Reaction`],changeValue:a=>as(`${e}Reaction`,a)}))),G(ad,{party:e.party,env:a}))}};function am(e){let{value:a}=e;return G("td",{"aria-label":a?.tooltip},a?.name)}function au(e){let{value:a}=e;return G("td",{"aria-label":a.text},a.name)}function ag(e){let{value:a}=e,l=`Base Damage: ${Math.round(a.baseDmg)} -Modified Damage: ${Math.round(a.modifiedDamage)} -Not Avoided Damage: ${Math.round(a.nonAvoidedDamage)} -Comboed Damage: ${Math.round(a.comboDamage)} -Charge Time: ${a.chargeTime.toFixed(2)}s -Animation Time: ${a.animationTime.toFixed(2)}s`;return G("td",{class:"r","aria-label":l},Math.round(a.dps))}const ad=(e,a)=>{let l={results:void 0,for:void 0,nodes:G("tr",null,G("td",null,"Working..."))},t=()=>l.for&&l.for.env===e.env&&l.for.party===e.party;async function n(){let t=[[],[],[],[],[],[]],{party:n,env:r}=e,o=performance.now(),i=!1;for(let a=0;a<6;a++){let l=t[a],s={...r,character:a};for(let a of function*(e,a){let l=a.color(e.character);function t(e){return n(eu(e))}function n(a){let t=l.get(a);return t===C.OBTAINED||e.allowCertainLicenses&&t===C.CERTAIN}function r(e){return!e.l||n(e.l)}let o=eQ.filter(a=>r(a)&&(e.allowCheaterGear||a.attack<=150)),i={weapons:o,armors:eU.filter(r),helms:eZ.filter(r),accessories:eq.filter(r)},s=e8.filter(r),c=e7.filter(r),m={ability:e6,damageType:"unarmed",animationType:"unarmed",attack:0,combo:0,chargeTime:0,...function(e,a){function l(e,l){return Math.floor(a*l/128)+e}return{str:l(e5.str[e],e4.str[e]),mag:l(e5.mag[e],e4.mag[e]),vit:l(e5.vit[e],e4.vit[e]),spd:l(e5.spd[e],e4.spd[e])}}(e.character,e.level),brawler:t("Brawler"),berserk:e.berserk,haste:e.haste,bravery:e.bravery,faith:e.faith,focus:t("Focus"),adrenaline:t("Adrenaline"),serenity:t("Serenity"),spellbreaker:t("Spellbreaker"),genjiGloves:!1,cameoBelt:!1,agateRing:!1,swiftness1:t("Swiftness 1"),swiftness2:t("Swiftness 2"),swiftness3:t("Swiftness 3"),fireDamage:!1,iceDamage:!1,lightningDamage:!1,waterDamage:!1,windDamage:!1,earthDamage:!1,darkDamage:!1,holyDamage:!1,fireBonus:!1,iceBonus:!1,lightningBonus:!1,waterBonus:!1,windBonus:!1,earthBonus:!1,darkBonus:!1,holyBonus:!1};for(let a of(m.str+=e9.filter(n).length,m.mag+=ae.filter(n).length,s))m.ability=a,yield e3(m,e,i);for(let a of c)m.ability=a,yield e3(m,e,i);for(let a of(m.ability=e6,i.weapons=[],o))i.weapons[0]=a,yield e3(m,e,i)}(s,n)){if(performance.now()-o>120&&(await new Promise(e=>setTimeout(e,0)),i=!0,o=performance.now(),n!==e.party||r!==e.env))return;l.push(a)}l.sort((e,a)=>a.dps.dps-e.dps.dps)}l={results:t,for:{party:n,env:r},nodes:t.map((e,a)=>G(ah,{name:ep[a].name,results:e}))},i&&H(a)}return a=>(e=a,t()||n(),G("div",{class:t()?"results":"results busy"},G("table",null,G("tbody",null,l.nodes))))};function ah(e){return G(P,null,G("tr",{class:"sticky"},G("th",{colSpan:9999},e.name)),G("tr",{class:"sticky second-row"},G("th",{class:"r"},"DPS"),G("th",null,"Ability"),G("th",null,"Weapon"),G("th",null,"Ammo"),G("th",null,"Helm"),G("th",null,"Armor"),G("th",null,"Accessory")),e.results.map(({ability:e,doll:a,dps:l})=>G("tr",{class:"data-row"},G(ag,{value:l}),G(au,{value:e}),G(am,{value:a.weapon}),G(am,{value:a.ammo}),G(am,{value:a.helm}),G(am,{value:a.armor}),G(am,{value:a.accessory}))))}var ap=(e,a)=>{let l=ex(a);return()=>{let e=l();return G("div",{class:"character-planner"},G(eC,null),e.qeActive?G(eF,null):e.dpsActive?G(ac,{party:e.party}):G(eE,null))}};function ay(e){return e.split("-")[1]}function af(e){return"y"===e?"height":"width"}function ab(e){return e.split("-")[0]}function aA(e){return["top","bottom"].includes(ab(e))?"x":"y"}function ak(e,a,l){let t,{reference:n,floating:r}=e,o=n.x+n.width/2-r.width/2,i=n.y+n.height/2-r.height/2,s=aA(a),c=af(s),m=n[c]/2-r[c]/2,u=ab(a),g="x"===s;switch(u){case"top":t={x:o,y:n.y-r.height};break;case"bottom":t={x:o,y:n.y+n.height};break;case"right":t={x:n.x+n.width,y:i};break;case"left":t={x:n.x-r.width,y:i};break;default:t={x:n.x,y:n.y}}switch(ay(a)){case"start":t[s]-=m*(l&&g?-1:1);break;case"end":t[s]+=m*(l&&g?-1:1)}return t}const aw=async(e,a,l)=>{let{placement:t="bottom",strategy:n="absolute",middleware:r=[],platform:o}=l,i=r.filter(Boolean),s=await (null==o.isRTL?void 0:o.isRTL(a)),c=await o.getElementRects({reference:e,floating:a,strategy:n}),{x:m,y:u}=ak(c,t,s),g=t,d={},h=0;for(let l=0;laB[e])}const ax={start:"end",end:"start"};function aP(e){return e.replace(/start|end/g,e=>ax[e])}function aG(e){var a;return(null==(a=e.ownerDocument)?void 0:a.defaultView)||window}function aC(e){return aG(e).getComputedStyle(e)}function aD(e){return e instanceof aG(e).Node}function aR(e){return aD(e)?(e.nodeName||"").toLowerCase():"#document"}function aE(e){return e instanceof aG(e).HTMLElement}function aN(e){return e instanceof aG(e).Element}function aI(e){return"undefined"!=typeof ShadowRoot&&(e instanceof aG(e).ShadowRoot||e instanceof ShadowRoot)}function aj(e){let{overflow:a,overflowX:l,overflowY:t,display:n}=aC(e);return/auto|scroll|overlay|hidden|clip/.test(a+t+l)&&!["inline","contents"].includes(n)}function aW(e){let a=az(),l=aC(e);return"none"!==l.transform||"none"!==l.perspective||!a&&!!l.backdropFilter&&"none"!==l.backdropFilter||!a&&!!l.filter&&"none"!==l.filter||["transform","perspective","filter"].some(e=>(l.willChange||"").includes(e))||["paint","layout","strict","content"].some(e=>(l.contain||"").includes(e))}function az(){return"undefined"!=typeof CSS&&!!CSS.supports&&CSS.supports("-webkit-backdrop-filter","none")}function aF(e){return["html","body","#document"].includes(aR(e))}const aO=Math.min,aV=Math.max,aK=Math.round,aQ=e=>({x:e,y:e});function aZ(e){let a=aC(e),l=parseFloat(a.width)||0,t=parseFloat(a.height)||0,n=aE(e),r=n?e.offsetWidth:l,o=n?e.offsetHeight:t,i=aK(l)!==r||aK(t)!==o;return i&&(l=r,t=o),{width:l,height:t,$:i}}function aU(e){return aN(e)?e:e.contextElement}function aq(e){let a=aU(e);if(!aE(a))return aQ(1);let l=a.getBoundingClientRect(),{width:t,height:n,$:r}=aZ(a),o=(r?aK(l.width):l.width)/t,i=(r?aK(l.height):l.height)/n;return o&&Number.isFinite(o)||(o=1),i&&Number.isFinite(i)||(i=1),{x:o,y:i}}const a$=aQ(0);function aJ(e,a,l){var t,n;if(void 0===a&&(a=!0),!az())return a$;let r=e?aG(e):window;return!l||a&&l!==r?a$:{x:(null==(t=r.visualViewport)?void 0:t.offsetLeft)||0,y:(null==(n=r.visualViewport)?void 0:n.offsetTop)||0}}function aY(e,a,l,t){void 0===a&&(a=!1),void 0===l&&(l=!1);let n=e.getBoundingClientRect(),r=aU(e),o=aQ(1);a&&(t?aN(t)&&(o=aq(t)):o=aq(e));let i=aJ(r,l,t),s=(n.left+i.x)/o.x,c=(n.top+i.y)/o.y,m=n.width/o.x,u=n.height/o.y;if(r){let e=aG(r),a=t&&aN(t)?aG(t):t,l=e.frameElement;for(;l&&t&&a!==e;){let e=aq(l),a=l.getBoundingClientRect(),t=getComputedStyle(l),n=a.left+(l.clientLeft+parseFloat(t.paddingLeft))*e.x,r=a.top+(l.clientTop+parseFloat(t.paddingTop))*e.y;s*=e.x,c*=e.y,m*=e.x,u*=e.y,s+=n,c+=r,l=aG(l).frameElement}}return aS({width:m,height:u,x:s,y:c})}function a_(e){return((aD(e)?e.ownerDocument:e.document)||window.document).documentElement}function aX(e){return aN(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.pageXOffset,scrollTop:e.pageYOffset}}function a1(e){return aY(a_(e)).left+aX(e).scrollLeft}function a0(e){if("html"===aR(e))return e;let a=e.assignedSlot||e.parentNode||aI(e)&&e.host||a_(e);return aI(a)?a.host:a}function a2(e,a,l){let t;if("viewport"===a)t=function(e,a){let l=aG(e),t=a_(e),n=l.visualViewport,r=t.clientWidth,o=t.clientHeight,i=0,s=0;if(n){r=n.width,o=n.height;let e=az();(!e||e&&"fixed"===a)&&(i=n.offsetLeft,s=n.offsetTop)}return{width:r,height:o,x:i,y:s}}(e,l);else if("document"===a)t=function(e){let a=a_(e),l=aX(e),t=e.ownerDocument.body,n=aV(a.scrollWidth,a.clientWidth,t.scrollWidth,t.clientWidth),r=aV(a.scrollHeight,a.clientHeight,t.scrollHeight,t.clientHeight),o=-l.scrollLeft+a1(e),i=-l.scrollTop;return"rtl"===aC(t).direction&&(o+=aV(a.clientWidth,t.clientWidth)-n),{width:n,height:r,x:o,y:i}}(a_(e));else if(aN(a))t=function(e,a){let l=aY(e,!0,"fixed"===a),t=l.top+e.clientTop,n=l.left+e.clientLeft,r=aE(e)?aq(e):aQ(1),o=e.clientWidth*r.x,i=e.clientHeight*r.y,s=n*r.x,c=t*r.y;return{width:o,height:i,x:s,y:c}}(a,l);else{let l=aJ(e);t={...a,x:a.x-l.x,y:a.y-l.y}}return aS(t)}function a3(e,a){return aE(e)&&"fixed"!==aC(e).position?a?a(e):e.offsetParent:null}function a5(e,a){let l=aG(e);if(!aE(e))return l;let t=a3(e,a);for(;t&&["table","td","th"].includes(aR(t))&&"static"===aC(t).position;)t=a3(t,a);return t&&("html"===aR(t)||"body"===aR(t)&&"static"===aC(t).position&&!aW(t))?l:t||function(e){let a=a0(e);for(;aE(a)&&!aF(a);){if(aW(a))return a;a=a0(a)}return null}(e)||l}const a4={getClippingRect:function(e){let{element:a,boundary:l,rootBoundary:t,strategy:n}=e,r="clippingAncestors"===l?function(e,a){let l=a.get(e);if(l)return l;let t=(function e(a,l){var t;void 0===l&&(l=[]);let n=function e(a){let l=a0(a);return aF(l)?a.ownerDocument?a.ownerDocument.body:a.body:aE(l)&&aj(l)?l:e(l)}(a),r=n===(null==(t=a.ownerDocument)?void 0:t.body),o=aG(n);return r?l.concat(o,o.visualViewport||[],aj(n)?n:[]):l.concat(n,e(n))})(e).filter(e=>aN(e)&&"body"!==aR(e)),n=null,r="fixed"===aC(e).position,o=r?a0(e):e;for(;aN(o)&&!aF(o);){let a=aC(o),l=aW(o);l||"fixed"!==a.position||(n=null);let i=r?!l&&!n:!l&&"static"===a.position&&!!n&&["absolute","fixed"].includes(n.position)||aj(o)&&!l&&function e(a,l){let t=a0(a);return!(t===l||!aN(t)||aF(t))&&("fixed"===aC(t).position||e(t,l))}(e,o);i?t=t.filter(e=>e!==o):n=a,o=a0(o)}return a.set(e,t),t}(a,this._c):[].concat(l),o=[...r,t],i=o[0],s=o.reduce((e,l)=>{let t=a2(a,l,n);return e.top=aV(t.top,e.top),e.right=aO(t.right,e.right),e.bottom=aO(t.bottom,e.bottom),e.left=aV(t.left,e.left),e},a2(a,i,n));return{width:s.right-s.left,height:s.bottom-s.top,x:s.left,y:s.top}},convertOffsetParentRelativeRectToViewportRelativeRect:function(e){let{rect:a,offsetParent:l,strategy:t}=e,n=aE(l),r=a_(l);if(l===r)return a;let o={scrollLeft:0,scrollTop:0},i=aQ(1),s=aQ(0);if((n||!n&&"fixed"!==t)&&(("body"!==aR(l)||aj(r))&&(o=aX(l)),aE(l))){let e=aY(l);i=aq(l),s.x=e.x+l.clientLeft,s.y=e.y+l.clientTop}return{width:a.width*i.x,height:a.height*i.y,x:a.x*i.x-o.scrollLeft*i.x+s.x,y:a.y*i.y-o.scrollTop*i.y+s.y}},isElement:aN,getDimensions:function(e){return aZ(e)},getOffsetParent:a5,getDocumentElement:a_,getScale:aq,async getElementRects(e){let{reference:a,floating:l,strategy:t}=e,n=this.getOffsetParent||a5,r=this.getDimensions;return{reference:function(e,a,l){let t=aE(a),n=a_(a),r="fixed"===l,o=aY(e,!0,r,a),i={scrollLeft:0,scrollTop:0},s=aQ(0);if(t||!t&&!r){if(("body"!==aR(a)||aj(n))&&(i=aX(a)),aE(a)){let e=aY(a,!0,r,a);s.x=e.x+a.clientLeft,s.y=e.y+a.clientTop}else n&&(s.x=a1(n))}return{x:o.left+i.scrollLeft-s.x,y:o.top+i.scrollTop-s.y,width:o.width,height:o.height}}(a,await n(l),t),floating:{x:0,y:0,...await r(l)}}},getClientRects:e=>Array.from(e.getClientRects()),isRTL:e=>"rtl"===aC(e).direction},a6=(e,a,l)=>{let t=new Map,n={platform:a4,...l},r={...n.platform,_c:t};return aw(e,a,{...n,platform:r})},a8=document.createElement("div");a8.className="tooltip",a8.style.display="none",document.body.appendChild(a8);let a7=null;async function a9(){if(a7){var e,a;let l=await a6(a7,a8,{middleware:[(void 0===e&&(e={}),{name:"flip",options:e,async fn(a){var l,t,n,r;let{placement:o,middlewareData:i,rects:s,initialPlacement:c,platform:m,elements:u}=a,{mainAxis:g=!0,crossAxis:d=!0,fallbackPlacements:h,fallbackStrategy:p="bestFit",fallbackAxisSideDirection:y="none",flipAlignment:f=!0,...b}=av(e,a),A=ab(o),k=ab(c)===c,w=await (null==m.isRTL?void 0:m.isRTL(u.floating)),v=h||(k||!f?[aH(c)]:function(e){let a=aH(e);return[aP(e),a,aP(a)]}(c));h||"none"===y||v.push(...function(e,a,l,t){let n=ay(e),r=function(e,a,l){let t=["left","right"],n=["right","left"];switch(e){case"top":case"bottom":if(l)return a?n:t;return a?t:n;case"left":case"right":return a?["top","bottom"]:["bottom","top"];default:return[]}}(ab(e),"start"===l,t);return n&&(r=r.map(e=>e+"-"+n),a&&(r=r.concat(r.map(aP)))),r}(c,f,y,w));let S=[c,...v],T=await aT(a,b),M=[],L=(null==(l=i.flip)?void 0:l.overflows)||[];if(g&&M.push(T[A]),d){let{main:e,cross:a}=function(e,a,l){void 0===l&&(l=!1);let t=ay(e),n=aA(e),r=af(n),o="x"===n?t===(l?"end":"start")?"right":"left":"start"===t?"bottom":"top";return a.reference[r]>a.floating[r]&&(o=aH(o)),{main:o,cross:aH(o)}}(o,s,w);M.push(T[e],T[a])}if(L=[...L,{placement:o,overflows:M}],!M.every(e=>e<=0)){let e=((null==(t=i.flip)?void 0:t.index)||0)+1,a=S[e];if(a)return{data:{index:e,overflows:L},reset:{placement:a}};let l=null==(n=L.filter(e=>e.overflows[0]<=0).sort((e,a)=>e.overflows[1]-a.overflows[1])[0])?void 0:n.placement;if(!l)switch(p){case"bestFit":{let e=null==(r=L.map(e=>[e.placement,e.overflows.filter(e=>e>0).reduce((e,a)=>e+a,0)]).sort((e,a)=>e[1]-a[1])[0])?void 0:r[0];e&&(l=e);break}case"initialPlacement":l=c}if(o!==l)return{reset:{placement:l}}}return{}}}),(void 0===a&&(a={}),{name:"shift",options:a,async fn(e){let{x:l,y:t,placement:n}=e,{mainAxis:r=!0,crossAxis:o=!1,limiter:i={fn:e=>{let{x:a,y:l}=e;return{x:a,y:l}}},...s}=av(a,e),c={x:l,y:t},m=await aT(e,s),u=aA(ab(n)),g="x"===u?"y":"x",d=c[u],h=c[g];if(r){let e=d+m["y"===u?"top":"left"],a=d-m["y"===u?"bottom":"right"];d=aL(e,aM(d,a))}if(o){let e=h+m["y"===g?"top":"left"],a=h-m["y"===g?"bottom":"right"];h=aL(e,aM(h,a))}let p=i.fn({...e,[u]:d,[g]:h});return{...p,data:{x:p.x-l,y:p.y-t}}}})]});a8.style.transform=`translate(${Math.round(l.x)}px,${Math.round(l.y)}px)`}}document.addEventListener("mouseover",e=>{let a=e.target,l=null;for(;a&&null==(l=a.getAttribute("aria-label"));)a=a.parentElement;a7=a,l?(a8.textContent=l,a8.style.display="",a9()):a8.style.display="none"}),document.addEventListener("scroll",a9,{passive:!0,capture:!0}),Array.prototype.at||Object.defineProperty(Array.prototype,"at",{configurable:!0,enumerable:!1,value:function(e){let{length:a}=this;if(e<0&&(e+=a),e>=0&&et}},e,l??null,void 0);t=a,n.scheduleLayerUpdate(),T()}(document.body,G((e,a)=>{let l;let t=ex(a);return()=>{let{party:e}=t();return e!==l&&(requestIdleCallback(()=>{let a=window.location.href.split("?")[0],l=e.encode();window.history.replaceState(null,"",a+("AA.AA.AA.AA.AA.AA"===l?"":"?"+l))}),l=e),G(ap,null)}},null),document.body.lastChild); -//# sourceMappingURL=index.203c95b7.js.map diff --git a/docs/index.928c49fb.css b/docs/index.928c49fb.css deleted file mode 100644 index 4530a09..0000000 --- a/docs/index.928c49fb.css +++ /dev/null @@ -1,2 +0,0 @@ -.character-panel{flex-direction:column;display:flex}.character-panel .actions{flex:none;display:flex}.character-panel .actions .action{flex:1 0 0;font-size:12px}.character-panel .character-select{flex:none;display:flex}.character-panel .character-select .character{text-align:center;cursor:pointer}.character-panel .character-select .character>.name{font-weight:700}.character-panel .character-select .character .job{background-color:#0000;border:none;font-size:14px}.character-panel .character-select .character .job:hover{background-color:#afa}.character-panel .character-select .character .job[aria-pressed=true]{background-color:#aaf}.character-panel .character-select .character .job.nojob{font-style:italic}.character-panel .character-select .character .job:disabled{color:#aaa}.character-panel .stats{flex-flow:column wrap;flex:0 auto;place-content:flex-start;align-items:flex-start;display:flex;overflow:auto}.character-panel .stats .group{flex:none;margin:4px}.character-panel .stats .group .name{margin:0;font-size:16px}.character-panel .stats .group .l{margin:0;font-size:12px}.license-board-holder{background-color:#333;min-width:240px;overflow:auto}.license-board-holder .license-board{border-spacing:0}.license-board-holder .license-board td{vertical-align:top;min-width:80px;max-width:80px;height:80px;padding:4px;position:relative}.license-board-holder .license-board .l{box-shadow:inset 0 0 2px #000}.license-board-holder .license-board .l .name{font-size:10px}.license-board-holder .license-board .l .cost{font-size:24px;font-weight:700;position:absolute;bottom:4px;right:4px}.license-board-holder .license-board .l .mist{opacity:.1;object-fit:contain;width:100%;height:100%;padding:10px;position:absolute;top:0;left:0}.select-job{background-color:#aaa;place-content:center;min-width:240px;display:grid;position:relative}.select-job .job{text-align:left;line-height:32px}.select-job .job .zodiac{float:right;height:32px;margin-left:20px}@keyframes octocat-wave{0%,to{transform:rotate(0)}20%,60%{transform:rotate(-25deg)}40%,80%{transform:rotate(10deg)}}.github-corner{pointer-events:none;border:0;position:absolute;top:0;right:0}.github-corner svg{color:#fff;fill:#000;display:block}.github-corner svg g{pointer-events:initial}.github-corner svg g:hover .octo-arm{animation:.56s ease-in-out octocat-wave}.github-corner svg g .octo-arm{transform-origin:130px 106px}.character-planner{width:100%;height:100%;display:flex}.character-planner>:first-child{flex:none}.character-planner>:nth-child(2){flex:1 0 0}.qe-board{text-align:center;grid-template-columns:1fr 1fr 1fr 1fr 1fr 1fr 1fr;grid-auto-rows:1fr;display:grid}.qe-board>*{flex-direction:column;justify-content:center;align-items:center;display:flex}.qe-board .character-name,.qe-board .license-name{font-size:14px;font-weight:700}.qe-board .job{font-size:12px}.qe-board .job.nojob{font-style:italic}.qe-board .l{font-size:12px;box-shadow:inset 0 0 2px #000}.qe-board .l.unreachable{color:#888;background-color:#ddd;font-style:italic}.dps-optimizer{flex-direction:column;display:flex}.dps-optimizer .controls{flex:none}.dps-optimizer .controls .control{padding:2px;display:inline-block}.dps-optimizer .controls .control input[type=number]{text-align:right;margin-left:4px}.dps-optimizer .controls .control input[type=number].d-1{width:2.2em}.dps-optimizer .controls .control input[type=number].d-2{width:3em}.dps-optimizer .controls .control input[type=number].d-3{width:3.8em}.dps-optimizer .controls .control input[type=number].d-4{width:4.6em}.dps-optimizer .controls .control input[type=number].d-5{width:5.4em}.dps-optimizer .controls .control input[type=checkbox]{margin-right:4px}.dps-optimizer .controls .control select{margin-left:4px}.dps-optimizer .results{font-size:12px;overflow:auto}.dps-optimizer .results table{border-collapse:collapse}.dps-optimizer .results.busy{color:#aaa}.dps-optimizer .results tr:nth-child(2n){background-color:#f8f8f8}.dps-optimizer .results .sticky{background-color:#fff;height:20px;position:sticky;top:0}.dps-optimizer .results .sticky.second-row{top:20px}.dps-optimizer .results th,.dps-optimizer .results td{padding:2px}.dps-optimizer .results tr.data-row:hover{background-color:#efe}.dps-optimizer .results th{text-align:left}.dps-optimizer .results .r{text-align:right}*,:before,:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;tab-size:4;font-family:system-ui,Segoe UI,Roboto,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji;line-height:1.15}body{margin:0}hr{color:inherit;height:0}abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:100%;line-height:1.15}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}::-moz-focus-inner{border-style:none;padding:0}:-moz-focusring{outline:1px dotted ButtonText}:-moz-ui-invalid{box-shadow:none}legend{padding:0}progress{vertical-align:baseline}:is(){height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}button{cursor:pointer}button:disabled{cursor:not-allowed}:root,body{width:100%;min-width:800px;height:100%;min-height:640px;font-family:HelveticaNeue-Light,Helvetica Neue Light,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif}.button{background-color:#fff;border:2px solid #000;border-radius:6px;margin:2px;padding:6px}.button:hover{background-color:#efe}.button:disabled{color:#999;background-color:#ccc;border-color:#999}.button:disabled img{opacity:.3}.button[aria-pressed=true]{background-color:#eef;border-color:#33f}.l{cursor:pointer}.l.obtained{background-color:#fff}.l.obtained:hover{box-shadow:inset 0 0 8px red}.l.certain{background-color:#ddd}.l.certain:hover{box-shadow:inset 0 0 8px #0a0}.l.possible{background-color:#ffa}.l.possible:hover{box-shadow:inset 0 0 8px #0a0}.l.blocked{cursor:not-allowed;background-color:#fbb}.l.blocked:hover{box-shadow:inset 0 0 8px red}.l.unreachable{cursor:not-allowed}.l.unreachable:hover{box-shadow:inset 0 0 8px red}.l.planned{background-color:#afa}.tooltip{white-space:pre-wrap;color:#fff;pointer-events:none;background-color:#000000b3;border-radius:6px;padding:6px;font-size:12px;position:absolute;top:0;left:0} -/*# sourceMappingURL=index.928c49fb.css.map */ diff --git a/docs/index.9c03c1ec.js b/docs/index.9c03c1ec.js new file mode 100644 index 0000000..13d50e7 --- /dev/null +++ b/docs/index.9c03c1ec.js @@ -0,0 +1,10 @@ +let e;function a(e){return e&&e.__esModule?e.default:e}const l=/^on([a-z]+?)(capture)?$/i,t=/^children|value|checked$/;function n(e,a,n,r,o,i){let s;if(!(n===r||t.test(a))){if("ref"===a){n?.(null),B(i,()=>r?.(e));return}if(s=a.match(l)){let[,a,l]=s;a=a.toLowerCase();let t=!!l;n&&e.removeEventListener(a,n,t),r&&e.addEventListener(a,r,t);return}if(!o&&a in e){e[a]=r;return}null==r?e.removeAttribute(a):e.setAttribute(a,r)}}function r(e,a,l){if(a in l){let t=l[a];void 0!==t&&t!==e[a]&&(e[a]=t??"")}}function o(e){return"string"==typeof e?.type}function i(e){return"function"==typeof e?.type}const{isArray:s}=Array;function c(e){return s(e)}function m(e){return null==e||"object"!=typeof e}const u="http://www.w3.org/2000/svg",{min:g,max:d}=Math;class h{cleanup(){}remove(){let e=new Range;return e.setStartBefore(this.start()),e.setEndAfter(this.end()),e.extractContents()}unmount(){this.cleanup(),this.remove()}moveTo(e){let a=this.start().parentElement;a.insertBefore(this.remove(),e)}}class p extends h{vNode;static guard=i;parentLayer;layerRNode;depth;alive=!0;pending=!0;cleanupQueue;opc;context;start(){return this.layerRNode.start()}end(){return this.layerRNode.end()}constructor(e,a,l,t){let n;super(),this.vNode=e,this.parentLayer=t,this.depth=(t?.depth??-1)+1;let{type:r,props:o}=e,i=r(o,this);"function"==typeof i?(this.opc=i,n=i(o,this)):(this.opc=r,n=i),this.layerRNode=new f(void 0,a,l),this.finishLayerUpdate(n)}runLayerUpdate(e){this.alive&&(this.pending||e)&&this.finishLayerUpdate((0,this.opc)(this.vNode.props,this))}finishLayerUpdate(e){this.pending=!1,this.layerRNode=k(this.layerRNode,e,this)}scheduleLayerUpdate(){this.alive&&!this.pending&&(this.pending=!0,L(this))}cleanup(){this.alive=!1;let{cleanupQueue:e}=this;if(e)for(let a=e.length-1;a>=0;a--)(0,e[a])();this.layerRNode.cleanup()}update(e){if(this.vNode.type!==e.type)return!1;let a=this.vNode.props;return this.vNode=e,a!==e.props&&this.runLayerUpdate(!0),!0}}function y(e){return null==e||"boolean"==typeof e?"":String(e)}class f extends h{vNode;static guard=m;text;start(){return this.text}end(){return this.text}constructor(e,a,l){super(),this.vNode=e;let t=new Text(y(e));a.insertBefore(t,l),this.text=t}update(e){return this.text.nodeValue=y(e),this.vNode=e,!0}}const b=[class extends h{vNode;static guard=o;children;element;svg;start(){return this.element}end(){return this.element}constructor(e,a,l,t){super(),this.vNode=e;let{type:o}=e,i="svg"===o||a.namespaceURI===u&&"foreignObject"!==a.tagName,s=i?document.createElementNS(u,o):document.createElement(o);this.svg=i,this.element=s;let{props:c}=e;for(let e in c)n(s,e,void 0,c[e],this.svg,t.depth+1);let{children:m}=c;void 0!==m&&(this.children=A(m,s,null,t)),r(s,"value",c),r(s,"checked",c),a.insertBefore(s,l)}cleanup(){this.children?.cleanup(),this.vNode.props.ref?.(null)}update(e,a){if(this.vNode.type!==e.type)return!1;let l=this.vNode.props,t=e.props,{element:o,svg:i}=this,s=a.depth+1;for(let e in l)e in t||n(o,e,l[e],void 0,i,s);for(let e in t)n(o,e,l[e],t[e],i,s);this.vNode=e;let{children:c}=t;return this.children&&void 0!==c?this.children=k(this.children,c,a):this.children?(this.children.unmount(),this.children=void 0):void 0!==c&&(this.children=A(c,o,null,a)),r(o,"value",t),r(o,"checked",t),!0}},p,class extends h{vNode;static guard=c;children;start(){return this.children[0].start()}end(){return this.children.at(-1).end()}constructor(e,a,l,t){super(),this.vNode=e;let n=e.length>0?e:[void 0];this.children=n.map(e=>A(e,a,l,t))}cleanup(){for(let e of this.children)e.cleanup()}update(e,a){let l,t,n,r;let{children:o}=this,i=this.vNode;{let e=this.end();l=e.parentElement,t=e.nextSibling}let s=i.length,c=e.length,m=g(s,c);function u(e,t,i,s,c){if(void 0!==t){let m=r?.get(t);if(m){r.delete(t),m.moveTo(e),o[s]=k(m,i,a);return}if(c){let a=new Text;l.insertBefore(a,e),(n??=[]).push({adjacent:a,key:t,vNode:i,index:s});return}}o[s]=A(i,l,e,a)}function h(e,a){void 0!==a?(r??=new Map).set(a,e):e.unmount()}m=d(m,1),c=d(c,1);let p=0;for(;pe.depth-a.depth,v=(e,a)=>a.depth-e.depth;let S=[];function T(){for(;S.length;){let a=S;for(let l of(S=[],a.sort(w),e=[],a))l.runLayerUpdate(!1);for(;e.length;){let a=e;for(let{cb:l}of(e=[],a.sort(v),a))l()}e=void 0}}const M=({rootNode:e})=>e();async function L(e){S.push(e),await 0,T()}function B(a,l){e?.push({depth:a,cb:l})??l()}function H(e,a){e.alive?(e.cleanupQueue??=[]).push(a):a()}function x(e){e.scheduleLayerUpdate()}const P={},G=Symbol("vdomk.Fragment");function C(e,a,...l){let t=a?.key;if(e===G){let e=l.length>0?l:a?.children??[];return e.key=t,e}return l.length>0&&(a={...a,children:l}),{type:e,key:t,props:a??P}}var D,R={};R='';var E={};E='';var I={};I='';var N={};N='';var j={};j='';var W={};W='';var z={};z='';var F={};F='';var O={};O='';var V={};V='';var K={};K='';var Q={};Q='';var Z={};Z='';var U={};U='';const q=e=>URL.createObjectURL(new Blob([e],{type:"image/svg+xml"})),$=q(a(R)),J=q(a(E)),Y=q(a(I)),_=q(a(N)),X=q(a(j)),ee=q(a(W)),ea=q(a(z)),el=q(a(F)),et=q(a(O)),en=q(a(V)),er=q(a(K)),eo=q(a(Q)),ei=q(a(Z)),es=q(a(U));let ec=0;const em=[];em.push({fullName:"Essentials",cost:1,text:"Attack\nItem",limited:!1,sortOrder:ec++}),em.push({fullName:"Second Board",cost:30,text:"Second Board",limited:!1,sortOrder:ec++});{let e="",a=1,l=l=>{e=l,a=1},t=(l,...t)=>{em.push({fullName:e+" "+a,cost:l,text:t.join("\n"),limited:!1,grants:{group:e,what:t},sortOrder:ec++}),a++};l("White Magick"),t(15,"Cure","Blindna"),t(20,"Vox","Poisona"),t(25,"Protect","Shell"),t(30,"Cura","Raise"),t(40,"Dispel","Stona"),t(50,"Curaga","Regen"),t(60,"Cleanse","Esuna"),t(70,"Confuse","Faith"),t(80,"Bravery","Curaja"),t(90,"Dispelga","Arise"),t(100,"Holy","Esunaga"),t(110,"Protectga","Shellga"),t(155,"Renew"),l("Black Magick"),t(15,"Fire","Thunder"),t(20,"Blizzard","Blind"),t(25,"Aqua","Silence"),t(30,"Aero","Sleep"),t(40,"Fira","Poison"),t(50,"Thundara","Blizzara"),t(60,"Bio","Blindga"),t(70,"Aeroga","Silencega"),t(90,"Firaga","Thundaga"),t(90,"Blizzaga","Sleepga"),t(100,"Shock","Toxify"),t(120,"Scourge","Flare"),t(165,"Scathe"),l("Time Magick"),t(20,"Slow","Immobilize"),t(30,"Reflect","Disable"),t(40,"Vanish","Balance"),t(50,"Gravity","Haste"),t(60,"Stop","Bleed"),t(70,"Break","Doom"),t(80,"Float","Berserk"),t(90,"Vanishga","Warp"),t(100,"Reflectga","Slowga"),t(125,"Graviga","Hastega"),l("Green Magick"),t(40,"Decoy","Oil"),t(50,"Drain","Reverse"),t(90,"Bubble","Syphon"),l("Arcane Magick"),t(40,"Dark","Darkra"),t(50,"Death","Darkga"),t(110,"Ardor")}{let e=(e,a,l)=>{em.push({fullName:a,cost:e,text:l,limited:!1,grants:{group:"Technicks",what:[a]},sortOrder:ec++})};e(35,"1000 Needles","Deal 1,000 damage to one foe."),e(40,"Achilles","Render one foe vulnerable to an additional element."),e(30,"Bonecrusher","Consume HP to reduce the HP of one foe to 0."),e(50,"Wither","Lower one foe's strength."),e(50,"Expose","Lower one foe's defense."),e(50,"Shear","Lower one foe's magick resist."),e(50,"Addle","Lower one foe's magick power."),e(30,"Charge","Restore user's MP. If the technick fails, MP is reduced to 0."),e(30,"Charm","Cause one foe to confuse friend with foe."),e(35,"Souleater","Consume HP to deal damage to one foe."),e(20,"First Aid","Restore HP to one HP Critical ally."),e(30,"Gil Toss","Throw gil, damaging all foes in range."),e(50,"Horology","Deal damage based on a factor of time to all foes in range."),e(25,"Libra","Reveal more detailed target information."),e(30,"Infuse","Fully consume user's MP, changing one ally's HP to 10 times that amount."),e(40,"Numerology","Deal damage that increases with successive hits."),e(30,"Poach","Capture HP Critical foes to obtain loot."),e(70,"Shades of Black","Cast a random black magick on one foe."),e(40,"Revive","Fully consume user's HP, reviving and fully restoring HP of one KO'd ally."),e(40,"Sight Unseeing","Unleash an attack only available when blind."),e(40,"Stamp","Inflict one foe with any status effects on the user."),e(20,"Steal","Steal from one foe."),e(50,"Traveler","Deal damage based on total steps taken to all foes in range."),e(80,"Telekinesis","Deal ranged damage with melee weapons.")}{let e=(e,a,...l)=>{let t=1;for(let n of l)em.push({fullName:e+" "+t,cost:n,text:a,limited:!1,grants:{group:e,what:1},sortOrder:ec++}),t++};e("Battle Lore","Increase physical attack damage.",30,30,30,30,50,50,50,50,70,70,70,70,100,100,100,100),e("Magick Lore","Increase Magick potency.",30,30,30,30,50,50,50,50,70,70,70,70,100,100,100,100),e("Gambit Slot","Adds an additional gambit slot",15,20,25,30,35,40,45,50,70,100)}{let e=(e,a)=>{em.push({fullName:`+${e} HP`,cost:a,text:`Increase max HP by ${e}.`,limited:!1,grants:{group:"HP",what:e},sortOrder:ec++})};e(30,20),e(70,30),e(110,40),e(150,50),e(190,60),e(230,70),e(270,80),e(310,90),e(350,100),e(390,115),e(435,130),e(500,220)}{let e=1;for(let a of[50,75,100,125])em.push({fullName:"Quickening "+e,cost:a,text:"Unleash a devastating attack.",limited:!0,grants:{group:"Quickening",what:1},image:es,sortOrder:ec++}),e++}{let e=(e,a,l,t)=>{em.push({fullName:a,cost:e,text:`Summon ${a} ${l}`,limited:!0,grants:{group:"Esper",what:[a]},image:t,sortOrder:ec++})};e(20,"Belias","the Gigas",$),e(30,"Mateus","the Corrupt",eo),e(35,"Adrammelech","the Wroth",en),e(30,"Zalera","the Death Seraph",Y),e(50,"C\xfachulainn","the Impure",el),e(65,"Zeromus","The Condemner",_),e(65,"Exodus","the Judge-Sal",ea),e(50,"Shemhazai","the Whisperer",et),e(50,"Hashmal","Bringer of Order",X),e(100,"Famfrit","the Darkening Cloud",er),e(100,"Chaos","Walker of the Wheel",J),e(115,"Ultima","High Seraph",ee),e(200,"Zodiark","Keeper of Precepts",ei)}{let e=(e,a,l)=>{em.push({fullName:a,cost:e,text:l,limited:!1,grants:{group:"Passive",what:[a]},sortOrder:ec++})};e(70,"Focus","Increases strength when HP is full."),e(70,"Serenity","Increases magick when HP is full."),e(65,"Adrenaline","Increases strength when HP Critical."),e(65,"Spellbreaker","Increases magick power when HP Critical."),e(70,"Last Stand","Increases defense when HP Critical."),e(90,"Brawler","Increases attack power when fighting empty-handed."),e(25,"Shield Block 1","Increases chance to block with a shield."),e(45,"Shield Block 2","Increases chance to block with a shield."),e(75,"Shield Block 3","Increases chance to block with a shield."),e(30,"Inquisitor","Gain MP after dealing damage."),e(30,"Warmage","Gain MP after dealing magick damage."),e(30,"Headsman","Gain MP after defeating a foe."),e(30,"Martyr","Gain MP after taking damage."),e(30,"Swiftness 1","Reduces action time by 10%."),e(50,"Swiftness 2","Reduces action time by 10%."),e(80,"Swiftness 3","Reduces action time by 10%."),e(30,"Channeling 1","Reduces MP cost of Spells"),e(50,"Channeling 2","Reduces MP cost of Spells"),e(80,"Channeling 3","Reduces MP cost of Spells"),e(30,"Spellbound","Increases duration of status effects."),e(20,"Potion Lore 1","Potions restore more HP."),e(35,"Potion Lore 2","Potions restore more HP."),e(70,"Potion Lore 3","Potions restore more HP."),e(20,"Ether Lore 1","Ethers restore more MP."),e(35,"Ether Lore 2","Ethers restore more MP."),e(70,"Ether Lore 3","Ethers restore more MP."),e(20,"Remedy Lore 1","Sleep, Sap, Immobilize, and Disable"),e(30,"Remedy Lore 2","Petrify, Confuse, and Oil"),e(70,"Remedy Lore 3","Stop, Doom, and Disease."),e(30,"Phoenix Lore 1","Phoenix Down restores more HP."),e(50,"Phoenix Lore 2","Phoenix Down restores more HP."),e(90,"Phoenix Lore 3","Phoenix Down restores more HP.")}{let e=(e,a,l,...t)=>{em.push({fullName:l,cost:e,text:t.join("\n"),limited:!1,grants:{group:a,what:t},sortOrder:ec++})};e(5,"Accessories","Accessories 1","Orrachea Armlet"),e(20,"Accessories","Accessories 2","Bangle","Firefly"),e(25,"Accessories","Accessories 3","Diamond Armlet","Argyle Armlet"),e(35,"Accessories","Accessories 4","Battle Harness","Steel Gorget"),e(35,"Accessories","Accessories 5","Tourmaline Ring","Embroidered Tippet"),e(35,"Accessories","Accessories 6","Golden Amulet","Leather Gorget"),e(40,"Accessories","Accessories 7","Rose Corsage","Turtleshell Choker"),e(45,"Accessories","Accessories 8","Thief's Cuffs","Gauntlets"),e(30,"Accessories","Accessories 9","Amber Armlet","Black Belt"),e(40,"Accessories","Accessories 10","Jade Collar","Nishijin Belt"),e(45,"Accessories","Accessories 11","Pheasant Netsuke","Blazer Gloves"),e(60,"Accessories","Accessories 12","Gillie Boots","Steel Poleyns"),e(60,"Accessories","Accessories 13","Berserker Bracers","Magick Gloves"),e(70,"Accessories","Accessories 14","Sage's Ring","Agate Ring"),e(70,"Accessories","Accessories 15","Ruby Ring","Bowline Sash"),e(70,"Accessories","Accessories 16","Cameo Belt","Cat-ear Hood"),e(80,"Accessories","Accessories 17","Bubble Belt","Fuzzy Miter"),e(80,"Accessories","Accessories 18","Sash","Power Armlet"),e(100,"Accessories","Accessories 19","Indigo Pendant","Winged Boots"),e(115,"Accessories","Accessories 20","Opal Ring","Hermes Sandals"),e(130,"Accessories","Accessories 21","Quasimodo Boots","Nihopalaoa"),e(160,"Accessories","Accessories 22","Germinas Boots","Ring of Renewal"),e(215,"Accessories","Ribbon","Ribbon"),e(15,"Shields","Shields 1","Leather Shield","Buckler"),e(20,"Shields","Shields 2","Bronze Shield","Round Shield"),e(25,"Shields","Shields 3","Golden Shield","Ice Shield","Flame Shield"),e(30,"Shields","Shields 4","Diamond Shield","Platinum Shield","Dragon Shield"),e(35,"Shields","Shields 5","Crystal Shield","Kaiser Shield"),e(40,"Shields","Shields 6","Aegis Shield","Demon Shield"),e(65,"Shields","Shields 7","Venetian Shield"),e(90,"Shields","Shell Shield","Shell Shield"),e(100,"Shields","Ensanguined Shield","Ensanguined Shield"),e(235,"Shields","Zodiac Escutcheon","Zodiac Escutcheon"),e(10,"Light Armor","Light Armor 1","Leather Cap","Leather Clothing"),e(15,"Light Armor","Light Armor 2","Headgear","Headguard","Chromed Leathers","Leather Breastplate"),e(20,"Light Armor","Light Armor 3","Leather Headgear","Horned Hat","Bronze Chestplate","Ringmail"),e(25,"Light Armor","Light Armor 4","Balaclava","Soldier's Cap","Windbreaker","Heavy Coat"),e(30,"Light Armor","Light Armor 5","Green Beret","Red Cap","Survival Vest","Brigandine"),e(40,"Light Armor","Light Armor 6","Headband","Pirate Hat","Jujitsu Gi","Viking Coat"),e(50,"Light Armor","Light Armor 7","Goggle Mask","Adamant Hat","Metal Jerkin","Adamant Vest"),e(60,"Light Armor","Light Armor 8","Officer's Hat","Chakra Band","Barrel Coat","Power Vest"),e(70,"Light Armor","Light Armor 9","Thief's Cap","Gigas Hat","Ninja Gear","Gigas Chestplate"),e(75,"Light Armor","Light Armor 10","Chaperon","Minerva Bustier"),e(80,"Light Armor","Light Armor 11","Crown of Laurels","Rubber Suit"),e(90,"Light Armor","Light Armor 12","Renewing Morion","Mirage Vest"),e(110,"Light Armor","Light Armor 13","Dueling Mask","Brave Suit"),e(25,"Heavy Armor","Heavy Armor 1","Leather Helm","Bronze Helm","Leather Armor","Bronze Armor"),e(30,"Heavy Armor","Heavy Armor 2","Sallet","Iron Helm","Scale Armor","Iron Armor"),e(35,"Heavy Armor","Heavy Armor 3","Barbut","Winged Helm","Linen Cuirass","Chainmail"),e(40,"Heavy Armor","Heavy Armor 4","Golden Helm","Burgonet","Golden Armor","Shielded Armor"),e(50,"Heavy Armor","Heavy Armor 5","Close Helmet","Bone Helm","Demon Mail","Bone Mail"),e(55,"Heavy Armor","Heavy Armor 6","Diamond Helm","Diamond Armor"),e(60,"Heavy Armor","Heavy Armor 7","Steel Mask","Mirror Mail"),e(65,"Heavy Armor","Heavy Armor 8","Platinum Helm","Platinum Armor"),e(70,"Heavy Armor","Heavy Armor 9","Giant's Helmet","Carabineer Mail"),e(80,"Heavy Armor","Heavy Armor 10","Dragon Helm","Dragon Mail"),e(90,"Heavy Armor","Heavy Armor 11","Magepower Shishak","Maximillian"),e(110,"Heavy Armor","Heavy Armor 12","Grand Helm","Grand Armor"),e(10,"Mystic Armor","Mystic Armor 1","Cotton Cap","Magick Curch","Cotton Shirt","Light Woven Shirt"),e(15,"Mystic Armor","Mystic Armor 2","Pointy Hat","Topkapi Hat","Silken Shirt","Kilimweave Shirt"),e(20,"Mystic Armor","Mystic Armor 3","Calot Hat","Wizard's Hat","Shepherd's Bolero","Wizard's Robes"),e(25,"Mystic Armor","Mystic Armor 4","Lambent Hat","Feathered Cap","Chanter's Djellaba","Traveler's Vestment"),e(30,"Mystic Armor","Mystic Armor 5","Mage's Hat","Lamia's Tiara","Mage's Habit","Enchanter's Habit"),e(40,"Mystic Armor","Mystic Armor 6","Sorcerer's Hat","Black Cowl","Sorcerer's Habit","Black Garb"),e(50,"Mystic Armor","Mystic Armor 7","Astrakhan Hat","Gaia Hat","Carmagnole","Maduin Gear"),e(60,"Mystic Armor","Mystic Armor 8","Hypnocrown","Gold Hairpin","Jade Gown","Gaia Gear"),e(70,"Mystic Armor","Mystic Armor 9","Celebrant's Miter","Cleric's Robes"),e(75,"Mystic Armor","Mystic Armor 10","Black Mask","Black Robes"),e(80,"Mystic Armor","Mystic Armor 11","White Mask","White Robes"),e(90,"Mystic Armor","Mystic Armor 12","Golden Skullcap","Glimmering Robes"),e(110,"Mystic Armor","Mystic Armor 13","Circlet","Lordly Robes"),e(190,"Genji Armor","Genji Armor","Genji Shield","Genji Helm","Genji Armor","Genji Gloves"),e(15,"Swords","Swords 1","Broadsword"),e(25,"Swords","Swords 2","Longsword","Iron Sword"),e(35,"Swords","Swords 3","Zwill Blade","Ancient Sword"),e(50,"Swords","Swords 4","Lohengrin","Flametongue"),e(55,"Swords","Swords 5","Demonsbane","Icebrand"),e(60,"Swords","Swords 6","Platinum Sword","Bastard Sword"),e(70,"Swords","Swords 7","Diamond Sword","Runeblade"),e(80,"Swords","Swords 8","Deathbringer","Stoneblade"),e(90,"Swords","Swords 9","Durandal","Simha"),e(50,"Swords","Blood Sword","Blood Sword"),e(80,"Swords","Karkata","Karkata"),e(20,"Bows","Bows 1","Shortbow"),e(30,"Bows","Bows 2","Silver Bow","Aevis Killer"),e(35,"Bows","Bows 3","Longbow","Killer Bow"),e(45,"Bows","Bows 4","Elfin Bow","Loxley Bow"),e(60,"Bows","Bows 5","Giant Stonebow","Burning Bow"),e(70,"Bows","Bows 6","Traitor's Bow","Yoichi Bow"),e(90,"Bows","Bows 7","Perseus Bow","Artemis Bow"),e(130,"Bows","Sagittarius","Sagittarius"),e(200,"Bows","Dhanusha","Dhanusha"),e(20,"Spears","Spears 1","Javelin","Spear"),e(25,"Spears","Spears 2","Partisan","Heavy Lance"),e(35,"Spears","Spears 3","Storm Spear","Obelisk"),e(60,"Spears","Spears 4","Halberd","Trident"),e(40,"Spears","Spears 5","Holy Lance","Gungnir"),e(70,"Spears","Dragon Whisker","Dragon Whisker"),e(100,"Spears","Vrsabha","Vrsabha"),e(240,"Spears","Zodiac Spear","Zodiac Spear"),e(20,"Axes & Hammers","Axes & Hammers 1","Handaxe"),e(25,"Axes & Hammers","Axes & Hammers 2","Iron Hammer","Broadaxe"),e(35,"Axes & Hammers","Axes & Hammers 3","War Hammer","Slasher"),e(50,"Axes & Hammers","Axes & Hammers 4","Sledgehammer","Hammerhead"),e(60,"Axes & Hammers","Axes & Hammers 5","Francisca","Morning Star"),e(65,"Axes & Hammers","Axes & Hammers 6","Greataxe","Golden Axe"),e(85,"Axes & Hammers","Axes & Hammers 7","Scorpion Tail"),e(175,"Axes & Hammers","Vrscika","Vrscika"),e(35,"Katana","Katana 1","Kotetsu","Osafune"),e(50,"Katana","Katana 2","Kogarasumaru","Magoroku"),e(70,"Katana","Katana 3","Murasame","Kiku-ichimonji"),e(90,"Katana","Katana 4","Yakei","Ame-no-Murakumo"),e(100,"Katana","Katana 5","Muramasa"),e(130,"Katana","Masamune","Masamune"),e(200,"Katana","Kumbha","Kumbha"),e(50,"Greatswords","Greatswords 1","Claymore"),e(70,"Greatswords","Greatswords 2","Defender","Save the Queen"),e(80,"Greatswords","Greatswords 3","Ultima Blade"),e(100,"Greatswords","Greatswords 4","Ragnarok"),e(135,"Greatswords","Excalibur","Excalibur"),e(150,"Greatswords","Excalipur","Excalipur"),e(225,"Greatswords","Tournesol","Tournesol"),e(20,"Rods","Rods 1","Rod","Serpent Rod"),e(30,"Rods","Rods 2","Healing Rod","Gaia Rod"),e(40,"Rods","Rods 3","Power Rod","Empyrean Rod"),e(50,"Rods","Rods 4","Holy Rod"),e(130,"Rods","Rod of Faith","Rod of Faith"),e(15,"Staves","Staves 1","Oak Staff"),e(25,"Staves","Staves 2","Cherry Staff","Wizard's Staff"),e(30,"Staves","Staves 3","Flame Staff","Storm Staff"),e(40,"Staves","Staves 4","Glacial Staff","Golden Staff"),e(65,"Staves","Staves 5","Judicer's Staff","Cloud Staff"),e(115,"Staves","Staff of the Magi","Staff of the Magi"),e(30,"Maces","Maces 1","Mace","Bronze Mace"),e(40,"Maces","Maces 2","Bhuj","Miter"),e(60,"Maces","Maces 3","Thorned Mace","Chaos Mace"),e(65,"Maces","Maces 4","Doom Mace","Zeus Mace"),e(50,"Maces","Maces 5","Grand Mace","Bone of Byblos"),e(40,"Measures","Measures 1","Gilt Measure"),e(50,"Measures","Measures 2","Arc Scale","Multiscale"),e(70,"Measures","Measures 3","Cross Scale","Caliper"),e(100,"Measures","Measures 4","Euclid's Sextant"),e(15,"Daggers","Daggers 1","Dagger"),e(20,"Daggers","Daggers 2","Mage Masher","Assassin's Dagger"),e(35,"Daggers","Daggers 3","Chopper","Main Gauche"),e(45,"Daggers","Daggers 4","Gladius","Avenger"),e(60,"Daggers","Daggers 5","Orichalcum Dirk","Platinum Dagger"),e(80,"Daggers","Daggers 6","Zwill Crossblade"),e(220,"Daggers","Shikari Nagasa & Mina","Shikari Nagasa","Mina"),e(30,"Guns","Guns 1","Altair"),e(50,"Guns","Guns 2","Capella","Vega"),e(60,"Guns","Guns 3","Sirius","Betelgeuse"),e(70,"Guns","Guns 4","Ras Algethi","Aldebaran"),e(90,"Guns","Guns 5","Spica","Antares"),e(100,"Guns","Guns 6","Arcturus","Fomalhaut"),e(190,"Guns","Mithuna","Mithuna"),e(20,"Poles","Poles 1","Oaken Pole"),e(30,"Poles","Poles 2","Battle Bamboo","Cypress Pole"),e(35,"Poles","Poles 3","Musk Stick","Iron Pole"),e(40,"Poles","Poles 4","Six-fluted Pole","Gokuu Pole"),e(50,"Poles","Poles 5","Zephyr Pole","Ivory Pole"),e(60,"Poles","Poles 6","Sweep","Eight-fluted Pole"),e(90,"Poles","Whale Whisker","Whale Whisker"),e(180,"Poles","Kanya","Kanya"),e(25,"Crossbows","Crossbows 1","Bowgun","Crossbow"),e(40,"Crossbows","Crossbows 2","Paramina Crossbow","Recurve Crossbow"),e(60,"Crossbows","Crossbows 3","Hunting Crossbow","Penetrator Crossbow"),e(115,"Crossbows","Crossbows 4","Gastrophetes","Tula"),e(35,"Hand-bombs","Hand-bombs 1","Hornito"),e(55,"Hand-bombs","Hand-bombs 2","Fumarole","Tumulus"),e(75,"Hand-bombs","Hand-bombs 3","Caldera","Volcano"),e(105,"Hand-bombs","Hand-bombs 4","Makara"),e(100,"Ninja Swords","Ninja Swords 1","Ashura","Sakura-saezuri","Kagenui","Orochi"),e(120,"Ninja Swords","Ninja Swords 2","Iga Blade"),e(120,"Ninja Swords","Ninja Swords 3","Koga Blade"),e(180,"Ninja Swords","Yagyu Darkblade & Mesa","Yagyu Darkblade","Mesa")}const eu=new Map;for(const e of em){if(eu.has(e.fullName))throw Error("Duplicate license name "+e.fullName);eu.set(e.fullName,e)}function eg(e){let a=eu.get(e);if(!a)throw Error("Internal error: Unknown license "+e);return a}const ed=[];{let e;for(let a of em)a.grants&&(e&&e.name===a.grants.group||(e={name:a.grants.group,contents:[]},ed.push(e)),e.contents.push(a))}const eh=ed.find(e=>"Quickening"===e.name).contents,ep=ed.find(e=>"Esper"===e.name).contents,ey=[{name:"Vaan",innateLicenses:["Essentials","Steal","Daggers 1","Light Armor 1"].map(eg)},{name:"Balthier",innateLicenses:["Essentials","Steal","First Aid","Guns 1","Light Armor 2"].map(eg)},{name:"Fran",innateLicenses:["Essentials","White Magick 1","Black Magick 1","Steal","Bows 1","Light Armor 2"].map(eg)},{name:"Basch",innateLicenses:["Essentials","Libra","Swords 2","Shields 1","Heavy Armor 1"].map(eg)},{name:"Ashe",innateLicenses:["Essentials","White Magick 1","Swords 2","Shields 1","Heavy Armor 1","Accessories 2"].map(eg)},{name:"Penelo",innateLicenses:["Essentials","White Magick 1","First Aid","Daggers 1","Mystic Armor 1"].map(eg)}],ef=[{name:"White Mage",image:$,imageAlt:"Aries",text:"Mages who wield healing and support magicks.",rawBoardData:[[null,null,null,null,null,"Libra",null,null,null,null,null,"+230 HP"],[null,null,null,null,null,"C\xfachulainn",null,null,null,null,null,"Shemhazai",null,"Quickening 4"],[null,null,"Accessories 22","Accessories 20","Accessories 18","Accessories 16","Accessories 14",null,"+190 HP",null,"Accessories 13","Accessories 15","Accessories 17","Battle Lore 1","Ribbon"],["+270 HP","Zeromus","Mystic Armor 13","Magick Lore 13","Stamp","Inquisitor","Accessories 12",null,"Quickening 2",null,"Accessories 11","Spellbreaker","Accessories 19","Accessories 21","Rod of Faith","Chaos","+310 HP"],[null,null,"Mystic Armor 12","Serenity","Ether Lore 2","Magick Lore 5","Accessories 10","Accessories 8","Accessories 6","Accessories 7","Accessories 9","Magick Lore 6","Headsman","Magick Lore 9","+110 HP",null,"Greatswords 2"],[null,null,"Mystic Armor 11","Mystic Armor 10","Mystic Armor 9","Mystic Armor 8","Mystic Armor 7","Mystic Armor 6","Accessories 5","Charge","Rods 3","Channeling 2","Rods 4","Channeling 3","Battle Lore 2"],[null,null,"Magick Lore 14","Swiftness 2","Magick Lore 10",null,null,"Mystic Armor 5","Accessories 4","Ether Lore 1","Second Board",null,"Battle Lore 4","Magick Lore 11","Magick Lore 15","Ultima"],[null,"Zodiark","White Magick 13","Magick Lore 12","+70 HP",null,"Mateus","Mystic Armor 4","Accessories 3","Rods 2","Belias",null,"Warmage","Swiftness 1","Achilles"],[null,"Greatswords 1",null,null,"Famfrit",null,null,"Mystic Armor 3","Accessories 2","Battle Lore 3",null,null,"Exodus"],[null,null,null,"Numerology","Daggers 5",null,null,"Mystic Armor 2","Accessories 1","Rods 1",null,null,"Battle Lore 6"],[null,null,null,null,null,null,null,"Mystic Armor 1","Essentials","Gambit Slot 1"],[null,null,null,null,null,null,null,"Gambit Slot 2","White Magick 1","Magick Lore 1"],[null,null,null,null,"+150 HP","Quickening 1","Gambit Slot 4","Martyr","White Magick 2","Gambit Slot 3","Magick Lore 2"],[null,null,null,null,null,null,"Magick Lore 3","+30 HP","White Magick 3","Channeling 1","Gambit Slot 5"],[null,null,null,"Battle Lore 7","Adrammelech","Magick Lore 7","Gambit Slot 7","Magick Lore 4","White Magick 4","Magick Lore 8","Green Magick 3","Gambit Slot 6"],[null,null,null,"Souleater",null,"Gambit Slot 10","Gambit Slot 9","Green Magick 1","White Magick 5","Green Magick 2","Gambit Slot 8","Spellbound","Zalera"],[null,null,null,null,null,"White Magick 12","White Magick 10","White Magick 8","White Magick 6","White Magick 7","White Magick 9","White Magick 11"],[null,null,null,null,null,null,null,"Hashmal",null,null,"Quickening 3"],[null,null,null,null,null,null,null,null,null,null,"Battle Lore 5"]]},{name:"Uhlan",image:J,imageAlt:"Taurus",text:"Warriors who wield spears to pierce enemy armor.",rawBoardData:[[null,null,"Zeromus",null,null,null,null,null,null,"Quickening 4"],[null,null,"Heavy Armor 12","Poach","Phoenix Lore 2",null,"Black Magick 6",null,"Adrenaline","Accessories 21","Ribbon"],[null,null,"Heavy Armor 11","Heavy Armor 10","Swiftness 1",null,"Black Magick 5","Quickening 3","Swiftness 2","Accessories 19","Accessories 22","Zodiark"],[null,null,null,"Heavy Armor 9","Shades of Black",null,null,null,"+350 HP","Accessories 17"],[null,null,null,"Heavy Armor 8","Headsman","Shemhazai",null,null,"+310 HP","Accessories 15","Ultima","Expose"],[null,null,null,"Heavy Armor 7","Infuse",null,null,"Exodus","+270 HP","Accessories 13"],["Battle Lore 13","Adrammelech",null,"Heavy Armor 6","Phoenix Lore 1",null,null,null,"+230 HP","Accessories 11"],[null,"Charm","Heavy Armor 4","Heavy Armor 5","+30 HP","+70 HP","+110 HP","+150 HP","+190 HP","Focus","Accessories 12","Accessories 14"],["Quickening 1","Remedy Lore 1","Heavy Armor 3","Accessories 4","Accessories 5","Accessories 6","Accessories 7","Accessories 8","Accessories 9","Accessories 10","Remedy Lore 2","Accessories 16","Chaos","Black Magick 7"],[null,"Battle Lore 4","Heavy Armor 2","Accessories 3",null,"Belias","Second Board",null,null,"Last Stand","Battle Lore 6","Accessories 18",null,"Black Magick 8"],[null,"Martyr","Heavy Armor 1","Accessories 2",null,null,null,null,null,"Battle Lore 1","Battle Lore 8","Accessories 20"],[null,"Spears 1","Essentials","Accessories 1",null,null,null,"Bonecrusher","Hashmal","Achilles","Battle Lore 12","Magick Lore 1"],[null,"Spears 2","Battle Lore 3","Gambit Slot 1",null,null,null,null,null,"Battle Lore 10","Battle Lore 9","Magick Lore 2","Famfrit","Potion Lore 3"],[null,"Spears 3","First Aid","Gambit Slot 2","Gambit Slot 3","Gambit Slot 4","Quickening 2","Gambit Slot 8","Gambit Slot 9","Gambit Slot 10","Battle Lore 11","Magick Lore 4"],[null,"Spears 5","Spears 4","Inquisitor","Potion Lore 1","Gambit Slot 5","Gambit Slot 6","Gambit Slot 7","Battle Lore 2","Battle Lore 7","Battle Lore 15","Magick Lore 3"],[null,null,"Dragon Whisker","Vrsabha","Zodiac Spear","Revive","Zalera","Potion Lore 2","Battle Lore 5","Spellbound","Souleater"],[null,"Magick Lore 7","Mateus",null,null,null,null,null,null,null,"C\xfachulainn","Wither"],[null,null,"Magick Lore 8"]]},{name:"Machinist",image:Y,imageAlt:"Gemini",text:"Warriors who snipe their foes with deadly precision.",rawBoardData:[[null,"Green Magick 1",null,"Quickening 2",null,null,null,null,null,null,null,null,null,"+350 HP","Chaos"],[null,"Exodus","Gambit Slot 10","Gambit Slot 7",null,"Belias","Second Board",null,null,null,null,null,null,null,"Battle Lore 4","Mithuna"],[null,null,"Gambit Slot 9","Gambit Slot 5","Gambit Slot 4","Gambit Slot 3","Gambit Slot 2",null,null,"Adrammelech",null,"Poach","Magick Lore 1","Magick Lore 2","Battle Lore 3","Battle Lore 2"],[null,null,"Gambit Slot 8","Gambit Slot 6","Martyr","Accessories 2","Accessories 1","Light Armor 1","Light Armor 2","Light Armor 3","Potion Lore 1","Light Armor 4","Light Armor 5","Guns 5","Magick Lore 4","Guns 6"],[null,null,null,"Mateus",null,"Accessories 3","Essentials","Guns 1","Guns 2","Inquisitor","Guns 3","Guns 4","Headsman"],[null,null,null,null,null,"Accessories 4","Gambit Slot 1",null,null,"Quickening 1",null,"Potion Lore 2","Light Armor 6"],[null,null,null,null,null,"Accessories 5","Measures 1",null,null,null,null,"Achilles","Light Armor 7","Quickening 3"],[null,null,null,null,"Zalera","Accessories 6","Libra",null,null,null,null,"Ether Lore 1","Light Armor 8"],[null,null,null,null,null,"Accessories 7","Measures 2",null,null,null,null,"Gil Toss","Last Stand",null,"Time Magick 9","Time Magick 10"],[null,null,null,null,null,"Accessories 8","Steal","Hashmal",null,null,null,"Potion Lore 3","Light Armor 9","Famfrit","Time Magick 8"],[null,null,null,null,null,"Accessories 9","Measures 3",null,null,null,null,"Numerology","Light Armor 10"],["Hand-bombs 4",null,null,null,"Phoenix Lore 1","Accessories 10","Charm","Remedy Lore 1","Traveler","Remedy Lore 2","Horology","Remedy Lore 3","Light Armor 11","Swiftness 1",null,null,"Zodiark","+390 HP"],["Zeromus","+310 HP","+190 HP","+150 HP","+30 HP","Accessories 11","Accessories 12","Accessories 13","Accessories 14","Accessories 15","Accessories 16","Accessories 17","Light Armor 12","Light Armor 13","Swiftness 2","Stamp","Swiftness 3"],[null,"+270 HP","+230 HP","+110 HP","+70 HP","Spellbound","Measures 4",null,null,"C\xfachulainn",null,"Accessories 18","Accessories 19","Accessories 20","Accessories 21","Accessories 22","Ribbon"],[null,null,null,null,null,"Shemhazai",null,null,null,"Magick Lore 3",null,null,null,"Ultima",null,"Quickening 4"],[null,null,null,null,null,"Hand-bombs 3",null,null,null,null,null,null,null,"Magick Lore 8","Magick Lore 7","Magick Lore 6"]]},{name:"Red Battlemage",image:_,imageAlt:"Cancer",text:"Battlemages equally skilled with maces and magicks.",rawBoardData:[[null,null,null,"Steal",null,"White Magick 2"],[null,null,null,"Hashmal",null,"Quickening 1",null,"Mateus",null,null,"White Magick 7",null,"+230 HP",null,"Heavy Armor 9","Heavy Armor 10"],[null,null,"Accessories 16","Accessories 11","Gambit Slot 6","Gambit Slot 4","Gambit Slot 3","Time Magick 2",null,null,"Shemhazai",null,"Quickening 2",null,"Heavy Armor 8"],[null,null,"Accessories 14","Accessories 10","Gambit Slot 5","Martyr","Gambit Slot 2","White Magick 3","Black Magick 3","Green Magick 2","Black Magick 4","Black Magick 5","Black Magick 6","Time Magick 3","Exodus"],[null,null,"Accessories 22","Accessories 13","Second Board","Belias","Gambit Slot 1","Green Magick 1","White Magick 4","Arcane Magick 2","White Magick 5","Green Magick 3","White Magick 6","Arcane Magick 3"],["Channeling 3","Zeromus","Ribbon","Accessories 20",null,null,"Arcane Magick 1","Time Magick 1",null,null,null,"C\xfachulainn"],[null,null,"Accessories 21","Accessories 19",null,null,"Essentials","Mystic Armor 1",null,null,null,"Black Magick 9","Black Magick 10",null,"Battle Lore 4","Battle Lore 2"],[null,null,"Accessories 18","Accessories 12",null,null,"Accessories 1","Maces 1",null,null,null,null,null,null,"Famfrit"],[null,null,"Accessories 15","Accessories 8","Accessories 6","Accessories 4","Accessories 2","Mystic Armor 2","Mystic Armor 3","Mystic Armor 4","Shields 2","Gambit Slot 7","Shields 3","Gambit Slot 8","Gambit Slot 9","Gambit Slot 10"],[null,"Zalera","Accessories 17","Accessories 9","Accessories 7","Accessories 5","Accessories 3","Charge","Shields 1","Maces 2","Warmage","Mystic Armor 5","Mystic Armor 6","Mystic Armor 7","Mystic Armor 8","Shields 4"],[null,null,null,null,"Adrammelech",null,null,null,null,null,"Battle Lore 3","+110 HP",null,null,"Mystic Armor 9","Shields 5"],[null,null,null,null,null,null,"Greatswords 4",null,null,null,"Maces 3","Ether Lore 1",null,null,"Mystic Armor 10","Shields 6",null,"Greatswords 2"],[null,null,null,"+435 HP",null,null,"Zodiark",null,null,null,"Inquisitor","Spellbreaker",null,null,"Mystic Armor 11","Shields 7","Ultima","Greatswords 1"],[null,null,null,"Quickening 4","Ensanguined Shield","Magick Lore 11","Magick Lore 10","Magick Lore 6","Magick Lore 7","Magick Lore 2","Maces 4","Channeling 1",null,null,"Mystic Armor 12","Shell Shield"],[null,null,null,null,"Zodiac Escutcheon","Magick Lore 12","Magick Lore 9","Magick Lore 5","Magick Lore 8","Magick Lore 3","Magick Lore 1","+190 HP","Swiftness 1","Serenity","Mystic Armor 13","Souleater"],[null,null,null,null,null,null,null,null,"Quickening 3",null,"Magick Lore 4","Maces 5","Channeling 2","Headsman","+270 HP","Spellbound"],[null,null,null,null,null,null,null,null,null,null,null,null,null,"Chaos"],[null,null,null,null,null,null,null,null,null,null,null,null,null,"Greatswords 3"]]},{name:"Knight",image:X,imageAlt:"Leo",text:"Stalwart warriors who wield swords and shield.",rawBoardData:[[null,null,null,null,null,null,null,null,null,null,"Potion Lore 2"],[null,null,"Souleater","Adrenaline","Headsman",null,"Quickening 2",null,null,null,"Shemhazai"],[null,null,"+270 HP","Heavy Armor 4","Shield Block 1","Heavy Armor 5","Battle Lore 3","Heavy Armor 6","Battle Lore 4","Heavy Armor 7","Battle Lore 2","Heavy Armor 8"],["White Magick 7",null,"Gambit Slot 6","Martyr","Swords 3","Shields 3","Swords 4","Shields 4","Swords 5","Shields 5","Swords 6","Battle Lore 1"],["White Magick 6","Mateus","Gambit Slot 5","Heavy Armor 3","Shields 2",null,null,null,null,null,"Shields 6","Heavy Armor 9","Quickening 3"],[null,null,"Gambit Slot 4","+230 HP","Swords 2","Belias","Potion Lore 1",null,null,null,"Swords 7","Battle Lore 5"],[null,null,"Gambit Slot 3","Heavy Armor 2","Shields 1","Second Board",null,null,"Battle Lore 9","C\xfachulainn","Shields 7","Greatswords 1"],[null,null,"Gambit Slot 2","Inquisitor","Swords 1",null,null,null,null,null,"Swords 8","Heavy Armor 10","Exodus","+350 HP"],["+190 HP","+110 HP","+70 HP","Heavy Armor 1","Essentials","Accessories 1","Accessories 2",null,null,null,"Shield Block 2","Greatswords 2"],["Gambit Slot 7","Last Stand","+30 HP","Gambit Slot 1","First Aid","Accessories 3","Accessories 4",null,null,null,"Swords 9","Battle Lore 6",null,"Famfrit"],["Gambit Slot 8","+150 HP",null,null,null,"Accessories 5","Accessories 6","Quickening 1",null,null,"+310 HP","Greatswords 3","Heavy Armor 11","Greatswords 4","Heavy Armor 12"],["Gambit Slot 9","Infuse",null,null,null,"Accessories 7","Accessories 8",null,null,"Zeromus","Spellbound","Battle Lore 7","Shell Shield","Battle Lore 10","Excalibur",null,"Battle Lore 11"],["Gambit Slot 10","Focus",null,"Zalera",null,"Accessories 9","Accessories 10",null,null,null,"Shield Block 3","Sight Unseeing","Battle Lore 8","Battle Lore 12","Genji Armor","Ultima","Telekinesis"],["Blood Sword","Accessories 21","Accessories 19","Accessories 17","Accessories 13","Accessories 11","Accessories 12","Adrammelech",null,null,"Karkata","Ensanguined Shield","Swiftness 1","Zodiac Escutcheon","Tournesol"],["Ribbon","Accessories 22","Accessories 20","Accessories 18","Accessories 16","Accessories 14","Accessories 15",null,null,null,null,"Chaos","Quickening 4","Zodiark"],[null,"Hashmal",null,null,null,null,null,null,null,null,null,"+390 HP","Revive","Excalipur"],[null,"White Magick 8","White Magick 9"]]},{name:"Monk",image:ee,imageAlt:"Virgo",text:"Warriors who temper their bodies into deadly weapons.",rawBoardData:[[null,null,null,"C\xfachulainn",null,null,null,null,"Belias","Second Board"],[null,null,"Brawler","Battle Lore 1",null,"Inquisitor","Martyr",null,"First Aid","Libra"],[null,null,"Battle Lore 5","Light Armor 4","Light Armor 3","Light Armor 2","Light Armor 1","Gambit Slot 1","Gambit Slot 2","Gambit Slot 3","Quickening 1"],["Traveler","Zalera","Battle Lore 2","Light Armor 5","Battle Lore 3","+30 HP","Essentials","Accessories 1","Accessories 2","Gambit Slot 4"],[null,null,"Battle Lore 4","Light Armor 6",null,"+70 HP","Poles 1",null,"Accessories 3","Gambit Slot 5",null,"Adrammelech",null,null,"Phoenix Lore 2"],["White Magick 9","Quickening 2","Numerology","Light Armor 7",null,"+110 HP","Poles 2",null,"Accessories 4","Potion Lore 1","Gambit Slot 6","Focus","Gambit Slot 7","Gambit Slot 8","Quickening 4"],[null,null,"Battle Lore 6","Light Armor 8",null,"+150 HP","Poles 3",null,"Accessories 5","Phoenix Lore 1","Last Stand","Spellbound","+310 HP","Gambit Slot 9","Zeromus","Sight Unseeing"],["White Magick 4","Hashmal","Headsman","Light Armor 9",null,"+190 HP","Poles 4",null,"Accessories 6","Accessories 7",null,null,"+350 HP","Gambit Slot 10"],[null,null,"Battle Lore 7","Light Armor 10",null,"Potion Lore 2","Poles 5",null,"Accessories 8","Accessories 9",null,"Quickening 3","+390 HP","Swiftness 1","Chaos","White Magick 11"],["Potion Lore 3","Shemhazai","Battle Lore 8","Light Armor 11",null,"+230 HP","Poles 6",null,"Accessories 10","Accessories 11","Mateus",null,"+500 HP","Battle Lore 9",null,"White Magick 12"],[null,null,"Battle Lore 10","Light Armor 12",null,"Revive","Bonecrusher",null,"Accessories 12","Accessories 13",null,null,"Accessories 22","Battle Lore 11"],[null,null,"Battle Lore 12","Light Armor 13",null,"+270 HP","Whale Whisker",null,"Achilles","Accessories 14","Accessories 15","Accessories 17","Accessories 19","Ribbon","Battle Lore 13","Ultima","Swiftness 2"],[null,null,"Wither","+435 HP",null,"Expose","Kanya",null,"Adrenaline","Shades of Black","Accessories 16","Accessories 18","Accessories 20","Accessories 21","Battle Lore 14",null,"Swiftness 3"],[null,null,null,null,null,"Exodus",null,null,null,"Famfrit",null,null,"Battle Lore 15","Battle Lore 16"],[null,null,null,null,null,"Souleater",null,null,null,"White Magick 10",null,"White Magick 13","Zodiark"]]},{name:"Time Battlemage",image:ea,imageAlt:"Libra",text:"Battlemages who wield crossbows and bend time to their will.",rawBoardData:[[null,null,null,null,null,"Channeling 3",null,"+150 HP",null,"White Magick 4"],[null,null,null,null,null,"Hashmal",null,"Quickening 2",null,"Adrammelech"],[null,null,null,"Gambit Slot 8","Channeling 1","Magick Lore 7","Warmage","Magick Lore 8","Charge","Magick Lore 3","Magick Lore 4","Poach","Spellbreaker"],[null,"Battle Lore 12","Exodus","Gambit Slot 9","Headsman","Heavy Armor 6","Time Magick 6","Swiftness 1","Heavy Armor 5","Time Magick 5","Heavy Armor 4","Ether Lore 2","Gambit Slot 7"],[null,null,null,"Gambit Slot 10","Magick Lore 6","Time Magick 7",null,"Zalera",null,null,"Magick Lore 2","Time Magick 4","Gambit Slot 6","Mateus","+230 HP"],[null,null,null,"+190 HP","Remedy Lore 2","Heavy Armor 7",null,"Ether Lore 3",null,"Second Board","Heavy Armor 3","Time Magick 3","Gambit Slot 5"],[null,null,"Quickening 3","Horology","Last Stand","Heavy Armor 8",null,null,null,"Belias","Heavy Armor 2","Time Magick 2","Gambit Slot 4","Quickening 1"],[null,null,null,"Spellbound","Magick Lore 5","Time Magick 8",null,null,null,null,"Magick Lore 1","Time Magick 1","Gambit Slot 2"],["Battle Lore 9","Famfrit",null,"Ether Lore 1","Serenity","Heavy Armor 9","Zeromus","Addle","Shear",null,"Heavy Armor 1","Essentials","Gambit Slot 1"],[null,"Magick Lore 9","Heavy Armor 12","Stamp","Time Magick 9","Heavy Armor 10",null,null,null,null,"Martyr","Accessories 1","Accessories 2","Inquisitor","Remedy Lore 1"],[null,"Swiftness 3","Time Magick 10","Heavy Armor 11","Channeling 2","Swiftness 2",null,"+270 HP",null,null,"Gambit Slot 3","Crossbows 1","Accessories 3","Accessories 4","Crossbows 2"],[null,null,null,null,null,null,null,"Chaos",null,null,null,null,null,"Accessories 5"],[null,null,"Accessories 20","Accessories 18","Accessories 16","Accessories 14","Accessories 13","Accessories 12","Accessories 11","Accessories 10","Accessories 9","Accessories 8","Accessories 7","Accessories 6"],[null,"Accessories 22","Accessories 21","Accessories 19","Accessories 17","Accessories 15","Crossbows 4","Battle Lore 7","Battle Lore 6","Battle Lore 5","Battle Lore 1","Battle Lore 2","Battle Lore 4","Battle Lore 3","+110 HP"],[null,"Ribbon","Battle Lore 10","Battle Lore 8","Green Magick 3",null,"Ultima",null,null,"C\xfachulainn",null,"Green Magick 2","Crossbows 3","Green Magick 1","Numerology","Shemhazai"],[null,null,"Zodiark",null,"Quickening 4",null,"Swords 7"],[null,null,"Swords 9",null,null,null,"Swords 8"]]},{name:"Foebreaker",image:el,imageAlt:"Scorpio",text:"Warriors who use mighty weapons to tear their foes asunder.",rawBoardData:[[null,null,null,"Shades of Black",null,"Swiftness 2"],[null,null,null,"C\xfachulainn",null,"Hashmal","Quickening 2",null,null,"Quickening 1"],[null,null,"Shell Shield","Last Stand",null,"Shear","Martyr",null,"Gambit Slot 3","Gambit Slot 4"],[null,"Shemhazai","Gambit Slot 9","Gambit Slot 8","Gambit Slot 7","Gambit Slot 6","Gambit Slot 5","Infuse","Gambit Slot 1","Gambit Slot 2"],[null,null,"Heavy Armor 6","Heavy Armor 5","Heavy Armor 4","Heavy Armor 3","Heavy Armor 2","Heavy Armor 1","Essentials","Accessories 1"],["+390 HP","Quickening 3","Heavy Armor 7","Axes & Hammers 6","Axes & Hammers 5","Axes & Hammers 4","Axes & Hammers 3","Axes & Hammers 2","Axes & Hammers 1","Accessories 2"],[null,null,"Heavy Armor 8","Axes & Hammers 7",null,"Inquisitor","Shields 1",null,"+30 HP","Accessories 3","Belias","Horology"],[null,null,"Heavy Armor 9","Vrscika",null,"Shield Block 1","Shields 2",null,"Battle Lore 3","Accessories 4","Second Board",null,null,null,"Swiftness 3"],[null,null,"Heavy Armor 10","Gambit Slot 10",null,"Adrenaline","Shields 3",null,"+70 HP","Accessories 5",null,null,null,null,"Ultima"],["Magick Lore 1","Exodus","Heavy Armor 11","Sight Unseeing",null,"Shield Block 2","Shields 4",null,"Battle Lore 4","Accessories 6",null,null,"Accessories 17","Accessories 18","Accessories 19","Zodiark"],["Magick Lore 2",null,"Heavy Armor 12","Spellbound",null,"Headsman","Shields 5",null,"+110 HP","Accessories 7","Mateus",null,"Accessories 16","Battle Lore 9","Accessories 22"],["Magick Lore 4",null,"Genji Armor","Expose",null,"Shield Block 3","Shields 6",null,"Battle Lore 2","Accessories 8",null,null,"Accessories 15","Battle Lore 12","Accessories 21"],["Magick Lore 3","Zeromus","Swiftness 1","Ensanguined Shield",null,"Focus","Shields 7",null,"+150 HP","Accessories 9",null,null,"Accessories 14","Battle Lore 10","Accessories 20"],[null,null,"Addle","Wither",null,"Hand-bombs 2","Hand-bombs 1",null,"Battle Lore 1","Accessories 10","Accessories 11","Accessories 12","Accessories 13","+310 HP","+350 HP"],[null,null,"Ribbon","Zodiac Escutcheon",null,"Hand-bombs 4","Hand-bombs 3",null,"+190 HP","Battle Lore 5","+230 HP","Battle Lore 6","+270 HP","Battle Lore 7","Battle Lore 8","Chaos"],[null,null,null,"Quickening 4",null,null,"Adrammelech",null,null,"Zalera",null,null,null,null,"Famfrit"],[null,null,null,"Battle Lore 15",null,null,"Battle Lore 11",null,null,"Traveler",null,null,null,null,"Magick Lore 8"]]},{name:"Archer",image:et,imageAlt:"Sagittarius",text:"Warriors who rain death on their foes from afar.",rawBoardData:[[null,null,null,null,null,null,"Quickening 4",null,null,"Hashmal"],[null,null,null,null,null,null,"+230 HP","Revive","Gambit Slot 10","Gambit Slot 9","Gambit Slot 8"],[null,null,"+435 HP","+390 HP","Famfrit","+310 HP","+270 HP","Focus","Traveler","+110 HP","Gambit Slot 7","Gambit Slot 6"],[null,null,null,null,null,null,"Ribbon","+190 HP","+150 HP","Charm","+70 HP","Gambit Slot 5","Zalera"],[null,null,null,null,null,null,null,null,null,null,"+30 HP","Gambit Slot 4"],[null,null,null,null,null,"Battle Lore 4","Accessories 19",null,null,"Mateus","Poach","Gambit Slot 3","Quickening 1","White Magick 4"],[null,null,null,null,null,"Accessories 21","Accessories 13","Zeromus",null,null,"Libra","Gambit Slot 2"],[null,null,"Quickening 3",null,null,"Accessories 16","Accessories 9",null,null,null,"First Aid","Gambit Slot 1",null,null,null,null,"Exodus"],["Infuse","Ultima","Remedy Lore 3","Shear","Accessories 15","Accessories 11","Accessories 7","Accessories 5","Accessories 3","Accessories 1","Essentials","Bows 1","Martyr","Headsman","Remedy Lore 1","Phoenix Lore 1","Spellbound","Potion Lore 2"],["1000 Needles","Zodiark","Phoenix Lore 3","Addle","Accessories 17","Accessories 12","Accessories 8","Accessories 6","Accessories 4","Accessories 2","Light Armor 1","Bows 2","Inquisitor","Swiftness 1","Potion Lore 1","Remedy Lore 2","Battle Lore 3","Potion Lore 3"],[null,null,null,null,null,"Shades of Black","Accessories 10",null,null,null,"Light Armor 2","Steal",null,null,"C\xfachulainn"],[null,null,null,"Magick Lore 2","Chaos","Accessories 18","Accessories 14",null,null,"Belias","Light Armor 3","Bows 3"],[null,"Magick Lore 8","Magick Lore 3","Magick Lore 4",null,"Accessories 22","Accessories 20","Quickening 2",null,"Second Board","Light Armor 4","Last Stand"],[null,"Magick Lore 7",null,null,null,null,null,null,null,null,"Light Armor 5","Bows 4","Adrammelech"],[null,null,null,null,null,null,"Light Armor 10","Light Armor 9","Light Armor 8","Light Armor 7","Light Armor 6","Gil Toss"],[null,null,null,null,null,"Light Armor 12","Light Armor 11","Swiftness 3","Bows 7","Achilles","Bows 5","Magick Lore 1"],[null,null,null,null,null,"Light Armor 13","Dhanusha","Sagittarius","Phoenix Lore 2","Bows 6","Swiftness 2"],[null,null,null,null,null,null,null,null,"Shemhazai"],[null,null,null,null,null,null,"Heavy Armor 12","Heavy Armor 11","Heavy Armor 10"]]},{name:"Black Mage",image:en,imageAlt:"Capricorn",text:"Mages who channel elemental forces into deadly magicks.",rawBoardData:[[null,null,null,null,null,null,null,null,"+70 HP"],[null,null,null,null,"Zodiark",null,"Hand-bombs 3",null,"Quickening 1"],[null,null,null,"Mystic Armor 13","Mystic Armor 12",null,"Mateus","Magick Lore 4","Gambit Slot 5","Adrammelech","Hand-bombs 2"],[null,"+390 HP","Quickening 4","Mystic Armor 11","Staves 5",null,null,"Channeling 1","Gambit Slot 4"],[null,null,null,"Magick Lore 11","Mystic Armor 10",null,null,"Magick Lore 2","Gambit Slot 2"],[null,null,null,"Magick Lore 10","Mystic Armor 9",null,null,"Magick Lore 1","Gambit Slot 1","Gambit Slot 3","Gambit Slot 6","Martyr"],[null,null,null,"Magick Lore 9","Staves 4","Quickening 3",null,"Mystic Armor 1","Essentials","Accessories 1","Accessories 2","Accessories 4"],[null,null,null,"Magick Lore 5","Mystic Armor 8",null,"Second Board","Mystic Armor 2","Black Magick 1",null,"Accessories 3","Gambit Slot 7",null,"Poach"],[null,null,null,"Black Magick 13","Mystic Armor 7",null,"Belias","Staves 1","Black Magick 2",null,"Ether Lore 1","Accessories 5","Zalera","Steal"],[null,null,null,"Black Magick 12","Staves 3",null,null,"Mystic Armor 3","Black Magick 3",null,"Accessories 6","Magick Lore 3",null,null,"Hand-bombs 4"],[null,null,null,"Black Magick 11","Mystic Armor 6","Mystic Armor 5","Staves 2","Mystic Armor 4","Black Magick 4",null,"Warmage","Accessories 7",null,null,"Hashmal"],[null,null,null,"Black Magick 10","Black Magick 9","Black Magick 8","Black Magick 7","Black Magick 6","Black Magick 5",null,"Accessories 8","Inquisitor","Magick Lore 8","Green Magick 1","Channeling 2","+270 HP"],[null,null,null,null,null,null,null,null,null,null,"Charge","Accessories 9","Ether Lore 2","Spellbreaker","Magick Lore 7","Magick Lore 6"],["Telekinesis","Ultima","Magick Lore 14","Magick Lore 15","Ribbon","Channeling 3","Accessories 19","Gambit Slot 9","Accessories 15","Remedy Lore 1","Accessories 10","+150 HP",null,null,"Remedy Lore 2","Headsman","Shemhazai","Heavy Armor 7"],[null,null,"Magick Lore 16","Magick Lore 13","Magick Lore 12","Accessories 21","Green Magick 2","Accessories 17","Charm","Accessories 12","Serenity","Accessories 11",null,null,"Ether Lore 3","Green Magick 3"],[null,null,null,"Chaos",null,"Famfrit",null,null,"Zeromus",null,"Accessories 13","Gambit Slot 8","Accessories 16","Gambit Slot 10","Accessories 20","Staff of the Magi"],[null,null,null,null,"+230 HP","+190 HP",null,null,"Heavy Armor 9",null,"Spellbound","Accessories 14","Swiftness 1","Accessories 18","Swiftness 2","Accessories 22"],[null,null,null,null,"+310 HP",null,null,null,null,null,"Quickening 2",null,"C\xfachulainn",null,"Exodus"],[null,null,null,null,null,null,null,null,null,null,null,null,null,null,"Heavy Armor 8"]]},{name:"Bushi",image:er,imageAlt:"Aquarius",text:"Swordmasters who devote themselves body and soul to their lords.",rawBoardData:[[null,null,null,null,null,null,null,null,null,null,"Karkata",null,"Masamune","Kumbha"],[null,null,null,null,null,null,null,null,"Souleater",null,"Blood Sword","Zalera","Magick Lore 7","Serenity",null,"Battle Lore 7"],[null,null,null,null,null,null,null,null,"Adrammelech",null,null,null,"Magick Lore 8","Katana 5","Quickening 3","+390 HP"],[null,null,null,null,null,null,null,"Magick Lore 2","+230 HP","Magick Lore 4","+270 HP","Spellbreaker","Magick Lore 3","+310 HP"],[null,null,null,null,null,null,"Second Board","+190 HP","Inquisitor","Katana 2","Swiftness 2","Katana 3","Headsman","Katana 4",null,null,"Gambit Slot 9","Gambit Slot 10"],[null,null,null,null,null,"Libra","Belias","Magick Lore 1","Swiftness 1",null,"Mateus",null,"Hashmal",null,null,null,"Gambit Slot 8","Sight Unseeing"],[null,null,null,null,null,null,null,"+150 HP","Katana 1",null,null,null,null,null,null,null,"Gambit Slot 7","1000 Needles"],[null,null,null,"Shield Block 1",null,null,null,"+70 HP","Essentials","Accessories 1","Accessories 2","Last Stand","Gambit Slot 1","Gambit Slot 3","Gambit Slot 4","Gambit Slot 5","Gambit Slot 6","Gil Toss"],[null,null,null,"Shemhazai",null,null,null,"+110 HP","Mystic Armor 1",null,null,"Accessories 3","Gambit Slot 2","Infuse","Bonecrusher","Remedy Lore 2","Shades of Black","Spellbound"],[null,null,"Magick Lore 5","Magick Lore 6","Mystic Armor 9","Mystic Armor 7","Mystic Armor 5","Mystic Armor 3","Mystic Armor 2",null,null,"Accessories 4","Remedy Lore 1",null,"Quickening 2"],[null,null,"Magick Lore 9","Mystic Armor 11","Mystic Armor 10","Mystic Armor 8","Mystic Armor 6","Mystic Armor 4","Martyr","Quickening 1",null,"Accessories 5","Accessories 6",null,"+350 HP"],["+500 HP","Exodus","Magick Lore 10","Mystic Armor 12",null,null,null,null,null,null,null,"Accessories 7","Accessories 8",null,"Battle Lore 8"],[null,null,"Magick Lore 11","Mystic Armor 13","C\xfachulainn","Stamp","Ultima",null,null,"Famfrit",null,"Accessories 9","Accessories 10"],[null,null,"Magick Lore 12","Genji Armor",null,null,"Ribbon","Accessories 21","Accessories 19","Accessories 17","Accessories 14","Accessories 11","Accessories 13"],[null,null,"Zeromus",null,null,null,"Battle Lore 3","Accessories 22","Accessories 20","Accessories 18","Accessories 16","Accessories 15","Accessories 12"],[null,"Magick Lore 13","Magick Lore 15",null,"+435 HP","Quickening 4","Battle Lore 2","Battle Lore 4"],[null,null,null,null,null,null,"Battle Lore 5","Battle Lore 1","Chaos","Brawler"],[null,null,null,"Heavy Armor 10","Heavy Armor 9","Zodiark","Swiftness 3","Battle Lore 6"],[null,null,null,"Heavy Armor 11"]]},{name:"Shikari",image:eo,imageAlt:"Pisces",text:"Warriors who fight nimbly across hill and dale.",rawBoardData:[[null,null,null,"Shades of Black",null,null,null,null,null,null,null,null,null,"Phoenix Lore 1","Phoenix Lore 2"],[null,null,null,"Adrammelech",null,null,null,null,null,null,null,null,null,"Ultima"],[null,null,"Gambit Slot 10","Gambit Slot 8","Remedy Lore 2","Gambit Slot 7",null,null,null,null,null,"Light Armor 10","Daggers 6","Light Armor 12","Shikari Nagasa & Mina","Chaos"],[null,"Quickening 2","Gambit Slot 9","Swiftness 1","Gambit Slot 6","Gambit Slot 5","Mateus","Gil Toss",null,"White Magick 12","C\xfachulainn","Daggers 5","Light Armor 11","Shields 7","Light Armor 13"],[null,"Ninja Swords 2",null,"Second Board","Gambit Slot 4","Gambit Slot 3",null,null,null,null,null,"Light Armor 9","Shields 6"],[null,null,null,"Belias","Gambit Slot 2","Gambit Slot 1",null,null,null,null,null,"Daggers 4","Light Armor 8","Exodus","Stamp"],["Ninja Swords 1",null,null,null,"First Aid","Daggers 1","Light Armor 2","Daggers 2","Shields 2","Light Armor 5","Shields 3","Light Armor 7","Shields 5"],["Quickening 1","Adrenaline","Last Stand","+30 HP","Martyr","Essentials","Light Armor 1","Light Armor 3","Light Armor 4","Daggers 3","Light Armor 6","Shields 4","Shield Block 2","Accessories 19","Accessories 22","Telekinesis"],[null,"Spellbound","+230 HP","+110 HP","Libra","Accessories 1",null,null,null,null,null,"Shield Block 1","Focus","Accessories 18","Accessories 21","Ribbon"],[null,"+310 HP","Headsman","+190 HP","+70 HP","Accessories 2","Accessories 3","Accessories 6","Accessories 8","Accessories 10","Accessories 12","Accessories 14","Accessories 16","Accessories 17","Accessories 20","+390 HP"],[null,null,"Hashmal",null,"+150 HP","Accessories 4","Accessories 5","Accessories 7","Accessories 9","Accessories 11","Accessories 13","Accessories 15","+350 HP"],[null,null,"Bonecrusher",null,"Battle Lore 3","Inquisitor",null,null,null,null,null,"Potion Lore 1","Traveler","Famfrit"],[null,null,null,null,"Battle Lore 4","+270 HP","Zalera","+435 HP",null,null,"Zeromus","Potion Lore 2","Magick Lore 1"],[null,null,"Remedy Lore 3","Battle Lore 1","Battle Lore 2","Remedy Lore 1",null,null,null,null,null,"Swiftness 3","Magick Lore 2","Magick Lore 4","Magick Lore 8","Zodiark"],["Ninja Swords 3","Quickening 3","Revive","Swiftness 2","Battle Lore 5","Battle Lore 6",null,null,null,null,null,"1000 Needles","Potion Lore 3","Magick Lore 3","Brawler"],[null,null,null,"Shemhazai",null,null,null,null,null,null,null,null,null,"Quickening 4"],[null,null,"Guns 6","Guns 5",null,null,null,null,null,null,null,null,null,"Yagyu Darkblade & Mesa"]]}],eb=ef.map(function(e){let a={name:e.name,text:e.text,image:e.image,imageAlt:e.imageAlt,rows:e.rawBoardData.map(e=>e.map(e=>e?{value:eg(e),adjacent:[]}:void 0)),lookup:new Map};for(let e=0;ea.rows[e]&&a.rows[e][l]&&n.adjacent.push(a.rows[e][l]);l(e-1,t),l(e+1,t),l(e,t-1),l(e,t+1),a.lookup.set(n.value,n)}}}return a});class eA{compare;nodes;constructor(e){this.compare=e,this.nodes=[]}size(){return this.nodes.length}insert(e){let a=this.nodes.length;for(this.nodes.push(e);a>0;){let e=a-1>>1;if(!this.compare(this.nodes[a],this.nodes[e]))return;let l=this.nodes[a];this.nodes[a]=this.nodes[e],this.nodes[e]=l,a=e}}remove(){if(this.nodes.length<2)return this.nodes.pop();let e=this.nodes[0],a=this.nodes.pop();this.nodes[0]=a;let l=0;for(;;){let t=2*l+1,n=t+1,r=l;if(te.slice()),this.selected=e.selected.map(e=>new Set(e)),this.blockedEspers=new Set(e.blockedEspers),this.quickeningCount=e.quickeningCount.slice()):(this.jobs=ey.map(e=>[]),this.selected=ey.map(e=>new Set),this.blockedEspers=new Set,this.quickeningCount=ey.map(e=>0),this.verify())}verify(){this.blockedEspers.clear();for(let e=0;e<6;e++){let a=this.selected[e];for(let l of ep)if(a.has(l))for(let a=e+1;a<6;a++)this.selected[a].delete(l);for(let l of(4===eh.filter(e=>a.has(e)).length&&a.delete(eh[3]),ey[e].innateLicenses))a.add(l);let l=new Set,t=[...ey[e].innateLicenses];for(;t.length;){let n=t.pop();if(!l.has(n)&&a.has(n))for(let a of(l.add(n),this.jobs[e])){let e=a.lookup.get(n);e&&t.push(...e.adjacent.map(e=>e.value))}}for(let e of ep)l.has(e)&&this.blockedEspers.add(e);this.quickeningCount[e]=eh.filter(e=>l.has(e)).length,this.selected[e]=l}}getJob(e,a){return this.jobs[e][a]}unemployed(e){return 0===this.jobs[e].length}allUnemployed(){return!this.jobs.find(e=>e.length>0)}getLpCount(e){let a=0;for(let l of this.selected[e])ey[e].innateLicenses.includes(l)||(a+=l.cost);return a}findPath(e,a){let l=new eA(function(e,a){return e.length{for(let n of a.keys())for(let r of this.jobs[e]){let e=r.lookup.get(n);if(e)for(let{value:n}of e.adjacent)!a.has(n)&&l(n)&&a.set(n,t)}};return l(e=>!e.limited,D.CERTAIN),l(a=>!this.blockedEspers.has(a)&&(!eh.includes(a)||this.quickeningCount[e]<3),D.POSSIBLE),a}encode(){let e="";for(let a=0;a<6;a++)e+=function(e,a){let l=ev.get(e[0]).get(e[1]),t=ew[l],n=[l],r=1,o=0;for(let e of t.licenses)a.has(e)&&(o|=r),256==(r<<=1)&&(n.push(o),o=0,r=1);for(1!==r&&n.push(o);n.length>1&&0===n[n.length-1];)n.pop();return btoa(String.fromCharCode(...n)).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}(this.jobs[a],this.selected[a]),5!==a&&(e+=".");return e}static decode(e){let a=e.split("."),l=a.map(eS),t=new ek;for(let e=0;e<6;e++){let a=l[e];a&&(t.jobs[e]=a.jobs,t.selected[e]=a.licenses)}return t.verify(),t}}const{urlLookup:ew,urlReverseLookup:ev}=function(){let e=eb.slice();e.unshift(void 0);let a=[];for(let l of e)for(let t of e){if(l&&l===t)continue;let e={job1:l,job2:t,licenses:[]};if(l)for(let a of l.rows)for(let l of a)l&&e.licenses.push(l.value);if(t)for(let a of t.rows)for(let t of a)t&&l&&!l.lookup.has(t.value)&&e.licenses.push(t.value);a.push(e)}let l=new Map;for(let e=0;ee),licenses:t}}function eT(e){let a=e,l=new Set;return{useStore(e){let t=()=>x(e);return l.add(t),H(e,()=>{l.delete(t)}),()=>a},dispatch(e){for(let t of(a=e(a),l))t()}}}const eM=e=>a=>a.boardIndex&&!e.getJob(a.characterIndex,a.boardIndex)?{...a,party:e,boardIndex:0,plannedParty:void 0}:{...a,party:e,plannedParty:void 0},eL=(e,a)=>l=>(a&&!l.party.getJob(e,0)&&(a=0),{...l,characterIndex:e,boardIndex:a}),eB=()=>e=>e.qeActive?{...e,qeActive:!1}:{...e,qeActive:!0,dpsActive:!1},eH=()=>e=>e.dpsActive?{...e,dpsActive:!1}:{...e,dpsActive:!0,qeActive:!1},ex=e=>a=>({...a,plannedParty:e}),{useStore:eP,dispatch:eG}=eT(function(){let e=window.location.search&&ek.decode(window.location.search.slice(1));return{party:e||new ek,characterIndex:0,boardIndex:0,qeActive:!1,dpsActive:!1,plannedParty:void 0}}());var eC=(e,a)=>{let l;let t=eP(a);return e=>{let n=t(),r=n.party===l?.from?l:void 0;return r?C("button",{class:"action button","aria-label":r.label,onClick:()=>eG(eM(r.to))},r.children):C("button",{class:"action button","aria-label":e.label,disabled:e.disabled,onClick:async()=>{let t=n.party,r=e.getNextParty();eG(eM(r));let o={from:r,to:t,label:`Undo ${e.label}`,children:C("i",null,"Undo ",e.children)};l=o,x(a),await new Promise(e=>setTimeout(e,5e3)),l===o&&(l=void 0,x(a))}},e.children)}},eD=(e,a)=>{let l=eP(a);return()=>{let e=l();function a(a,l){let t=e.party.getJob(a,l),n=e.characterIndex===a&&e.boardIndex===l;if(t)return C("button",{class:"job","aria-pressed":n,onClick:e=>{e.stopPropagation(),eG(eL(a,l))}},C("span",{class:"name"},t.name));{let t=1===l&&!e.party.getJob(a,0);return C("button",{disabled:t,class:"job nojob","aria-pressed":n,onClick:e=>{e.stopPropagation(),eG(eL(a,l))}},C("span",{class:"name"},"No Job"))}}return C("div",{class:"character-panel"},C("div",{class:"actions"},function(){let a,l;let t=e.characterIndex,n=e.party.getJob(t,e.boardIndex);return n?(a=`Unlearn ${n.name} from ${ey[t].name}`,l=!1):(a=`Unlearn current job from ${ey[t].name}`,l=!0),C(eC,{label:a,disabled:l,getNextParty:()=>e.party.removeJob(t,n)},"Reset Job")}(),function(){let a=e.characterIndex,l=e.party.unemployed(a),t=`Unlearn all jobs from ${ey[a].name}`;return C(eC,{label:t,disabled:l,getNextParty:()=>e.party.removeAllJobs(a)},"Reset Character")}(),function(){let a=e.party.allUnemployed();return C(eC,{label:"Unlearn all jobs from all characters",disabled:a,getNextParty:()=>new ek},"Reset All")}(),C("button",{class:"action button","aria-label":"Manage Quickenings and Espers for all characters at once.",onClick:()=>eG(eB()),"aria-pressed":e.qeActive},e.qeActive?"Hide Mist Planner":"Show Mist Planner"),C("button",{class:"action button","aria-label":"Simulate character damage output",onClick:()=>eG(eH()),"aria-pressed":e.dpsActive},e.dpsActive?"Hide DPS Simulator":"Show DPS Simulator")),C("div",{class:"character-select"},ey.map((l,t)=>C("div",{class:"character button","aria-pressed":e.characterIndex===t,onClick:()=>(function(a){e.characterIndex===a?eG(eL(a,1^e.boardIndex)):eG(eL(a,0))})(t)},C("span",{class:"name"},l.name),C("br",null),a(t,0),C("br",null),a(t,1),C("br",null),C("span",null,e.party.getLpCount(t)," LP")))),C("div",{class:"stats"},function(){let a=e.party.color(e.characterIndex),l=e.plannedParty&&e.plannedParty.color(e.characterIndex);return ed.map(t=>(function(a,l,t){let n=[];if("number"==typeof a.contents[0].grants.what){let r=[],o=[],i=[],s=[];for(let e of a.contents)switch(l.get(e)){case D.OBTAINED:r.push(e);break;case D.CERTAIN:o.push(e);break;case D.POSSIBLE:i.push(e);break;default:t&&t.has(e)&&s.push(e)}let c=(a,l)=>{let t=a.map(a=>({c:e.characterIndex,l:a})),n=l?e.party.deleteAndAdd([],t):e.party.deleteAndAdd(t,[]);eG(eM(n))},m=e=>e.reduce((e,a)=>e+a.grants.what,0);r.length&&n.push(C("p",{class:"l obtained",onClick:()=>c(r,!1)},"+",m(r))),o.length&&n.push(C("p",{class:"l certain",onClick:()=>c(o,!0)},"+",m(o))),i.length&&n.push(C("p",{class:"l possible",onClick:()=>c(i,!0)},"+",m(i))),s.length&&n.push(C("p",{class:"l planned"},"+",m(s)))}else for(let r of a.contents){let a;let o=!1;switch(l.get(r)){case D.OBTAINED:a="l obtained",o=!0;break;case D.CERTAIN:a="l certain";break;case D.POSSIBLE:a="l possible";break;default:if(!(t&&t.has(r)))continue;a="l planned"}let i=()=>{o?eG(eM(e.party.delete(e.characterIndex,r))):eG(eM(e.party.add(e.characterIndex,r)))};n.push(C("p",{class:a,"aria-label":r.text,onClick:i},r.fullName))}return n.length?C("div",{class:"group"},C("h3",{class:"name"},a.name),n):null})(t,a,l))}()))}};const eR=C("a",{href:"https://github.com/nattthebear/ff12characterplanner",target:"_blank",rel:"noopener noreferrer",class:"github-corner","aria-label":"View source on Github"},C("svg",{width:"80",height:"80",viewBox:"0 0 250 250","aria-hidden":!0},C("g",null,C("path",{d:"M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z"}),C("path",{d:"M128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2",fill:"currentColor",class:"octo-arm"}),C("path",{d:"M115.0,115.0 C114.9,115.1 118.7,116.5 119.8,115.4 L133.7,101.6 C136.9,99.2 139.9,98.4 142.2,98.6 C133.8,88.0 127.5,74.4 143.8,58.0 C148.5,53.4 154.0,51.2 159.7,51.0 C160.3,49.4 163.2,43.6 171.4,40.1 C171.4,40.1 176.1,42.5 178.8,56.2 C183.1,58.6 187.2,61.8 190.9,65.4 C194.5,69.0 197.7,73.2 200.1,77.6 C213.8,80.2 216.3,84.9 216.3,84.9 C212.7,93.1 206.9,96.0 205.4,96.6 C205.1,102.4 203.0,107.8 198.3,112.5 C181.9,128.9 168.3,122.5 157.7,114.1 C157.9,116.9 156.7,120.9 152.7,124.9 L141.0,136.5 C139.8,137.7 141.6,141.9 141.8,141.8 Z",fill:"currentColor",class:"octo-body"}))));function eE(){return eR}var eI=(e,a)=>{let l;let t=eP(a),n=t(),r=null,o=e=>{r=e};function i(e){let a=r,t=l;t&&a&&(a.scrollLeft=t.x-e.screenX,a.scrollTop=t.y-e.screenY)}function s(){l=void 0}function c(e){let a=r,t=e.target;a&&(t.classList.contains("empty")||"TABLE"===t.nodeName)&&(l={x:a.scrollLeft+e.screenX,y:a.scrollTop+e.screenY},e.preventDefault())}return document.addEventListener("mousemove",i,{passive:!0}),document.addEventListener("mouseup",s,{passive:!0}),H(a,()=>{document.removeEventListener("mousemove",i),document.removeEventListener("mouseup",s)}),()=>{n=t();let e=n.party.getJob(n.characterIndex,n.boardIndex);if(e)return function(e){let a=n.party.color(n.characterIndex);return C("div",{class:"license-board-holder",ref:o,onMouseDown:c},C("table",{class:"license-board"},C("tbody",null,e.rows.map(e=>C("tr",null,e.map(e=>(function(e,a){let l;if(!e)return C("td",{class:"empty"});let t=e.value,r=!1;switch(a.get(t)){case D.OBTAINED:l="l obtained",r=!0;break;case D.CERTAIN:l="l certain";break;case D.POSSIBLE:l="l possible";break;default:l="l blocked"}return C("td",{class:l,onClick:()=>{r?eG(eM(n.party.delete(n.characterIndex,t))):eG(eM(n.party.add(n.characterIndex,t)))},"aria-label":t.text},C("div",{class:"name"},t.fullName),C("div",{class:"cost"},t.cost),t.image&&C("img",{class:"mist",src:t.image,"aria-role":"none"}))})(e,a)))))))}(e);{let e=n.party.getJob(n.characterIndex,1^n.boardIndex);return C("div",{class:"select-job"},eb.map(a=>C("button",{onClick:()=>eG(eM(n.party.addJob(n.characterIndex,a))),class:"job button",disabled:a===e,"aria-label":a.text,onMouseOver:()=>eG(ex(n.party.addJob(n.characterIndex,a))),onMouseOut:()=>eG(ex(void 0))},C("img",{class:"zodiac",src:a.image,alt:a.imageAlt}),a.name)),C(eE,null))}}};const{is:eN}=Object,ej=e=>e(),eW=[...ep,...eh];function ez(e,a){return e.sortOrder-a.sortOrder}const eF=e=>ey.map((a,l)=>e.color(l));var eO=(e,a)=>{let l=eP(a),{party:t}=l(),n=function(...e){let a,l;let t=e.slice(0,-1),n=e.at(-1);return function(){let e=t.map(ej);return a&&function(e,a){for(let l=0;lt,eF),r=n();function o(e,a){return C(G,null,C("div",null,C("div",{class:"license-name","aria-label":e.text},e.fullName)),ey.map((l,n)=>(function(e,a,l){let n,o;if(t.unemployed(a))return C("div",{class:"l unreachable",onClick:()=>{eG(eL(a,0)),eG(eB())}},"Choose a job first.");let i=r[a],s=[];switch(i.get(e)){case D.OBTAINED:{n="l obtained";let l=eW.filter(l=>l!==e&&t.has(a,l)),r=t.deleteAndAdd([{c:a,l:e}],l.map(e=>({c:a,l:e}))),c=r.color(a);for(let[a,l]of c)if(l===D.POSSIBLE&&a!==e){let e=i.get(a);(e===D.OBTAINED||e===D.CERTAIN)&&s.push(a)}o=()=>eG(eM(r));break}case D.POSSIBLE:{n="l possible";let l=t.add(a,e),r=l.color(a);for(let[e,a]of i)a==D.POSSIBLE&&r.get(e)===D.CERTAIN&&s.push(e);o=()=>eG(eM(l));break}default:{n="l blocked";let r=t.deleteAndAdd(l?ey.map((a,l)=>({c:l,l:e})):eh.map(e=>({c:a,l:e})),[{c:a,l:e}]),o=r.color(a);for(let[e,a]of o)if(a===D.CERTAIN){let a=i.get(e);(null==a||a===D.POSSIBLE)&&s.push(e)}}}return s.sort(ez),C("div",{class:n,onClick:o},s.map(e=>C("div",{"aria-label":e.text},e.fullName)))})(e,n,a)))}function i(e){return e?C("div",{class:"job","aria-label":e.text},e.name):C("div",{class:"job nojob"},"No Job")}return()=>({party:t}=l(),r=n(),C("div",{class:"qe-board"},C("div",null),ey.map((e,a)=>C("div",null,C("div",{class:"character-name"},e.name),i(t.getJob(a,0)),i(t.getJob(a,1)))),ep.map(e=>o(e,!0)),eh.map(e=>o(e,!1))))};const eV=["fire","ice","lightning","water","wind","earth","dark","holy"];function eK(e){for(let a of e)(function(e){let a="";for(let l in e){if("name"===l||"l"===l||"type"===l)continue;let t=e[l];if("boolean"==typeof t&&t)a+=`ret.${l} = true; +`;else if("number"==typeof t)a+=`ret.${l} += ${t}; +`;else if("string"==typeof t)a+=`ret.${l} = ${JSON.stringify(t)}; +`;else throw Error(`Unexpected type on Profile[${l}]: ${typeof t}`)}e.mutateProfile=Function("ret",a)})(a),function(e){let a=[];function l(l,t){let n=e[l];"number"==typeof n&&n>0?a.push(`${n} ${t}`):!0===n&&a.push(t)}for(let t of(e.animationType&&a.push({unarmed:"Unarmed",dagger:"Dagger",ninja:"Ninja Sword",katana:"Katana",sword:"Sword",bigsword:"Greatsword",hammer:"Hammer/Axe",pole:"Pole",spear:"Spear",mace:"Mace",bow:"Bow",gun:"Gun",xbow:"Crossbow",measure:"Measure",rod:"Rod",staff:"Staff",handbomb:"Handbomb"}[e.animationType]),"gun"===e.damageType&&"gun"!==e.animationType&&a.push("Pierce"),l("attack","Att"),l("chargeTime","CT"),l("combo","Cb"),l("str","Str"),l("mag","Mag"),l("vit","Vit"),l("spd","Spd"),l("brawler","Brawler"),l("berserk","Berserk"),l("haste","Haste"),l("bravery","Bravery"),l("faith","Faith"),l("focus","Focus"),l("adrenaline","Adrenaline"),l("serenity","Serenity"),l("spellbreaker","Spellbreaker"),l("genjiGloves","Combo+"),l("cameoBelt","Ignore Evasion"),l("agateRing","Ignore Weather"),eV))l(`${t}Damage`,t[0].toUpperCase()+t.slice(1)+" Damage");for(let e of eV)l(`${e}Bonus`,e[0].toUpperCase()+e.slice(1)+" Bonus");e.tooltip=a.join(",")}(a);return e}function eQ(e,a){let l={...e};return a.weapon.mutateProfile(l),a.ammo?.mutateProfile(l),a.helm?.mutateProfile(l),a.armor?.mutateProfile(l),a.accessory?.mutateProfile(l),l.str>99&&(l.str=99),l.mag>99&&(l.mag=99),l.vit>99&&(l.vit=99),l.spd>99&&(l.spd=99),l}const eZ=eK([{name:"Unarmed",damageType:"unarmed",animationType:"unarmed",attack:12,chargeTime:26,combo:5},{name:"Mythril Sword",damageType:"sword",animationType:"sword",attack:14,chargeTime:30,combo:5},{name:"Broadsword",l:eg("Swords 1"),damageType:"sword",animationType:"sword",attack:14,chargeTime:32,combo:5},{name:"Longsword",l:eg("Swords 2"),damageType:"sword",animationType:"sword",attack:20,chargeTime:32,combo:5},{name:"Iron Sword",l:eg("Swords 2"),damageType:"sword",animationType:"sword",attack:25,chargeTime:32,combo:5},{name:"Mythril Blade",damageType:"sword",animationType:"sword",attack:23,chargeTime:30,combo:5},{name:"Zwill Blade",l:eg("Swords 3"),damageType:"sword",animationType:"sword",attack:30,chargeTime:32,combo:5},{name:"Ancient Sword",l:eg("Swords 3"),damageType:"sword",animationType:"sword",attack:35,chargeTime:32,combo:5},{name:"Blood Sword",l:eg("Blood Sword"),damageType:"sword",animationType:"sword",attack:38,chargeTime:32,combo:5},{name:"Lohengrin",l:eg("Swords 4"),damageType:"sword",animationType:"sword",attack:40,chargeTime:32,combo:5},{name:"Flametongue",l:eg("Swords 4"),damageType:"sword",animationType:"sword",attack:45,chargeTime:32,combo:5,fireDamage:!0},{name:"Demonsbane",l:eg("Swords 5"),damageType:"sword",animationType:"sword",attack:51,chargeTime:32,combo:5},{name:"Icebrand",l:eg("Swords 5"),damageType:"sword",animationType:"sword",attack:55,chargeTime:32,combo:5,iceDamage:!0},{name:"Platinum Sword",l:eg("Swords 6"),damageType:"sword",animationType:"sword",attack:61,chargeTime:32,combo:5},{name:"Bastard Sword",l:eg("Swords 6"),damageType:"sword",animationType:"sword",attack:67,chargeTime:32,combo:5},{name:"Diamond Sword",l:eg("Swords 7"),damageType:"sword",animationType:"sword",attack:73,chargeTime:32,combo:5},{name:"Runeblade",l:eg("Swords 7"),damageType:"sword",animationType:"sword",attack:78,chargeTime:32,combo:5},{name:"Deathbringer",l:eg("Swords 8"),damageType:"sword",animationType:"sword",attack:83,chargeTime:32,combo:5},{name:"Stoneblade",l:eg("Swords 8"),damageType:"sword",animationType:"sword",attack:95,chargeTime:32,combo:5},{name:"Durandal",l:eg("Swords 9"),damageType:"sword",animationType:"sword",attack:99,chargeTime:32,combo:5},{name:"Great Trango",damageType:"sword",animationType:"sword",attack:153,chargeTime:25,combo:30},{name:"Karkata",l:eg("Karkata"),damageType:"sword",animationType:"sword",attack:92,chargeTime:32,combo:7},{name:"Simha",l:eg("Swords 9"),damageType:"sword",animationType:"sword",attack:103,chargeTime:32,combo:10},{name:"Dagger",l:eg("Daggers 1"),damageType:"dagger",animationType:"dagger",attack:14,chargeTime:21,combo:12},{name:"Mage Masher",l:eg("Daggers 2"),damageType:"dagger",animationType:"dagger",attack:18,chargeTime:21,combo:12},{name:"Assassin's Dagger",l:eg("Daggers 2"),damageType:"dagger",animationType:"dagger",attack:31,chargeTime:21,combo:12},{name:"Chopper",l:eg("Daggers 3"),damageType:"dagger",animationType:"dagger",attack:40,chargeTime:21,combo:12},{name:"Main Gauche",l:eg("Daggers 3"),damageType:"dagger",animationType:"dagger",attack:46,chargeTime:21,combo:5},{name:"Gladius",l:eg("Daggers 4"),damageType:"dagger",animationType:"dagger",attack:56,chargeTime:21,combo:12,windDamage:!0},{name:"Avenger",l:eg("Daggers 4"),damageType:"dagger",animationType:"dagger",attack:66,chargeTime:21,combo:12},{name:"Orichalcum Dirk",l:eg("Daggers 5"),damageType:"dagger",animationType:"dagger",attack:79,chargeTime:21,combo:12},{name:"Platinum Dagger",l:eg("Daggers 5"),damageType:"dagger",animationType:"dagger",attack:83,chargeTime:21,combo:12},{name:"Zwill Crossblade",l:eg("Daggers 6"),damageType:"dagger",animationType:"dagger",attack:87,chargeTime:21,combo:12,windDamage:!0},{name:"Shikari Nagasa",l:eg("Shikari Nagasa & Mina"),damageType:"dagger",animationType:"dagger",attack:90,chargeTime:21,combo:12},{name:"Mina",l:eg("Shikari Nagasa & Mina"),damageType:"dagger",animationType:"dagger",attack:104,chargeTime:21,combo:15},{name:"Handaxe",l:eg("Axes & Hammers 1"),damageType:"hammer",animationType:"hammer",attack:17,chargeTime:29,combo:6},{name:"Broadaxe",l:eg("Axes & Hammers 2"),damageType:"hammer",animationType:"hammer",attack:36,chargeTime:29,combo:6},{name:"Slasher",l:eg("Axes & Hammers 3"),damageType:"hammer",animationType:"hammer",attack:54,chargeTime:29,combo:6},{name:"Hammerhead",l:eg("Axes & Hammers 4"),damageType:"hammer",animationType:"hammer",attack:81,chargeTime:29,combo:6},{name:"Francisca",l:eg("Axes & Hammers 5"),damageType:"hammer",animationType:"hammer",attack:88,chargeTime:29,combo:6},{name:"Greataxe",l:eg("Axes & Hammers 6"),damageType:"hammer",animationType:"hammer",attack:110,chargeTime:29,combo:6},{name:"Golden Axe",l:eg("Axes & Hammers 6"),damageType:"hammer",animationType:"hammer",attack:120,chargeTime:29,combo:6},{name:"Iron Hammer",l:eg("Axes & Hammers 2"),damageType:"hammer",animationType:"hammer",attack:24,chargeTime:32,combo:8},{name:"War Hammer",l:eg("Axes & Hammers 3"),damageType:"hammer",animationType:"hammer",attack:42,chargeTime:32,combo:8},{name:"Sledgehammer",l:eg("Axes & Hammers 4"),damageType:"hammer",animationType:"hammer",attack:66,chargeTime:32,combo:8},{name:"Morning Star",l:eg("Axes & Hammers 5"),damageType:"hammer",animationType:"hammer",attack:100,chargeTime:32,combo:8},{name:"Scorpion Tail",l:eg("Axes & Hammers 7"),damageType:"hammer",animationType:"hammer",attack:124,chargeTime:32,combo:8},{name:"Vrscika",l:eg("Vrscika"),damageType:"hammer",animationType:"hammer",attack:133,chargeTime:32,combo:20},{name:"Mace",l:eg("Maces 1"),damageType:"mace",animationType:"mace",attack:17,chargeTime:30,combo:5},{name:"Bronze Mace",l:eg("Maces 1"),damageType:"mace",animationType:"mace",attack:24,chargeTime:30,combo:5},{name:"Bhuj",l:eg("Maces 2"),damageType:"mace",animationType:"mace",attack:34,chargeTime:30,combo:5},{name:"Miter",l:eg("Maces 2"),damageType:"mace",animationType:"mace",attack:42,chargeTime:30,combo:5,waterDamage:!0},{name:"Thorned Mace",l:eg("Maces 3"),damageType:"mace",animationType:"mace",attack:53,chargeTime:30,combo:5},{name:"Chaos Mace",l:eg("Maces 3"),damageType:"mace",animationType:"mace",attack:69,chargeTime:30,combo:5},{name:"Doom Mace",l:eg("Maces 4"),damageType:"mace",animationType:"mace",attack:75,chargeTime:30,combo:5},{name:"Zeus Mace",l:eg("Maces 4"),damageType:"mace",animationType:"mace",attack:81,chargeTime:30,combo:5,darkBonus:!0},{name:"Grand Mace",l:eg("Maces 5"),damageType:"mace",animationType:"mace",attack:88,chargeTime:30,combo:5},{name:"Bonebreaker",damageType:"gun",animationType:"mace",attack:10,chargeTime:30,combo:10},{name:"Bone of Byblos",l:eg("Maces 5"),damageType:"mace",animationType:"mace",attack:100,chargeTime:30,combo:5},{name:"Gilt Measure",l:eg("Measures 1"),damageType:"gun",animationType:"measure",attack:5,chargeTime:32,combo:0},{name:"Arc Scale",l:eg("Measures 2"),damageType:"gun",animationType:"measure",attack:10,chargeTime:32,combo:0},{name:"Multiscale",l:eg("Measures 2"),damageType:"gun",animationType:"measure",attack:13,chargeTime:32,combo:0,fireDamage:!0},{name:"Cross Scale",l:eg("Measures 3"),damageType:"gun",animationType:"measure",attack:16,chargeTime:32,combo:0,lightningDamage:!0},{name:"Caliper",l:eg("Measures 3"),damageType:"gun",animationType:"measure",attack:19,chargeTime:32,combo:0,windDamage:!0},{name:"Euclid's Sextant",l:eg("Measures 4"),damageType:"gun",animationType:"measure",attack:24,chargeTime:32,combo:0,holyDamage:!0},{name:"Claymore",l:eg("Greatswords 1"),damageType:"sword",animationType:"bigsword",attack:83,chargeTime:35,combo:8},{name:"Defender",l:eg("Greatswords 2"),damageType:"sword",animationType:"bigsword",attack:90,chargeTime:35,combo:5},{name:"Save the Queen",l:eg("Greatswords 2"),damageType:"sword",animationType:"bigsword",attack:92,chargeTime:35,combo:8},{name:"Ultima Blade",l:eg("Greatswords 3"),damageType:"sword",animationType:"bigsword",attack:109,chargeTime:35,combo:8},{name:"Ragnarok",l:eg("Greatswords 4"),damageType:"sword",animationType:"bigsword",attack:117,chargeTime:35,combo:8},{name:"Excalibur",l:eg("Excalibur"),damageType:"sword",animationType:"bigsword",attack:127,chargeTime:35,combo:8,holyDamage:!0},{name:"Tournesol",l:eg("Tournesol"),damageType:"sword",animationType:"bigsword",attack:138,chargeTime:35,combo:10},{name:"Wyrmhero Blade",damageType:"sword",animationType:"bigsword",attack:131,chargeTime:99,combo:80,holyDamage:!0,bravery:!0,faith:!0},{name:"Excalipur",l:eg("Excalipur"),damageType:"gun",animationType:"bigsword",attack:1,chargeTime:20,combo:20},{name:"Treaty-Blade",damageType:"sword",animationType:"bigsword",attack:67,chargeTime:30,combo:25},{name:"Sword of Kings",damageType:"sword",animationType:"bigsword",attack:53,chargeTime:30,combo:20},{name:"Kumbha",l:eg("Kumbha"),damageType:"katana",animationType:"sword",attack:117,chargeTime:31,combo:35},{name:"Kotetsu",l:eg("Katana 1"),damageType:"katana",animationType:"katana",attack:16,chargeTime:41,combo:20},{name:"Osafune",l:eg("Katana 1"),damageType:"katana",animationType:"katana",attack:26,chargeTime:31,combo:20},{name:"Kogarasumaru",l:eg("Katana 2"),damageType:"katana",animationType:"katana",attack:40,chargeTime:31,combo:20},{name:"Magoroku",l:eg("Katana 2"),damageType:"katana",animationType:"katana",attack:50,chargeTime:31,combo:20},{name:"Murasame",l:eg("Katana 3"),damageType:"katana",animationType:"katana",attack:62,chargeTime:31,combo:20,waterDamage:!0},{name:"Kiku-ichimonji",l:eg("Katana 3"),damageType:"katana",animationType:"katana",attack:71,chargeTime:31,combo:20},{name:"Yakei",l:eg("Katana 4"),damageType:"katana",animationType:"katana",attack:83,chargeTime:31,combo:20},{name:"Ame-no-Murakumo",l:eg("Katana 4"),damageType:"katana",animationType:"katana",attack:96,chargeTime:31,combo:20,windDamage:!0},{name:"Muramasa",l:eg("Katana 4"),damageType:"katana",animationType:"katana",attack:104,chargeTime:31,combo:20},{name:"Masamune",l:eg("Masamune"),damageType:"katana",animationType:"katana",attack:111,chargeTime:31,combo:30},{name:"Ashura",l:eg("Ninja Swords 1"),damageType:"dagger",animationType:"ninja",attack:72,chargeTime:22,combo:12},{name:"Sakura-saezuri",l:eg("Ninja Swords 1"),damageType:"dagger",animationType:"ninja",attack:77,chargeTime:22,combo:15},{name:"Kagenui",l:eg("Ninja Swords 1"),damageType:"dagger",animationType:"ninja",attack:81,chargeTime:22,combo:18},{name:"Koga Blade",l:eg("Ninja Swords 3"),damageType:"dagger",animationType:"ninja",attack:87,chargeTime:22,combo:22,earthDamage:!0},{name:"Iga Blade",l:eg("Ninja Swords 2"),damageType:"dagger",animationType:"ninja",attack:87,chargeTime:22,combo:22,waterDamage:!0},{name:"Orochi",l:eg("Ninja Swords 1"),damageType:"dagger",animationType:"ninja",attack:94,chargeTime:22,combo:25},{name:"Yagyu Darkblade",l:eg("Yagyu Darkblade & Mesa"),damageType:"dagger",animationType:"ninja",attack:98,chargeTime:24,combo:28,darkDamage:!0},{name:"Mesa",l:eg("Yagyu Darkblade & Mesa"),damageType:"dagger",animationType:"ninja",attack:102,chargeTime:22,combo:32},{name:"Javelin",l:eg("Spears 1"),damageType:"sword",animationType:"spear",attack:16,chargeTime:28,combo:4},{name:"Spear",l:eg("Spears 1"),damageType:"sword",animationType:"spear",attack:26,chargeTime:28,combo:4},{name:"Partisan",l:eg("Spears 2"),damageType:"sword",animationType:"spear",attack:34,chargeTime:28,combo:4},{name:"Heavy Lance",l:eg("Spears 2"),damageType:"sword",animationType:"spear",attack:42,chargeTime:28,combo:4},{name:"Storm Spear",l:eg("Spears 3"),damageType:"sword",animationType:"spear",attack:53,chargeTime:28,combo:4,lightningDamage:!0},{name:"Obelisk",l:eg("Spears 3"),damageType:"sword",animationType:"spear",attack:68,chargeTime:28,combo:4},{name:"Halberd",l:eg("Spears 4"),damageType:"sword",animationType:"spear",attack:75,chargeTime:28,combo:4},{name:"Trident",l:eg("Spears 4"),damageType:"sword",animationType:"spear",attack:85,chargeTime:28,combo:4,iceDamage:!0},{name:"Holy Lance",l:eg("Spears 5"),damageType:"sword",animationType:"spear",attack:91,chargeTime:28,combo:4,holyDamage:!0},{name:"Gungnir",l:eg("Spears 5"),damageType:"sword",animationType:"spear",attack:95,chargeTime:28,combo:4,fireDamage:!0},{name:"Dragon Whisker",l:eg("Dragon Whisker"),damageType:"sword",animationType:"spear",attack:100,chargeTime:28,combo:4},{name:"Vrsabha",l:eg("Vrsabha"),damageType:"sword",animationType:"spear",attack:108,chargeTime:28,combo:10},{name:"Zodiac Spear",l:eg("Zodiac Spear"),damageType:"sword",animationType:"spear",attack:141,chargeTime:28,combo:4},{name:"Oaken Pole",l:eg("Poles 1"),damageType:"pole",animationType:"pole",attack:15,chargeTime:25,combo:15},{name:"Cypress Pole",l:eg("Poles 2"),damageType:"pole",animationType:"pole",attack:22,chargeTime:25,combo:15,earthDamage:!0},{name:"Battle Bamboo",l:eg("Poles 2"),damageType:"pole",animationType:"pole",attack:34,chargeTime:25,combo:15},{name:"Musk Stick",l:eg("Poles 3"),damageType:"pole",animationType:"pole",attack:39,chargeTime:25,combo:15},{name:"Iron Pole",l:eg("Poles 3"),damageType:"pole",animationType:"pole",attack:46,chargeTime:25,combo:15},{name:"Six-fluted Pole",l:eg("Poles 4"),damageType:"pole",animationType:"pole",attack:59,chargeTime:25,combo:15,waterBonus:!0},{name:"Gokuu Pole",l:eg("Poles 4"),damageType:"pole",animationType:"pole",attack:72,chargeTime:25,combo:15},{name:"Zephyr Pole",l:eg("Poles 5"),damageType:"pole",animationType:"pole",attack:77,chargeTime:25,combo:15,windDamage:!0},{name:"Ivory Pole",l:eg("Poles 5"),damageType:"pole",animationType:"pole",attack:83,chargeTime:25,combo:15},{name:"Sweep",l:eg("Poles 6"),damageType:"pole",animationType:"pole",attack:88,chargeTime:25,combo:15},{name:"Eight-fluted Pole",l:eg("Poles 6"),damageType:"pole",animationType:"pole",attack:91,chargeTime:25,combo:15},{name:"Whale Whisker",l:eg("Whale Whisker"),damageType:"pole",animationType:"pole",attack:108,chargeTime:25,combo:15},{name:"Kanya",l:eg("Kanya"),damageType:"pole",animationType:"pole",attack:112,chargeTime:25,combo:35},{name:"Rod",l:eg("Rods 1"),damageType:"sword",animationType:"rod",attack:16,chargeTime:33,mag:2},{name:"Serpent Rod",l:eg("Rods 1"),damageType:"sword",animationType:"rod",attack:25,chargeTime:33,mag:2,iceDamage:!0},{name:"Healing Rod",l:eg("Rods 2"),damageType:"gun",animationType:"rod",attack:7,chargeTime:33,mag:2},{name:"Gaia Rod",l:eg("Rods 2"),damageType:"sword",animationType:"rod",attack:43,chargeTime:33,mag:2,earthDamage:!0},{name:"Power Rod",l:eg("Rods 3"),damageType:"sword",animationType:"rod",attack:56,chargeTime:33,mag:3},{name:"Empyrean Rod",l:eg("Rods 3"),damageType:"sword",animationType:"rod",attack:60,chargeTime:33,mag:2},{name:"Holy Rod",l:eg("Rods 4"),damageType:"sword",animationType:"rod",attack:63,chargeTime:33,mag:4,holyDamage:!0,holyBonus:!0},{name:"Rod of Faith",l:eg("Rod of Faith"),damageType:"gun",animationType:"rod",attack:21,chargeTime:33,mag:6},{name:"Oak Staff",l:eg("Staves 1"),damageType:"katana",animationType:"staff",attack:15,chargeTime:34,mag:2},{name:"Cherry Staff",l:eg("Staves 2"),damageType:"katana",animationType:"staff",attack:20,chargeTime:34,mag:3,windBonus:!0},{name:"Wizard's Staff",l:eg("Staves 2"),damageType:"katana",animationType:"staff",attack:26,chargeTime:34,mag:4},{name:"Flame Staff",l:eg("Staves 3"),damageType:"katana",animationType:"staff",attack:34,chargeTime:34,mag:4,fireBonus:!0},{name:"Storm Staff",l:eg("Staves 3"),damageType:"katana",animationType:"staff",attack:36,chargeTime:34,mag:4,lightningBonus:!0},{name:"Glacial Staff",l:eg("Staves 4"),damageType:"katana",animationType:"staff",attack:38,chargeTime:34,mag:5,iceBonus:!0},{name:"Golden Staff",l:eg("Staves 4"),damageType:"katana",animationType:"staff",attack:42,chargeTime:34,mag:6},{name:"Judicer's Staff",l:eg("Staves 5"),damageType:"katana",animationType:"staff",attack:48,chargeTime:34,mag:7},{name:"Cloud Staff",l:eg("Staves 5"),damageType:"katana",animationType:"staff",attack:49,chargeTime:34,mag:7,lightningBonus:!0,windBonus:!0,waterBonus:!0},{name:"Staff of the Magi",l:eg("Staff of the Magi"),damageType:"katana",animationType:"staff",attack:53,chargeTime:34,mag:8,iceBonus:!0,windBonus:!0,holyBonus:!0},{name:"Shortbow",l:eg("Bows 1"),damageType:"dagger",animationType:"bow",attack:15,chargeTime:36,combo:5},{name:"Silver Bow",l:eg("Bows 2"),damageType:"dagger",animationType:"bow",attack:19,chargeTime:36,combo:5},{name:"Aevis Killer",l:eg("Bows 2"),damageType:"dagger",animationType:"bow",attack:25,chargeTime:36,combo:5},{name:"Killer Bow",l:eg("Bows 3"),damageType:"dagger",animationType:"bow",attack:36,chargeTime:36,combo:5},{name:"Longbow",l:eg("Bows 3"),damageType:"dagger",animationType:"bow",attack:48,chargeTime:36,combo:0},{name:"Elfin Bow",l:eg("Bows 4"),damageType:"dagger",animationType:"bow",attack:54,chargeTime:36,combo:5},{name:"Loxley Bow",l:eg("Bows 4"),damageType:"dagger",animationType:"bow",attack:60,chargeTime:36,combo:5},{name:"Giant Stonebow",l:eg("Bows 5"),damageType:"dagger",animationType:"bow",attack:73,chargeTime:36,combo:5},{name:"Burning Bow",l:eg("Bows 5"),damageType:"dagger",animationType:"bow",attack:77,chargeTime:36,combo:5,fireBonus:!0},{name:"Traitor's Bow",l:eg("Bows 6"),damageType:"dagger",animationType:"bow",attack:82,chargeTime:36,combo:5},{name:"Yoichi Bow",l:eg("Bows 6"),damageType:"dagger",animationType:"bow",attack:89,chargeTime:36,combo:5},{name:"Perseus Bow",l:eg("Bows 7"),damageType:"dagger",animationType:"bow",attack:92,chargeTime:36,combo:5},{name:"Artemis Bow",l:eg("Bows 7"),damageType:"dagger",animationType:"bow",attack:94,chargeTime:36,combo:5},{name:"Sagittarius",l:eg("Sagittarius"),damageType:"dagger",animationType:"bow",attack:97,chargeTime:36,combo:5},{name:"Dhanusha",l:eg("Dhanusha"),damageType:"dagger",animationType:"bow",attack:109,chargeTime:36,combo:20},{name:"Seitengrat",damageType:"dagger",animationType:"bow",attack:224,chargeTime:10,combo:25},{name:"Bowgun",l:eg("Crossbows 1"),damageType:"sword",animationType:"xbow",attack:21,chargeTime:24,combo:7},{name:"Crossbow",l:eg("Crossbows 1"),damageType:"sword",animationType:"xbow",attack:31,chargeTime:24,combo:7},{name:"Paramina Crossbow",l:eg("Crossbows 2"),damageType:"sword",animationType:"xbow",attack:42,chargeTime:24,combo:7},{name:"Recurve Crossbow",l:eg("Crossbows 2"),damageType:"sword",animationType:"xbow",attack:57,chargeTime:24,combo:7},{name:"Hunting Crossbow",l:eg("Crossbows 3"),damageType:"sword",animationType:"xbow",attack:70,chargeTime:24,combo:7},{name:"Penetrator Crossbow",l:eg("Crossbows 3"),damageType:"sword",animationType:"xbow",attack:79,chargeTime:24,combo:7},{name:"Gastrophetes",l:eg("Crossbows 4"),damageType:"sword",animationType:"xbow",attack:84,chargeTime:24,combo:7},{name:"Tula",l:eg("Crossbows 4"),damageType:"sword",animationType:"xbow",attack:91,chargeTime:24,combo:7},{name:"Altair",l:eg("Guns 1"),damageType:"gun",animationType:"gun",attack:6,chargeTime:50,combo:5},{name:"Capella",l:eg("Guns 2"),damageType:"gun",animationType:"gun",attack:8,chargeTime:50,combo:5},{name:"Vega",l:eg("Guns 2"),damageType:"gun",animationType:"gun",attack:13,chargeTime:50,combo:5},{name:"Sirius",l:eg("Guns 3"),damageType:"gun",animationType:"gun",attack:17,chargeTime:50,combo:5},{name:"Betelgeuse",l:eg("Guns 3"),damageType:"gun",animationType:"gun",attack:22,chargeTime:50,combo:5},{name:"Ras Algethi",l:eg("Guns 4"),damageType:"gun",animationType:"gun",attack:29,chargeTime:50,combo:5},{name:"Aldebaran",l:eg("Guns 4"),damageType:"gun",animationType:"gun",attack:33,chargeTime:50,combo:5},{name:"Spica",l:eg("Guns 5"),damageType:"gun",animationType:"gun",attack:38,chargeTime:50,combo:5},{name:"Antares",l:eg("Guns 5"),damageType:"gun",animationType:"gun",attack:41,chargeTime:50,combo:5},{name:"Arcturus",l:eg("Guns 6"),damageType:"gun",animationType:"gun",attack:45,chargeTime:50,combo:5},{name:"Fomalhaut",l:eg("Guns 6"),damageType:"gun",animationType:"gun",attack:52,chargeTime:50,combo:5},{name:"Mithuna",l:eg("Mithuna"),damageType:"gun",animationType:"gun",attack:66,chargeTime:50,combo:10},{name:"Hornito",l:eg("Hand-bombs 1"),damageType:"hammer",animationType:"handbomb",attack:66,chargeTime:33},{name:"Fumarole",l:eg("Hand-bombs 2"),damageType:"hammer",animationType:"handbomb",attack:71,chargeTime:33,waterBonus:!0},{name:"Tumulus",l:eg("Hand-bombs 2"),damageType:"hammer",animationType:"handbomb",attack:76,chargeTime:33},{name:"Caldera",l:eg("Hand-bombs 3"),damageType:"hammer",animationType:"handbomb",attack:83,chargeTime:33},{name:"Volcano",l:eg("Hand-bombs 3"),damageType:"hammer",animationType:"handbomb",attack:90,chargeTime:33},{name:"Makara",l:eg("Hand-bombs 4"),damageType:"hammer",animationType:"handbomb",attack:96,chargeTime:33}]),eU=eK([{name:"Leather Cap",l:eg("Light Armor 1")},{name:"Headgear",l:eg("Light Armor 2")},{name:"Headguard",l:eg("Light Armor 2")},{name:"Leather Headgear",l:eg("Light Armor 3")},{name:"Horned Hat",l:eg("Light Armor 3")},{name:"Balaclava",l:eg("Light Armor 4"),str:1},{name:"Soldier's Cap",l:eg("Light Armor 4")},{name:"Green Beret",l:eg("Light Armor 5"),spd:3},{name:"Red Cap",l:eg("Light Armor 5"),vit:3},{name:"Headband",l:eg("Light Armor 6"),str:2},{name:"Pirate Hat",l:eg("Light Armor 6")},{name:"Goggle Mask",l:eg("Light Armor 7")},{name:"Adamant Hat",l:eg("Light Armor 7")},{name:"Officer's Hat",l:eg("Light Armor 8"),spd:3},{name:"Chakra Band",l:eg("Light Armor 8"),str:2},{name:"Thief's Cap",l:eg("Light Armor 9"),spd:4},{name:"Gigas Hat",l:eg("Light Armor 9"),mag:2},{name:"Chaperon",l:eg("Light Armor 10")},{name:"Crown of Laurels",l:eg("Light Armor 11")},{name:"Renewing Morion",l:eg("Light Armor 12"),vit:4},{name:"Dueling Mask",l:eg("Light Armor 13"),str:2},{name:"Leather Helm",l:eg("Heavy Armor 1"),str:2},{name:"Bronze Helm",l:eg("Heavy Armor 1"),str:2},{name:"Sallet",l:eg("Heavy Armor 2"),str:3},{name:"Iron Helm",l:eg("Heavy Armor 2"),str:3},{name:"Barbut",l:eg("Heavy Armor 3"),str:4},{name:"Winged Helm",l:eg("Heavy Armor 3"),str:5,spd:3},{name:"Golden Helm",l:eg("Heavy Armor 4"),str:5},{name:"Burgonet",l:eg("Heavy Armor 4"),str:4},{name:"Close Helmet",l:eg("Heavy Armor 5"),str:5},{name:"Bone Helm",l:eg("Heavy Armor 5"),str:6},{name:"Diamond Helm",l:eg("Heavy Armor 6"),str:7,vit:3},{name:"Steel Mask",l:eg("Heavy Armor 7"),str:7,spd:4},{name:"Platinum Helm",l:eg("Heavy Armor 8"),str:8},{name:"Giant's Helmet",l:eg("Heavy Armor 9"),str:8},{name:"Dragon Helm",l:eg("Heavy Armor 10"),str:9},{name:"Genji Helm",l:eg("Genji Armor"),str:9,mag:4},{name:"Magepower Shishak",l:eg("Heavy Armor 11"),str:11,mag:5},{name:"Grand Helm",l:eg("Heavy Armor 12"),str:12,vit:10},{name:"Cotton Cap",l:eg("Mystic Armor 1"),mag:2},{name:"Magick Curch",l:eg("Mystic Armor 1"),mag:2},{name:"Pointy Hat",l:eg("Mystic Armor 2"),mag:2},{name:"Topkapi Hat",l:eg("Mystic Armor 2"),mag:3},{name:"Calot Hat",l:eg("Mystic Armor 3"),mag:3},{name:"Wizard's Hat",l:eg("Mystic Armor 3"),mag:4},{name:"Lambent Hat",l:eg("Mystic Armor 4"),mag:4,spd:3},{name:"Feathered Cap",l:eg("Mystic Armor 4"),mag:5},{name:"Mage's Hat",l:eg("Mystic Armor 5"),mag:5},{name:"Lamia's Tiara",l:eg("Mystic Armor 5"),mag:4,vit:7},{name:"Sorcerer's Hat",l:eg("Mystic Armor 6"),mag:6},{name:"Black Cowl",l:eg("Mystic Armor 6"),mag:5,spd:4},{name:"Astrakhan Hat",l:eg("Mystic Armor 7"),mag:6},{name:"Gaia Hat",l:eg("Mystic Armor 7"),mag:7},{name:"Hypnocrown",l:eg("Mystic Armor 8"),str:2,mag:7},{name:"Gold Hairpin",l:eg("Mystic Armor 8"),mag:7,vit:8},{name:"Celebrant's Miter",l:eg("Mystic Armor 9"),mag:6,spd:5},{name:"Black Mask",l:eg("Mystic Armor 10"),mag:8},{name:"White Mask",l:eg("Mystic Armor 11"),mag:8},{name:"Golden Skullcap",l:eg("Mystic Armor 12"),mag:10,spd:3},{name:"Circlet",l:eg("Mystic Armor 13"),str:2,mag:10}]),eq=eK([{name:"Leather Clothing",l:eg("Light Armor 1")},{name:"Chromed Leathers",l:eg("Light Armor 2")},{name:"Leather Breastplate",l:eg("Light Armor 2")},{name:"Bronze Chestplate",l:eg("Light Armor 3")},{name:"Ringmail",l:eg("Light Armor 3"),str:1},{name:"Windbreaker",l:eg("Light Armor 4")},{name:"Heavy Coat",l:eg("Light Armor 4")},{name:"Survival Vest",l:eg("Light Armor 5"),vit:5},{name:"Brigandine",l:eg("Light Armor 5")},{name:"Jujitsu Gi",l:eg("Light Armor 6"),str:2},{name:"Viking Coat",l:eg("Light Armor 6")},{name:"Metal Jerkin",l:eg("Light Armor 7")},{name:"Adamant Vest",l:eg("Light Armor 7")},{name:"Barrel Coat",l:eg("Light Armor 8")},{name:"Power Vest",l:eg("Light Armor 8"),str:2},{name:"Ninja Gear",l:eg("Light Armor 9"),spd:4},{name:"Gigas Chestplate",l:eg("Light Armor 9"),mag:2},{name:"Minerva Bustier",l:eg("Light Armor 10")},{name:"Rubber Suit",l:eg("Light Armor 11")},{name:"Mirage Vest",l:eg("Light Armor 12"),vit:10,spd:10},{name:"Brave Suit",l:eg("Light Armor 13"),bravery:!0},{name:"Leather Armor",l:eg("Heavy Armor 1"),str:2},{name:"Bronze Armor",l:eg("Heavy Armor 1"),str:2},{name:"Scale Armor",l:eg("Heavy Armor 2"),str:3,spd:3},{name:"Iron Armor",l:eg("Heavy Armor 2"),str:3},{name:"Linen Cuirass",l:eg("Heavy Armor 3"),str:4},{name:"Chainmail",l:eg("Heavy Armor 3"),str:3},{name:"Golden Armor",l:eg("Heavy Armor 4"),str:4},{name:"Shielded Armor",l:eg("Heavy Armor 4"),str:5},{name:"Demon Mail",l:eg("Heavy Armor 5"),str:5,vit:3},{name:"Bone Mail",l:eg("Heavy Armor 5"),str:6},{name:"Diamond Armor",l:eg("Heavy Armor 6"),str:7,vit:5},{name:"Mirror Mail",l:eg("Heavy Armor 7"),str:6},{name:"Platinum Armor",l:eg("Heavy Armor 8"),str:7},{name:"Carabineer Mail",l:eg("Heavy Armor 9"),str:8,mag:2},{name:"Dragon Mail",l:eg("Heavy Armor 10"),str:8},{name:"Genji Armor",l:eg("Genji Armor"),str:9,mag:3},{name:"Maximillian",l:eg("Heavy Armor 11"),str:9,spd:6},{name:"Grand Armor",l:eg("Heavy Armor 12"),str:12},{name:"Cotton Shirt",l:eg("Mystic Armor 1"),mag:1},{name:"Light Woven Shirt",l:eg("Mystic Armor 1"),mag:2},{name:"Silken Shirt",l:eg("Mystic Armor 2"),mag:2},{name:"Kilimweave Shirt",l:eg("Mystic Armor 2"),mag:3},{name:"Shepherd's Bolero",l:eg("Mystic Armor 3"),mag:3},{name:"Wizard's Robes",l:eg("Mystic Armor 3"),mag:4},{name:"Chanter's Djellaba",l:eg("Mystic Armor 4"),mag:4,vit:5},{name:"Traveler's Vestment",l:eg("Mystic Armor 4"),mag:5},{name:"Mage's Habit",l:eg("Mystic Armor 5"),mag:6},{name:"Enchanter's Habit",l:eg("Mystic Armor 5"),mag:7,vit:10},{name:"Sorcerer's Habit",l:eg("Mystic Armor 6"),mag:8},{name:"Black Garb",l:eg("Mystic Armor 6"),mag:6,spd:3},{name:"Carmagnole",l:eg("Mystic Armor 7"),mag:7},{name:"Maduin Gear",l:eg("Mystic Armor 7"),str:1,mag:8},{name:"Jade Gown",l:eg("Mystic Armor 8"),mag:8},{name:"Gaia Gear",l:eg("Mystic Armor 8"),mag:8},{name:"Cleric's Robes",l:eg("Mystic Armor 9"),mag:9},{name:"White Robes",l:eg("Mystic Armor 11"),mag:10,spd:4,holyBonus:!0},{name:"Black Robes",l:eg("Mystic Armor 10"),mag:12,darkBonus:!0},{name:"Glimmering Robes",l:eg("Mystic Armor 12"),mag:12,vit:10},{name:"Lordly Robes",l:eg("Mystic Armor 13"),str:5,mag:15}]),e$=eK([{name:"Bangle",l:eg("Accessories 2")},{name:"Berserker Bracers",l:eg("Accessories 13"),berserk:!0},{name:"Ruby Ring",l:eg("Accessories 15")},{name:"Bubble Belt",l:eg("Accessories 17")},{name:"Winged Boots",l:eg("Accessories 19"),spd:5},{name:"Hermes Sandals",l:eg("Accessories 20"),str:5,haste:!0},{name:"Ring of Renewal",l:eg("Accessories 22")},{name:"Orrachea Armlet",l:eg("Accessories 1")},{name:"Blazer Gloves",l:eg("Accessories 11"),focus:!0},{name:"Steel Gorget",l:eg("Accessories 4"),adrenaline:!0},{name:"Magick Gloves",l:eg("Accessories 13"),serenity:!0},{name:"Leather Gorget",l:eg("Accessories 6"),spellbreaker:!0},{name:"Amber Armlet",l:eg("Accessories 9"),spd:2,brawler:!0},{name:"Sage's Ring",l:eg("Accessories 14")},{name:"Agate Ring",l:eg("Accessories 14"),vit:20,agateRing:!0},{name:"Opal Ring",l:eg("Accessories 20"),mag:5},{name:"Battle Harness",l:eg("Accessories 4"),str:2},{name:"Gauntlets",l:eg("Accessories 8"),vit:5},{name:"Jade Collar",l:eg("Accessories 10"),spd:3},{name:"Cameo Belt",l:eg("Accessories 16"),mag:3,cameoBelt:!0},{name:"Indigo Pendant",l:eg("Accessories 19"),spd:7},{name:"Genji Gloves",l:eg("Genji Armor"),mag:3,genjiGloves:!0},{name:"Argyle Armlet",l:eg("Accessories 3"),str:1},{name:"Tourmaline Ring",l:eg("Accessories 5")},{name:"Rose Corsage",l:eg("Accessories 7"),mag:1},{name:"Black Belt",l:eg("Accessories 9"),vit:7},{name:"Nishijin Belt",l:eg("Accessories 10"),mag:3},{name:"Gillie Boots",l:eg("Accessories 12"),str:1,spd:10},{name:"Bowline Sash",l:eg("Accessories 15"),mag:2},{name:"Fuzzy Miter",l:eg("Accessories 17"),str:2},{name:"Sash",l:eg("Accessories 18"),spd:20},{name:"Power Armlet",l:eg("Accessories 18"),str:3},{name:"Germinas Boots",l:eg("Accessories 22"),vit:20,spd:50},{name:"Quasimodo Boots",l:eg("Accessories 21")},{name:"Ribbon",l:eg("Ribbon")},{name:"Steel Poleyns",l:eg("Accessories 12")},{name:"Diamond Armlet",l:eg("Accessories 3")},{name:"Thief's Cuffs",l:eg("Accessories 8"),spd:1},{name:"Pheasant Netsuke",l:eg("Accessories 11")},{name:"Nihopalaoa",l:eg("Accessories 21")},{name:"Embroidered Tippet",l:eg("Accessories 5")},{name:"Firefly",l:eg("Accessories 2"),str:1,mag:1},{name:"Golden Amulet",l:eg("Accessories 6")},{name:"Cat-ear Hood",l:eg("Accessories 16"),spd:3},{name:"Turtleshell Choker",l:eg("Accessories 7"),mag:2,spd:3},{name:"Manufacted Nethicite"},{name:"Goddess's Magicite"},{name:"Dawn Shard"}]);function eJ(e){let[a,...l]=e;return{initialSwing:a/30,comboSwing:l.length?l.reduce((e,a)=>e+a)/l.length/30:0}}const eY=function(e,a){let l={};for(let t in e)l[t]=a(e[t]);return l}({unarmed:[[36,15,23],[36,15,23],[36,15,32],[36,20,20],[36,18,18],[36,26,28]],sword:[[36,15,16],[36,15,15],[36,18,19],[36,15,15],[36,18,18],[36,20,20]],bigsword:[[36,15,15],[36,15,18],[36,19,19],[36,15,15],[36,18,20],[36,20,20]],dagger:[[36,18,23],[36,15,15],[36,23,23],[36,15,23],[36,15,15,18],[36,20,23]],ninja:[[36,15,22],[36,15,15],[36,19,19],[36,15,15],[36,15,20],[36,15,15]],katana:[[36,17,18],[36,15,15],[36,18,19],[36,15,15],[36,20,20],[36,18,25]],hammer:[[36,22,23],[36,18,18],[36,20,21],[36,15,15],[36,15,18,18],[36,26,26]],mace:[[36,15,15],[36,23,23],[36,21,23],[36,15,15],[36,18,20,30],[36,23,23]],pole:[[36,19,19],[36,19,25],[36,16,17],[36,18,18],[36,23,28],[36,20,22]],spear:[[36,18,22],[36,18,18],[36,17,20],[36,15,20],[36,17,20],[36,23,28]],bow:[[42],[48],[48],[42],[42],[42]],xbow:[[42],[48],[42],[42],[42],[48]],gun:[[42],[48],[42],[42],[42],[48]],measure:[[36],[36],[36],[36],[36],[36]],rod:[[36,18],[36,18],[36,18],[36,18],[36,18],[36,18]],handbomb:[[42],[42],[42],[42],[42],[42]],staff:[[36,18],[36,18],[36,18],[36,18],[36,18],[36,18]]},e=>e.map(eJ));function e_(e,a,l,t){let n=e*a,r=e*l;return n>=t?(n+r)/2-t:r<=t?0:(1-(t-n)/(r-n))*(r-t)/2}function eX(e,a,l){e??=a.chargeTime;let t=1/(1.022342422396204*a.spd+5.268190606448866)+.1,n=1;a.swiftness1&&(n-=.12),a.swiftness2&&(n-=.12),a.swiftness3&&(n-=.12);let r=1/(.8+l.battleSpeed/5),o=1;return"attack"===a.ability.alg&&a.berserk&&(o/=2),a.haste&&(o/=1.5),(e*t+.25)*n*r*o}function e1(e,a,l,t){let n=a??l;for(let a of eV)n[`${a}Damage`]&&(l[`${a}Bonus`]&&(e*=1.5),e*=t[`${a}Reaction`]);return t.oil&&n.fireDamage&&(e*=3),!l.agateRing&&("sand"===t.terrain?n.earthDamage&&(e*=1.2):"water"===t.terrain?n.lightningDamage||n.waterDamage?e*=1.2:n.earthDamage&&(e*=.5):"snow"===t.terrain&&n.iceDamage&&(e*=1.2),("windy"===t.weather||"windy and rainy"===t.weather)&&(n.fireDamage||n.windDamage?e*=1.2:n.waterDamage&&(e*=.5)),("rainy"===t.weather||"windy and rainy"===t.weather)&&(n.lightningDamage?e*=1.2:n.fireDamage&&(e*=.5)),"foggy"===t.weather&&n.waterDamage&&(e*=1.2)),e}const e0=new Set(["fireDamage","iceDamage","lightningDamage","waterDamage","windDamage","earthDamage","darkDamage","holyDamage","agateRing","animationType"]);function e2(e,a,l){let t=[],n=[];e:for(let l of e)for(let e in l)if(a.has(e)){for(let e in l)if(a.has(e)&&e0.has(e)){n.push(l);continue e}t.push(l);continue e}for(let e=0;et)continue a}t.splice(e--,1);break}return t.push(...n),t.length||t.push(l?void 0:e[0]),t}const e3=eK([{name:"Onion Arrows",type:"bow",attack:1},{name:"Parallel Arrows",type:"bow",attack:2},{name:"Fiery Arrows",type:"bow",attack:1,fireDamage:!0},{name:"Bamboo Arrows",type:"bow",attack:2},{name:"Lightning Arrows",type:"bow",attack:2,lightningDamage:!0},{name:"Assassin's Arrows",type:"bow",attack:3},{name:"Icecloud Arrows",type:"bow",attack:4,iceDamage:!0},{name:"Artemis Arrows",type:"bow",attack:5,earthDamage:!0},{name:"Onion Bolts",type:"xbow",attack:1},{name:"Long Bolts",type:"xbow",attack:1},{name:"Stone Bolts",type:"xbow",attack:1},{name:"Lead Bolts",type:"xbow",attack:2},{name:"Black Bolts",type:"xbow",attack:2},{name:"Time Bolts",type:"xbow",attack:2},{name:"Sapping Bolts",type:"xbow",attack:3},{name:"Grand Bolts",type:"xbow",attack:4},{name:"Onion Shot",type:"gun",attack:1},{name:"Silent Shot",type:"gun",attack:1},{name:"Aqua Shot",type:"gun",attack:3,waterDamage:!0},{name:"Wyrmfire Shot",type:"gun",attack:3,fireDamage:!0},{name:"Mud Shot",type:"gun",attack:2,earthDamage:!0},{name:"Windslicer Shot",type:"gun",attack:4,windDamage:!0},{name:"Dark Shot",type:"gun",attack:4,darkDamage:!0},{name:"Stone Shot",type:"gun",attack:3},{name:"Onion Bombs",type:"handbomb",attack:1},{name:"Poison Bombs",type:"handbomb",attack:2},{name:"Stun Bombs",type:"handbomb",attack:2},{name:"Oil Bombs",type:"handbomb",attack:3},{name:"Chaos Bombs",type:"handbomb",attack:4},{name:"Stink Bombs",type:"handbomb",attack:2},{name:"Water Bombs",type:"handbomb",attack:5,waterDamage:!0},{name:"Castellanos",type:"handbomb",attack:6}]);function e5(e,a,l){let t,n;let r={weapon:l.weapons[0],ammo:void 0,armor:void 0,helm:void 0,accessory:void 0},o=function(e,a){let{ability:l}=e;return"attack"===l.alg?function(e,a){let l=new Set(["attack","spd","fireDamage","iceDamage","lightningDamage","waterDamage","windDamage","earthDamage","darkDamage","holyDamage","holyBonus","darkBonus","focus","adrenaline"]);for(let t of(e.combo>0&&l.add("genjiGloves"),(a.parry||a.block>0||("windy"===a.weather||"windy and rainy"===a.weather)&&("bow"===e.animationType||"xbow"===e.animationType))&&l.add("cameoBelt"),("other"!==a.weather||"other"!==a.terrain)&&l.add("agateRing"),["berserk","haste","bravery"]))a[t]||l.add(t);for(let a of["focus","adrenaline"])e[a]||l.add(a);switch(e.damageType){case"unarmed":l.add("str"),e.brawler||l.add("brawler");break;case"sword":case"pole":case"dagger":l.add("str");break;case"hammer":l.add("str"),l.add("vit");break;case"mace":l.add("mag");break;case"katana":l.add("str"),l.add("mag")}return l}(e,a):"magick"===l.alg?function(e,a,l){let t=new Set(["mag","spd"]);for(let a of eV)if(e[`${a}Damage`]){t.add(`${a}Bonus`);break}for(let e of(("other"!==l.weather||"other"!==l.terrain)&&t.add("agateRing"),["haste","faith"]))l[e]||t.add(e);for(let e of["serenity","spellbreaker"])a[e]||t.add(e);return t}(l,e,a):function(e,a){let l=new Set(["spd"]);return"Telekinesis"===e.name?(l.add("attack"),l.add("animationType")):"Souleater"===e.name&&(l.add("attack"),l.add("str")),a.haste||l.add("haste"),l}(l,a)}(eQ(e,r),a),i=e2(l.weapons,o,!1),s=e2(l.armors,o,!0),c=e2(l.helms,o,!0),m=e2(l.accessories,o,!0);for(let l of i){r.weapon=l;let i=e2(e3.filter(e=>e.type===l.animationType),o,!1);for(let l of i)for(let o of(r.ammo=l,s))for(let l of(r.armor=o,c))for(let o of(r.helm=l,m)){r.accessory=o;let l=eQ(e,r),i=function(e,a){let{ability:l}=e;return"attack"===l.alg?function(e,a){let l;switch(e.damageType){case"unarmed":{let t=e.brawler?(e.str+a.level)/2:11;l=e_(t,1,1.125,a.def)*e.str*(a.level+e.str)/256;break}case"sword":l=e_(e.attack,1,1.125,a.def)*(1+e.str*(a.level+e.str)/256);break;case"pole":l=e_(e.attack,1,1.125,a.mdef)*(1+e.str*(a.level+e.str)/256);break;case"mace":l=e_(e.attack,1,1.125,a.def)*(1+e.mag*(a.level+e.mag)/256);break;case"katana":l=e_(e.attack,1,1.125,a.def)*(1+e.str*(a.level+e.mag)/256);break;case"hammer":l=e_(e.attack,0,1.111,a.def)*(1+e.str*(a.level+e.str)/128);break;case"dagger":l=e_(e.attack,1,1.125,a.def)*(1+e.str*(a.level+e.spd)/218);break;case"gun":{let a=1.0625*e.attack;l=a*a;break}default:throw Error()}let t=l;"gun"===e.damageType&&a.resistGun&&(t/=8),t=e1(t,void 0,e,a),e.berserk&&(t*=1.5),e.bravery&&(t*=1.3),e.focus&&100===a.percentHp&&(t*=1.5),e.adrenaline&&a.percentHp<20&&(t*=2);let n=t;"gun"===e.damageType||e.cameoBelt||(a.block&&(n*=(100-a.block)/100),a.parry&&(n*=.75),("windy"===a.weather||"windy and rainy"===a.weather)&&("bow"===e.animationType?n*=.8:"xbow"===e.animationType&&(n*=.5)));let r=n,o=eY[e.animationType][a.character],i=o.initialSwing;if(e.combo>0){let l=Math.min(1,e.combo*(e.genjiGloves?1.8:.7)/100);if(0===o.comboSwing||"gun"===e.damageType)r*=1+l;else{let e;let t=o.comboSwing;i+=(e=a.percentHp>25?1.873:a.percentHp>12?2.752:a.percentHp>6?4.509:8.028)*t*l,r*=1+e*l}}let s=eX(void 0,e,a),c=s+i,m=r/c;return{dps:m,baseDmg:l,modifiedDamage:t,nonAvoidedDamage:n,comboDamage:r,chargeTime:s,animationTime:i}}(e,a):"magick"===l.alg?function(e,a,l){let t="heal"===e.special,n=e_(e.att,1,1.125,t?0:l.mdef)*(2+a.mag*(l.level+a.mag)/256),r=n;r=e1(r,e,a,l),(l.undead&&"drain"===e.special||!l.undead&&t)&&(r=0),a.faith&&(r*=t?1.5:1.3),a.serenity&&100===l.percentHp&&(r*=1.5),a.spellbreaker&&l.percentHp<20&&(r*=t?1.5:2);let o=r,i=o,s=e.at/30;if(null!=e.aoe){let a=e.aoe/30,t=l.targetCount-1;s+=t*a,i*=l.targetCount}let c=eX(e.ct,a,l),m=c+s,u=i/m;return{dps:u,baseDmg:n,modifiedDamage:r,nonAvoidedDamage:o,comboDamage:i,chargeTime:c,animationTime:s}}(l,e,a):function(e,a,l){let t=0;switch(e.name){case"1000 Needles":t=1e3;break;case"Souleater":t=l.undead?0:1.4*e_(a.attack,1,1.125,0)*(1+a.str*(l.level+a.str)/256);break;case"Gil Toss":t=Math.min(1e4,l.partyMaxHp*l.percentHp/100);break;case"Horology":t=l.minuteOnesDigit*l.minuteOnesDigit*l.level/2;break;case"Telekinesis":t=(a.attack*l.targetLevel-1)/2}let n=t,r=n,o=l.level-l.targetLevel;o>0&&(o*=3);let i=Math.max(0,Math.min(e.chn+o,100));if(r*=i/100,"Telekinesis"===e.name)switch(a.animationType){case"bow":case"gun":case"xbow":case"handbomb":r=0}let s=r,c=e.at/30;if(null!=e.aoe){let a=e.aoe/30,t=l.targetCount-1;c+=t*a,"Gil Toss"===e.name?t>0&&(c-=20/30):s*=l.targetCount}let m=eX(e.ct,a,l),u=m+c,g=s/u;return{dps:g,baseDmg:t,modifiedDamage:n,nonAvoidedDamage:r,comboDamage:s,chargeTime:m,animationTime:c}}(l,e,a)}(l,a);(!t||i.dps>t.dps)&&(t=i,n={...r})}}return{ability:e.ability,doll:n,dps:t}}const e4={str:[23,24,23,25,21,20],mag:[22,18,20,20,24,21],vit:[24,24,26,20,23,23],spd:[24,24,23,23,23,24]},e6={str:[72,67,63,69,68,65],mag:[67,59,63,56,70,72],vit:[48,45,47,36,44,48],spd:[18,19,18,16,17,16]},e8={name:"Attack",text:"Attack with weapon in hand.",alg:"attack"},e7=[{name:"Cure",text:"Restore a small amount of HP to one ally.",l:eg("White Magick 1"),alg:"magick",ct:23,at:111,att:20,special:"heal"},{name:"Cura",text:"Restore HP to all allies in range.",l:eg("White Magick 4"),alg:"magick",ct:23,at:117,aoe:30,att:46,special:"heal"},{name:"Curaga",text:"Restore a large amount of HP to one ally.",l:eg("White Magick 6"),alg:"magick",ct:23,at:144,att:86,special:"heal"},{name:"Curaja",text:"Restore a large amount of HP to all allies in range.",l:eg("White Magick 9"),alg:"magick",ct:23,at:114,aoe:30,att:120,special:"heal"},{name:"Holy",text:"Deal heavy holy damage to one target.",l:eg("White Magick 11"),alg:"magick",ct:23,at:227,att:157,holyDamage:!0},{name:"Fire",text:"Deal fire damage to one foe.",l:eg("Black Magick 1"),alg:"magick",ct:23,at:75,att:22,fireDamage:!0},{name:"Fira",text:"Deal fire damage to all foes in range.",l:eg("Black Magick 5"),alg:"magick",ct:23,at:75,aoe:30,att:67,fireDamage:!0},{name:"Firaga",text:"Deal heavy fire damage to all foes in range.",l:eg("Black Magick 9"),alg:"magick",ct:23,at:75,aoe:30,att:120,fireDamage:!0},{name:"Thunder",text:"Deal lightning damage to one foe.",l:eg("Black Magick 1"),alg:"magick",ct:23,at:75,att:23,lightningDamage:!0},{name:"Thundara",text:"Deal lightning damage to all foes in range.",l:eg("Black Magick 6"),alg:"magick",ct:23,at:84,aoe:114,att:68,lightningDamage:!0},{name:"Thundaga",text:"Deal heavy lightning damage to all foes in range.",l:eg("Black Magick 9"),alg:"magick",ct:23,at:96,aoe:48,att:122,lightningDamage:!0},{name:"Blizzard",text:"Deal ice damage to one foe.",l:eg("Black Magick 2"),alg:"magick",ct:23,at:102,att:25,iceDamage:!0},{name:"Blizzara",text:"Deal ice damage to all foes in range.",l:eg("Black Magick 6"),alg:"magick",ct:23,at:102,aoe:30,att:70,iceDamage:!0},{name:"Blizzaga",text:"Deal heavy ice damage to all foes in range.",l:eg("Black Magick 10"),alg:"magick",ct:23,at:105,aoe:75,att:125,iceDamage:!0},{name:"Aero",text:"Deal wind damage to all foes in range.",l:eg("Black Magick 4"),alg:"magick",ct:23,at:90,aoe:24,att:51,windDamage:!0},{name:"Aeroga",text:"Deal heavy wind damage to all foes in range.",l:eg("Black Magick 8"),alg:"magick",ct:23,at:108,aoe:36,att:103,windDamage:!0},{name:"Aqua",text:"Deal water damage to one foe.",l:eg("Black Magick 3"),alg:"magick",ct:23,at:153,att:37,waterDamage:!0},{name:"Bio",text:"Inflict Sap and deal damage to all foes in range.",l:eg("Black Magick 7"),alg:"magick",ct:23,at:106,aoe:30,att:67},{name:"Shock",text:"Deal heavy damage to one foe.",l:eg("Black Magick 11"),alg:"magick",ct:23,at:123,att:133},{name:"Scourge",text:"Inflict Sap and deal heavy damage to all foes in range.",l:eg("Black Magick 12"),alg:"magick",ct:23,at:117,aoe:45,att:142},{name:"Flare",text:"Deal massive damage to one foe.",l:eg("Black Magick 12"),alg:"magick",ct:23,at:305,att:163},{name:"Scathe",text:"Deal massive damage to all foes in range.",l:eg("Black Magick 13"),alg:"magick",ct:23,at:218,aoe:0,att:190},{name:"Drain",text:"Transfer HP from one foe to the caster.",l:eg("Green Magick 2"),alg:"magick",ct:23,at:129,att:62,special:"drain"},{name:"Dark",text:"Deal moderate dark damage to all foes in range.",l:eg("Arcane Magick 1"),alg:"magick",ct:23,at:96,aoe:30,att:46,darkDamage:!0},{name:"Darkra",text:"Deal dark damage to all foes in range.",l:eg("Arcane Magick 1"),alg:"magick",ct:23,at:99,aoe:30,att:91,darkDamage:!0},{name:"Darkga",text:"Deal heavy dark damage to all foes in range.",l:eg("Arcane Magick 2"),alg:"magick",ct:23,at:110,aoe:30,att:130,darkDamage:!0},{name:"Ardor",text:"Deal massive fire damage to all foes in range.",l:eg("Arcane Magick 3"),alg:"magick",ct:23,at:141,aoe:19,att:173,fireDamage:!0}],e9=[{name:"1000 Needles",text:"Deal 1,000 damage to one foe.",l:eg("1000 Needles"),alg:"technick",ct:25,chn:100,at:114},{name:"Souleater",text:"Consume HP to deal damage to one foe.",l:eg("Souleater"),alg:"technick",ct:30,chn:200,at:126},{name:"Gil Toss",text:"Throw gil, damaging all foes in range.",l:eg("Gil Toss"),alg:"technick",ct:30,chn:200,at:75,aoe:20},{name:"Horology",text:"Deal damage based on a factor of time to all foes in range.",l:eg("Horology"),alg:"technick",ct:30,chn:90,at:105,aoe:30},{name:"Telekinesis",text:"Deal ranged damage with melee weapons.",l:eg("Telekinesis"),alg:"technick",ct:30,chn:80,at:36}],ae=ed.find(e=>"Battle Lore"===e.name).contents,aa=ed.find(e=>"Magick Lore"===e.name).contents;function al(e){return C("div",{"aria-label":e.tooltip,class:"control"},C("label",null,e.label,C("input",{class:`d-${e.max.toString().length}`,type:"number",value:e.value,min:e.min,max:e.max,onChange:a=>{if(a.currentTarget.validity.valid){let l=a.currentTarget.valueAsNumber;l==l&&e.changeValue(l)}}})))}function at(e){return C("div",{"aria-label":e.tooltip,class:"control"},C("label",null,C("input",{type:"checkbox",checked:e.value,onChange:()=>e.changeValue(!e.value)}),e.label))}function an(e){return C("div",{"aria-label":e.tooltip,class:"control"},C("label",null,e.label,C("select",{value:e.value,onChange:a=>e.changeValue(Number(a.currentTarget.value))},C("option",{value:"0"},"Immune"),C("option",{value:"0.5"},"Strong"),C("option",{value:"1"},"Normal"),C("option",{value:"2"},"Weak"))))}function ar(e){return C("div",{"aria-label":e.tooltip,class:"control"},C("label",null,e.label,C("select",{value:e.value,onChange:a=>e.changeValue(a.currentTarget.value)},C("option",{value:"other"},"None"),C("option",{value:"windy"},"Wind"),C("option",{value:"rainy"},"Rain"),C("option",{value:"foggy"},"Fog"),C("option",{value:"windy and rainy"},"Downpour"))))}function ao(e){return C("div",{"aria-label":e.tooltip,class:"control"},C("label",null,e.label,C("select",{value:e.value,onChange:a=>e.changeValue(a.currentTarget.value)},C("option",{value:"other"},"None"),C("option",{value:"sand"},"Sand"),C("option",{value:"water"},"Water"),C("option",{value:"snow"},"Snow"))))}const{useStore:ai,dispatch:as}=eT({character:-1,def:30,mdef:30,targetCount:1,percentHp:1,fireReaction:1,iceReaction:1,lightningReaction:1,waterReaction:1,windReaction:1,earthReaction:1,darkReaction:1,holyReaction:1,level:70,targetLevel:60,minuteOnesDigit:6,partyMaxHp:25e3,resistGun:!1,battleSpeed:6,berserk:!0,haste:!0,bravery:!0,faith:!0,parry:!1,block:0,terrain:"other",weather:"other",oil:!1,undead:!1,allowCertainLicenses:!0,allowCheaterGear:!0}),ac=(e,a)=>as(l=>({...l,[e]:a}));var am=(e,a)=>{let l=ai(a);return e=>{let a=l();return C("div",{class:"dps-optimizer"},C("div",{class:"controls"},C(al,{min:0,max:250,label:"Def",tooltip:"Target's physical defense",value:a.def,changeValue:e=>ac("def",e)}),C(al,{min:0,max:250,label:"MDef",tooltip:"Target's magical defense",value:a.mdef,changeValue:e=>ac("mdef",e)}),C(al,{min:1,max:10,label:"Aoe",tooltip:"Number of targets",value:a.targetCount,changeValue:e=>ac("targetCount",e)}),C(al,{min:1,max:100,label:"HP%",tooltip:"Character's HP percentage",value:a.percentHp,changeValue:e=>ac("percentHp",e)}),C(al,{min:1,max:99,label:"C. Lvl",tooltip:"Character's level",value:a.level,changeValue:e=>ac("level",e)}),C(al,{min:1,max:99,label:"T. Lvl",tooltip:"Target's level",value:a.targetLevel,changeValue:e=>ac("targetLevel",e)}),C(al,{min:0,max:9,label:"Time",tooltip:"Ones digit of game clock minutes",value:a.minuteOnesDigit,changeValue:e=>ac("minuteOnesDigit",e)}),C(al,{min:100,max:5e4,label:"Party HP",tooltip:"Combined Max HP of entire active party",value:a.partyMaxHp,changeValue:e=>ac("partyMaxHp",e)}),C(al,{min:0,max:40,label:"Block",tooltip:"Target's block (EVA)",value:a.block,changeValue:e=>ac("block",e)}),C(ar,{label:"Weather",tooltip:"What is the current weather?",value:a.weather,changeValue:e=>ac("weather",e)}),C(ao,{label:"Terrain",tooltip:"What is the current terrain?",value:a.terrain,changeValue:e=>ac("terrain",e)}),C("br",null),C(at,{label:"Resist G&M",tooltip:"Does the target resist guns and measures?",value:a.resistGun,changeValue:e=>ac("resistGun",e)}),C(at,{label:"Berserk",tooltip:"Is the berserk buff available?",value:a.berserk,changeValue:e=>ac("berserk",e)}),C(at,{label:"Haste",tooltip:"Is the haste buff available?",value:a.haste,changeValue:e=>ac("haste",e)}),C(at,{label:"Bravery",tooltip:"Is the bravery buff available?",value:a.bravery,changeValue:e=>ac("bravery",e)}),C(at,{label:"Faith",tooltip:"Is the faith buff available?",value:a.faith,changeValue:e=>ac("faith",e)}),C(at,{label:"Oil",tooltip:"Is the target oiled?",value:a.oil,changeValue:e=>ac("oil",e)}),C(at,{label:"Parry",tooltip:"Can the target parry attacks?",value:a.parry,changeValue:e=>ac("parry",e)}),C(at,{label:"Undead",tooltip:"Is the target undead?",value:a.undead,changeValue:e=>ac("undead",e)}),C(at,{label:"All Licenses",tooltip:"Allow grey-shaded licenses",value:a.allowCertainLicenses,changeValue:e=>ac("allowCertainLicenses",e)}),C(at,{label:"Secret Gear",tooltip:"Allow secret items",value:a.allowCheaterGear,changeValue:e=>ac("allowCheaterGear",e)}),C("br",null),eV.map(e=>C(an,{label:e[0].toUpperCase()+e.slice(1),tooltip:`How much ${e} damage does the target take?`,value:a[`${e}Reaction`],changeValue:a=>ac(`${e}Reaction`,a)}))),C(ah,{party:e.party,env:a}))}};function au(e){let{value:a}=e;return C("td",{"aria-label":a?.tooltip},a?.name)}function ag(e){let{value:a}=e;return C("td",{"aria-label":a.text},a.name)}function ad(e){let{value:a}=e,l=`Base Damage: ${Math.round(a.baseDmg)} +Modified Damage: ${Math.round(a.modifiedDamage)} +Not Avoided Damage: ${Math.round(a.nonAvoidedDamage)} +Comboed Damage: ${Math.round(a.comboDamage)} +Charge Time: ${a.chargeTime.toFixed(2)}s +Animation Time: ${a.animationTime.toFixed(2)}s`;return C("td",{class:"r","aria-label":l},Math.round(a.dps))}const ah=(e,a)=>{let l={results:void 0,for:void 0,nodes:C("tr",null,C("td",null,"Working..."))},t=()=>l.for&&l.for.env===e.env&&l.for.party===e.party;async function n(){let t=[[],[],[],[],[],[]],{party:n,env:r}=e,o=performance.now(),i=!1;for(let a=0;a<6;a++){let l=t[a],s={...r,character:a};for(let a of function*(e,a){let l=a.color(e.character);function t(e){return n(eg(e))}function n(a){let t=l.get(a);return t===D.OBTAINED||e.allowCertainLicenses&&t===D.CERTAIN}function r(e){return!e.l||n(e.l)}let o=eZ.filter(a=>r(a)&&(e.allowCheaterGear||a.attack<=150)),i={weapons:o,armors:eq.filter(r),helms:eU.filter(r),accessories:e$.filter(r)},s=e7.filter(r),c=e9.filter(r),m={ability:e8,damageType:"unarmed",animationType:"unarmed",attack:0,combo:0,chargeTime:0,...function(e,a){function l(e,l){return Math.floor(a*l/128)+e}return{str:l(e4.str[e],e6.str[e]),mag:l(e4.mag[e],e6.mag[e]),vit:l(e4.vit[e],e6.vit[e]),spd:l(e4.spd[e],e6.spd[e])}}(e.character,e.level),brawler:t("Brawler"),berserk:e.berserk,haste:e.haste,bravery:e.bravery,faith:e.faith,focus:t("Focus"),adrenaline:t("Adrenaline"),serenity:t("Serenity"),spellbreaker:t("Spellbreaker"),genjiGloves:!1,cameoBelt:!1,agateRing:!1,swiftness1:t("Swiftness 1"),swiftness2:t("Swiftness 2"),swiftness3:t("Swiftness 3"),fireDamage:!1,iceDamage:!1,lightningDamage:!1,waterDamage:!1,windDamage:!1,earthDamage:!1,darkDamage:!1,holyDamage:!1,fireBonus:!1,iceBonus:!1,lightningBonus:!1,waterBonus:!1,windBonus:!1,earthBonus:!1,darkBonus:!1,holyBonus:!1};for(let a of(m.str+=ae.filter(n).length,m.mag+=aa.filter(n).length,s))m.ability=a,yield e5(m,e,i);for(let a of c)m.ability=a,yield e5(m,e,i);for(let a of(m.ability=e8,i.weapons=[],o))i.weapons[0]=a,yield e5(m,e,i)}(s,n)){if(performance.now()-o>120&&(await new Promise(e=>setTimeout(e,0)),i=!0,o=performance.now(),n!==e.party||r!==e.env))return;l.push(a)}l.sort((e,a)=>a.dps.dps-e.dps.dps)}l={results:t,for:{party:n,env:r},nodes:t.map((e,a)=>C(ap,{name:ey[a].name,results:e}))},i&&x(a)}return a=>(e=a,t()||n(),C("div",{class:t()?"results":"results busy"},C("table",null,C("tbody",null,l.nodes))))};function ap(e){return C(G,null,C("tr",{class:"sticky"},C("th",{colSpan:9999},e.name)),C("tr",{class:"sticky second-row"},C("th",{class:"r"},"DPS"),C("th",null,"Ability"),C("th",null,"Weapon"),C("th",null,"Ammo"),C("th",null,"Helm"),C("th",null,"Armor"),C("th",null,"Accessory")),e.results.map(({ability:e,doll:a,dps:l})=>C("tr",{class:"data-row"},C(ad,{value:l}),C(ag,{value:e}),C(au,{value:a.weapon}),C(au,{value:a.ammo}),C(au,{value:a.helm}),C(au,{value:a.armor}),C(au,{value:a.accessory}))))}function ay(e){return e.split("-")[1]}function af(e){return"y"===e?"height":"width"}function ab(e){return e.split("-")[0]}function aA(e){return["top","bottom"].includes(ab(e))?"x":"y"}function ak(e,a,l){let t,{reference:n,floating:r}=e,o=n.x+n.width/2-r.width/2,i=n.y+n.height/2-r.height/2,s=aA(a),c=af(s),m=n[c]/2-r[c]/2,u=ab(a),g="x"===s;switch(u){case"top":t={x:o,y:n.y-r.height};break;case"bottom":t={x:o,y:n.y+n.height};break;case"right":t={x:n.x+n.width,y:i};break;case"left":t={x:n.x-r.width,y:i};break;default:t={x:n.x,y:n.y}}switch(ay(a)){case"start":t[s]-=m*(l&&g?-1:1);break;case"end":t[s]+=m*(l&&g?-1:1)}return t}const aw=async(e,a,l)=>{let{placement:t="bottom",strategy:n="absolute",middleware:r=[],platform:o}=l,i=r.filter(Boolean),s=await (null==o.isRTL?void 0:o.isRTL(a)),c=await o.getElementRects({reference:e,floating:a,strategy:n}),{x:m,y:u}=ak(c,t,s),g=t,d={},h=0;for(let l=0;laB[e])}const ax={start:"end",end:"start"};function aP(e){return e.replace(/start|end/g,e=>ax[e])}function aG(e){var a;return(null==(a=e.ownerDocument)?void 0:a.defaultView)||window}function aC(e){return aG(e).getComputedStyle(e)}function aD(e){return e instanceof aG(e).Node}function aR(e){return aD(e)?(e.nodeName||"").toLowerCase():"#document"}function aE(e){return e instanceof aG(e).HTMLElement}function aI(e){return e instanceof aG(e).Element}function aN(e){return"undefined"!=typeof ShadowRoot&&(e instanceof aG(e).ShadowRoot||e instanceof ShadowRoot)}function aj(e){let{overflow:a,overflowX:l,overflowY:t,display:n}=aC(e);return/auto|scroll|overlay|hidden|clip/.test(a+t+l)&&!["inline","contents"].includes(n)}function aW(e){let a=az(),l=aC(e);return"none"!==l.transform||"none"!==l.perspective||!a&&!!l.backdropFilter&&"none"!==l.backdropFilter||!a&&!!l.filter&&"none"!==l.filter||["transform","perspective","filter"].some(e=>(l.willChange||"").includes(e))||["paint","layout","strict","content"].some(e=>(l.contain||"").includes(e))}function az(){return"undefined"!=typeof CSS&&!!CSS.supports&&CSS.supports("-webkit-backdrop-filter","none")}function aF(e){return["html","body","#document"].includes(aR(e))}const aO=Math.min,aV=Math.max,aK=Math.round,aQ=e=>({x:e,y:e});function aZ(e){let a=aC(e),l=parseFloat(a.width)||0,t=parseFloat(a.height)||0,n=aE(e),r=n?e.offsetWidth:l,o=n?e.offsetHeight:t,i=aK(l)!==r||aK(t)!==o;return i&&(l=r,t=o),{width:l,height:t,$:i}}function aU(e){return aI(e)?e:e.contextElement}function aq(e){let a=aU(e);if(!aE(a))return aQ(1);let l=a.getBoundingClientRect(),{width:t,height:n,$:r}=aZ(a),o=(r?aK(l.width):l.width)/t,i=(r?aK(l.height):l.height)/n;return o&&Number.isFinite(o)||(o=1),i&&Number.isFinite(i)||(i=1),{x:o,y:i}}const a$=aQ(0);function aJ(e,a,l){var t,n;if(void 0===a&&(a=!0),!az())return a$;let r=e?aG(e):window;return!l||a&&l!==r?a$:{x:(null==(t=r.visualViewport)?void 0:t.offsetLeft)||0,y:(null==(n=r.visualViewport)?void 0:n.offsetTop)||0}}function aY(e,a,l,t){void 0===a&&(a=!1),void 0===l&&(l=!1);let n=e.getBoundingClientRect(),r=aU(e),o=aQ(1);a&&(t?aI(t)&&(o=aq(t)):o=aq(e));let i=aJ(r,l,t),s=(n.left+i.x)/o.x,c=(n.top+i.y)/o.y,m=n.width/o.x,u=n.height/o.y;if(r){let e=aG(r),a=t&&aI(t)?aG(t):t,l=e.frameElement;for(;l&&t&&a!==e;){let e=aq(l),a=l.getBoundingClientRect(),t=getComputedStyle(l),n=a.left+(l.clientLeft+parseFloat(t.paddingLeft))*e.x,r=a.top+(l.clientTop+parseFloat(t.paddingTop))*e.y;s*=e.x,c*=e.y,m*=e.x,u*=e.y,s+=n,c+=r,l=aG(l).frameElement}}return aS({width:m,height:u,x:s,y:c})}function a_(e){return((aD(e)?e.ownerDocument:e.document)||window.document).documentElement}function aX(e){return aI(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.pageXOffset,scrollTop:e.pageYOffset}}function a1(e){return aY(a_(e)).left+aX(e).scrollLeft}function a0(e){if("html"===aR(e))return e;let a=e.assignedSlot||e.parentNode||aN(e)&&e.host||a_(e);return aN(a)?a.host:a}function a2(e,a,l){let t;if("viewport"===a)t=function(e,a){let l=aG(e),t=a_(e),n=l.visualViewport,r=t.clientWidth,o=t.clientHeight,i=0,s=0;if(n){r=n.width,o=n.height;let e=az();(!e||e&&"fixed"===a)&&(i=n.offsetLeft,s=n.offsetTop)}return{width:r,height:o,x:i,y:s}}(e,l);else if("document"===a)t=function(e){let a=a_(e),l=aX(e),t=e.ownerDocument.body,n=aV(a.scrollWidth,a.clientWidth,t.scrollWidth,t.clientWidth),r=aV(a.scrollHeight,a.clientHeight,t.scrollHeight,t.clientHeight),o=-l.scrollLeft+a1(e),i=-l.scrollTop;return"rtl"===aC(t).direction&&(o+=aV(a.clientWidth,t.clientWidth)-n),{width:n,height:r,x:o,y:i}}(a_(e));else if(aI(a))t=function(e,a){let l=aY(e,!0,"fixed"===a),t=l.top+e.clientTop,n=l.left+e.clientLeft,r=aE(e)?aq(e):aQ(1),o=e.clientWidth*r.x,i=e.clientHeight*r.y,s=n*r.x,c=t*r.y;return{width:o,height:i,x:s,y:c}}(a,l);else{let l=aJ(e);t={...a,x:a.x-l.x,y:a.y-l.y}}return aS(t)}function a3(e,a){return aE(e)&&"fixed"!==aC(e).position?a?a(e):e.offsetParent:null}function a5(e,a){let l=aG(e);if(!aE(e))return l;let t=a3(e,a);for(;t&&["table","td","th"].includes(aR(t))&&"static"===aC(t).position;)t=a3(t,a);return t&&("html"===aR(t)||"body"===aR(t)&&"static"===aC(t).position&&!aW(t))?l:t||function(e){let a=a0(e);for(;aE(a)&&!aF(a);){if(aW(a))return a;a=a0(a)}return null}(e)||l}const a4={getClippingRect:function(e){let{element:a,boundary:l,rootBoundary:t,strategy:n}=e,r="clippingAncestors"===l?function(e,a){let l=a.get(e);if(l)return l;let t=(function e(a,l){var t;void 0===l&&(l=[]);let n=function e(a){let l=a0(a);return aF(l)?a.ownerDocument?a.ownerDocument.body:a.body:aE(l)&&aj(l)?l:e(l)}(a),r=n===(null==(t=a.ownerDocument)?void 0:t.body),o=aG(n);return r?l.concat(o,o.visualViewport||[],aj(n)?n:[]):l.concat(n,e(n))})(e).filter(e=>aI(e)&&"body"!==aR(e)),n=null,r="fixed"===aC(e).position,o=r?a0(e):e;for(;aI(o)&&!aF(o);){let a=aC(o),l=aW(o);l||"fixed"!==a.position||(n=null);let i=r?!l&&!n:!l&&"static"===a.position&&!!n&&["absolute","fixed"].includes(n.position)||aj(o)&&!l&&function e(a,l){let t=a0(a);return!(t===l||!aI(t)||aF(t))&&("fixed"===aC(t).position||e(t,l))}(e,o);i?t=t.filter(e=>e!==o):n=a,o=a0(o)}return a.set(e,t),t}(a,this._c):[].concat(l),o=[...r,t],i=o[0],s=o.reduce((e,l)=>{let t=a2(a,l,n);return e.top=aV(t.top,e.top),e.right=aO(t.right,e.right),e.bottom=aO(t.bottom,e.bottom),e.left=aV(t.left,e.left),e},a2(a,i,n));return{width:s.right-s.left,height:s.bottom-s.top,x:s.left,y:s.top}},convertOffsetParentRelativeRectToViewportRelativeRect:function(e){let{rect:a,offsetParent:l,strategy:t}=e,n=aE(l),r=a_(l);if(l===r)return a;let o={scrollLeft:0,scrollTop:0},i=aQ(1),s=aQ(0);if((n||!n&&"fixed"!==t)&&(("body"!==aR(l)||aj(r))&&(o=aX(l)),aE(l))){let e=aY(l);i=aq(l),s.x=e.x+l.clientLeft,s.y=e.y+l.clientTop}return{width:a.width*i.x,height:a.height*i.y,x:a.x*i.x-o.scrollLeft*i.x+s.x,y:a.y*i.y-o.scrollTop*i.y+s.y}},isElement:aI,getDimensions:function(e){return aZ(e)},getOffsetParent:a5,getDocumentElement:a_,getScale:aq,async getElementRects(e){let{reference:a,floating:l,strategy:t}=e,n=this.getOffsetParent||a5,r=this.getDimensions;return{reference:function(e,a,l){let t=aE(a),n=a_(a),r="fixed"===l,o=aY(e,!0,r,a),i={scrollLeft:0,scrollTop:0},s=aQ(0);if(t||!t&&!r){if(("body"!==aR(a)||aj(n))&&(i=aX(a)),aE(a)){let e=aY(a,!0,r,a);s.x=e.x+a.clientLeft,s.y=e.y+a.clientTop}else n&&(s.x=a1(n))}return{x:o.left+i.scrollLeft-s.x,y:o.top+i.scrollTop-s.y,width:o.width,height:o.height}}(a,await n(l),t),floating:{x:0,y:0,...await r(l)}}},getClientRects:e=>Array.from(e.getClientRects()),isRTL:e=>"rtl"===aC(e).direction},a6=(e,a,l)=>{let t=new Map,n={platform:a4,...l},r={...n.platform,_c:t};return aw(e,a,{...n,platform:r})};Array.prototype.at||Object.defineProperty(Array.prototype,"at",{configurable:!0,enumerable:!1,value:function(e){let{length:a}=this;if(e<0&&(e+=a),e>=0&&et}},e,(void 0)??null,void 0);t=a,n.scheduleLayerUpdate(),T()}(document.body,C(G,null,C((e,a)=>{let l;let t=eP(a);return()=>{let{party:e,qeActive:a,dpsActive:n}=t();return e!==l&&(requestIdleCallback(()=>{let a=window.location.href.split("?")[0],l=e.encode();window.history.replaceState(null,"",a+("AA.AA.AA.AA.AA.AA"===l?"":"?"+l))}),l=e),C("div",{class:"character-planner"},C(eD,null),a?C(eO,null):n?C(am,{party:e}):C(eI,null))}},null),C((e,a)=>{let l=null,t=e=>l=e,n=null,r=null;async function o(){if(r&&l){var e,a;let t=await a6(r,l,{middleware:[(void 0===e&&(e={}),{name:"flip",options:e,async fn(a){var l,t,n,r;let{placement:o,middlewareData:i,rects:s,initialPlacement:c,platform:m,elements:u}=a,{mainAxis:g=!0,crossAxis:d=!0,fallbackPlacements:h,fallbackStrategy:p="bestFit",fallbackAxisSideDirection:y="none",flipAlignment:f=!0,...b}=av(e,a),A=ab(o),k=ab(c)===c,w=await (null==m.isRTL?void 0:m.isRTL(u.floating)),v=h||(k||!f?[aH(c)]:function(e){let a=aH(e);return[aP(e),a,aP(a)]}(c));h||"none"===y||v.push(...function(e,a,l,t){let n=ay(e),r=function(e,a,l){let t=["left","right"],n=["right","left"];switch(e){case"top":case"bottom":if(l)return a?n:t;return a?t:n;case"left":case"right":return a?["top","bottom"]:["bottom","top"];default:return[]}}(ab(e),"start"===l,t);return n&&(r=r.map(e=>e+"-"+n),a&&(r=r.concat(r.map(aP)))),r}(c,f,y,w));let S=[c,...v],T=await aT(a,b),M=[],L=(null==(l=i.flip)?void 0:l.overflows)||[];if(g&&M.push(T[A]),d){let{main:e,cross:a}=function(e,a,l){void 0===l&&(l=!1);let t=ay(e),n=aA(e),r=af(n),o="x"===n?t===(l?"end":"start")?"right":"left":"start"===t?"bottom":"top";return a.reference[r]>a.floating[r]&&(o=aH(o)),{main:o,cross:aH(o)}}(o,s,w);M.push(T[e],T[a])}if(L=[...L,{placement:o,overflows:M}],!M.every(e=>e<=0)){let e=((null==(t=i.flip)?void 0:t.index)||0)+1,a=S[e];if(a)return{data:{index:e,overflows:L},reset:{placement:a}};let l=null==(n=L.filter(e=>e.overflows[0]<=0).sort((e,a)=>e.overflows[1]-a.overflows[1])[0])?void 0:n.placement;if(!l)switch(p){case"bestFit":{let e=null==(r=L.map(e=>[e.placement,e.overflows.filter(e=>e>0).reduce((e,a)=>e+a,0)]).sort((e,a)=>e[1]-a[1])[0])?void 0:r[0];e&&(l=e);break}case"initialPlacement":l=c}if(o!==l)return{reset:{placement:l}}}return{}}}),(void 0===a&&(a={}),{name:"shift",options:a,async fn(e){let{x:l,y:t,placement:n}=e,{mainAxis:r=!0,crossAxis:o=!1,limiter:i={fn:e=>{let{x:a,y:l}=e;return{x:a,y:l}}},...s}=av(a,e),c={x:l,y:t},m=await aT(e,s),u=aA(ab(n)),g="x"===u?"y":"x",d=c[u],h=c[g];if(r){let e=d+m["y"===u?"top":"left"],a=d-m["y"===u?"bottom":"right"];d=aL(e,aM(d,a))}if(o){let e=h+m["y"===g?"top":"left"],a=h-m["y"===g?"bottom":"right"];h=aL(e,aM(h,a))}let p=i.fn({...e,[u]:d,[g]:h});return{...p,data:{x:p.x-l,y:p.y-t}}}})]});l.style.transform=`translate(${Math.round(t.x)}px,${Math.round(t.y)}px)`}}return document.addEventListener("mouseover",e=>{for(r=e.target;r&&null==(n=r.getAttribute("aria-label"));)r=r.parentElement;x(a)},{passive:!0}),document.addEventListener("scroll",o,{passive:!0,capture:!0}),()=>(B(a.depth,o),C("div",{ref:t,class:n?"tooltip":"tooltip hidden"},n))},null))); +//# sourceMappingURL=index.9c03c1ec.js.map diff --git a/docs/index.html b/docs/index.html index fd1d503..9eacaa0 100644 --- a/docs/index.html +++ b/docs/index.html @@ -1 +1 @@ -Final Fantasy 12 Character Planner \ No newline at end of file +Final Fantasy 12 Character Planner \ No newline at end of file diff --git a/src/MouseOver.ts b/src/MouseOver.ts deleted file mode 100644 index e00f932..0000000 --- a/src/MouseOver.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { computePosition, shift, flip } from "@floating-ui/dom"; -import "./MouseOver.css"; - -const holder = document.createElement("div"); -holder.className = "tooltip"; -holder.style.display = "none"; -document.body.appendChild(holder); - -let reference: Element | null = null; - -async function updateStyles() { - if (reference) { - const styles = await computePosition(reference, holder, { middleware: [flip(), shift()] }); - holder.style.transform = `translate(${Math.round(styles.x)}px,${Math.round(styles.y)}px)`; - } -} - -document.addEventListener("mouseover", event => { - let target = event.target as Element | null; - let label: string | null = null; - while (target && (label = target.getAttribute("aria-label")) == null) { - target = target.parentElement; - } - reference = target; - - if (label) { - holder.textContent = label; - holder.style.display = ""; - updateStyles(); - } else { - holder.style.display = "none"; - } -}); -document.addEventListener("scroll", updateStyles, { passive: true, capture: true }); diff --git a/src/component/App.tsx b/src/component/App.tsx deleted file mode 100644 index 074d72c..0000000 --- a/src/component/App.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import { h, TPC } from "vdomk"; -import CharacterPlanner from "./CharacterPlanner"; -import "modern-normalize/modern-normalize.css"; -import "./App.css"; -import { useStore } from "../store/Store"; -import PartyModel from "../model/PartyModel"; - -const App: TPC<{}> = (_, instance) => { - const getState = useStore(instance); - let prevParty: PartyModel | undefined; - - return () => { - const { party } = getState(); - if (party !== prevParty) { - requestIdleCallback(() => { - const urlBase = window.location.href.split("?")[0]; - const search = party.encode(); - const urlSuffix = search === "AA.AA.AA.AA.AA.AA" ? "" : "?" + search; - window.history.replaceState(null, "", urlBase + urlSuffix); - }); - prevParty = party; - } - return ; - } -}; - -export default App; diff --git a/src/component/CharacterPlanner.tsx b/src/component/CharacterPlanner.tsx index c399aa6..efc4b7c 100644 --- a/src/component/CharacterPlanner.tsx +++ b/src/component/CharacterPlanner.tsx @@ -1,21 +1,36 @@ import { h, TPC } from "vdomk"; import CharacterPanel from "./CharacterPanel"; import LicenseBoard from "./LicenseBoard"; -import "./CharacterPlanner.css"; import QeBoard from "./QeBoard"; import Dps from "./Dps"; import { useStore } from "../store/Store"; +import PartyModel from "../model/PartyModel"; + +import "./CharacterPlanner.css"; const CharacterPlanner: TPC<{}> = (_, instance) => { const getState = useStore(instance); + let prevParty: PartyModel | undefined; + return () => { - const store = getState(); + const { party, qeActive, dpsActive } = getState(); + + if (party !== prevParty) { + requestIdleCallback(() => { + const urlBase = window.location.href.split("?")[0]; + const search = party.encode(); + const urlSuffix = search === "AA.AA.AA.AA.AA.AA" ? "" : "?" + search; + window.history.replaceState(null, "", urlBase + urlSuffix); + }); + prevParty = party; + } + return
- {store.qeActive + {qeActive ? - : store.dpsActive - ? + : dpsActive + ? : }
; diff --git a/src/MouseOver.css b/src/component/MouseOver.css similarity index 86% rename from src/MouseOver.css rename to src/component/MouseOver.css index 47d1118..2c52333 100644 --- a/src/MouseOver.css +++ b/src/component/MouseOver.css @@ -9,4 +9,8 @@ border-radius: 6px; background-color: rgba(0, 0, 0, 0.7); pointer-events: none; + + &.hidden { + display: none; + } } diff --git a/src/component/MouseOver.tsx b/src/component/MouseOver.tsx new file mode 100644 index 0000000..b92391f --- /dev/null +++ b/src/component/MouseOver.tsx @@ -0,0 +1,35 @@ +import { computePosition, shift, flip } from "@floating-ui/dom"; +import { TPC, effect, h, scheduleUpdate } from "vdomk"; +import "./MouseOver.css"; + +const Tooltip: TPC<{}> = (_, instance) => { + let floatingElement: HTMLDivElement | null = null; + const ref = (value: HTMLDivElement | null) => floatingElement = value; + + let labelText: string | null = null; + let referenceElement: Element | null = null; + + document.addEventListener("mouseover", event => { + referenceElement = event.target as Element | null; + while (referenceElement && (labelText = referenceElement.getAttribute("aria-label")) == null) { + referenceElement = referenceElement.parentElement; + } + scheduleUpdate(instance); + }, { passive: true }); + + async function updateStyles() { + if (referenceElement && floatingElement) { + const styles = await computePosition(referenceElement, floatingElement, { middleware: [flip(), shift()] }); + floatingElement.style.transform = `translate(${Math.round(styles.x)}px,${Math.round(styles.y)}px)`; + } + } + + document.addEventListener("scroll", updateStyles, { passive: true, capture: true }); + + return () => { + effect(instance, updateStyles); + return
{labelText}
; + }; +}; + +export default Tooltip; diff --git a/src/component/App.css b/src/component/shared.css similarity index 97% rename from src/component/App.css rename to src/component/shared.css index 0b8dad3..80d0b84 100644 --- a/src/component/App.css +++ b/src/component/shared.css @@ -1,3 +1,5 @@ +/* Global and shared styles */ + button { cursor: pointer; &:disabled { @@ -13,7 +15,6 @@ button { font-family: "HelveticaNeue-Light", "Helvetica Neue Light", "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif; } -/* Some shared styles */ .button { margin: 2px; border: 2px solid #000; diff --git a/src/index.tsx b/src/index.tsx index c4a505f..bc8adef 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -22,12 +22,17 @@ if (!window.requestIdleCallback) { }; } -import { h, createRoot } from "vdomk"; -import App from "./component/App"; -import "./MouseOver"; +import "modern-normalize/modern-normalize.css"; +import "./component/shared.css"; + +import { h, Fragment, createRoot } from "vdomk"; +import CharacterPlanner from "./component/CharacterPlanner"; +import MouseOver from "./component/MouseOver"; createRoot( document.body, - , - document.body.lastChild // tooltip must come after the app root + <> + + + );