Merge branch 'atree' into sock_encoding
This commit is contained in:
commit
07ad16934b
18 changed files with 694 additions and 2812 deletions
487
builder/doc.html
487
builder/doc.html
|
@ -6,17 +6,6 @@
|
||||||
<meta name="MobileOptimized" content="320" />
|
<meta name="MobileOptimized" content="320" />
|
||||||
<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width, user-scalable=no" />
|
<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width, user-scalable=no" />
|
||||||
|
|
||||||
<!--OGP suite
|
|
||||||
<meta property="og:title" content="Wynnbuilder" />
|
|
||||||
<meta property="og:type" content="website" />
|
|
||||||
<meta property="og:image" content="https://wynnbuilder.github.io/media/icons/new/builder.png" />
|
|
||||||
<meta property="og:image:width" content="420" />
|
|
||||||
<meta property="og:image:height" content="420" />
|
|
||||||
<meta property="og:image:type" content="image/png" />
|
|
||||||
<meta property="og:description" id = "ogp-build-list" content = "">
|
|
||||||
<meta property="og:url" id = "ogp-url" content="" />
|
|
||||||
-->
|
|
||||||
|
|
||||||
<title>WynnBuilder</title>
|
<title>WynnBuilder</title>
|
||||||
<link rel="icon" href="../media/icons/new/builder.png" type="image/icon type">
|
<link rel="icon" href="../media/icons/new/builder.png" type="image/icon type">
|
||||||
|
|
||||||
|
@ -35,8 +24,6 @@
|
||||||
<link rel="stylesheet" href="../css/wynnstyles.css">
|
<link rel="stylesheet" href="../css/wynnstyles.css">
|
||||||
</head>
|
</head>
|
||||||
<body class="text-light" id = "body">
|
<body class="text-light" id = "body">
|
||||||
<!-- hover tooltip stuff -->
|
|
||||||
|
|
||||||
<!-- main -->
|
<!-- main -->
|
||||||
<div id="main-sidebar" class="sidebar dark-7 dark-shadow">
|
<div id="main-sidebar" class="sidebar dark-7 dark-shadow">
|
||||||
<a href = ""><img src="../media/icons/new/builder.png" alt = "WynnBuilder" title = "WynnBuilder"><b>WynnBuilder</b></a>
|
<a href = ""><img src="../media/icons/new/builder.png" alt = "WynnBuilder" title = "WynnBuilder"><b>WynnBuilder</b></a>
|
||||||
|
@ -422,6 +409,186 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="col">
|
<div class="col">
|
||||||
<div class="row row-cols-1 gy-4">
|
<div class="row row-cols-1 gy-4">
|
||||||
|
|
||||||
|
<div class="col mb-1 text-center scaled-font dark-5 rounded dark-shadow">
|
||||||
|
<div class="row row-cols-1 justify-content-center">
|
||||||
|
<div class="col fw-bold dark-4 rounded-top">
|
||||||
|
Active boosts
|
||||||
|
</div>
|
||||||
|
<div class="col">
|
||||||
|
<button class="button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id="vanish-boost" onclick="update_boosts('vanish-boost')">
|
||||||
|
Vanish (+80%)
|
||||||
|
</button>
|
||||||
|
<button class="button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id="warscream-boost" onclick="update_boosts('warscream-boost')">
|
||||||
|
War Scream
|
||||||
|
</button>
|
||||||
|
<button class="button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id="ragnarokkr-boost" onclick="update_boosts('ragnarokkr-boost')">
|
||||||
|
Ragnarokkr (+30%)
|
||||||
|
</button>
|
||||||
|
<button class="button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id="yourtotem-boost" onclick="update_boosts('yourtotem-boost')">
|
||||||
|
Your Totem (+35%)
|
||||||
|
</button>
|
||||||
|
<button class="button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id="allytotem-boost" onclick="update_boosts('allytotem-boost')">
|
||||||
|
Ally Totem (+15%)
|
||||||
|
</button>
|
||||||
|
<button class="button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id="fortitude-boost" onclick="update_boosts('fortitude-boost')">
|
||||||
|
Fortitude (+60%)
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<div class="col" id="boost-toggles">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row row-cols-1 justify-content-center" id="boost-sliders">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col mb-1">
|
||||||
|
<div class="row row-cols-1 rounded text-center dark-5 scaled-font">
|
||||||
|
<div class="row p-0 m-0 text-nowrap">
|
||||||
|
<div id = "str-boost-tab" class="col eDam dark-4u fake-button elem-boost" onclick="toggle_boost_tab('str')">
|
||||||
|
Earth
|
||||||
|
</div>
|
||||||
|
<div id = "dex-boost-tab" class="col tDam dark-4u fake-button elem-boost" onclick="toggle_boost_tab('dex')">
|
||||||
|
Thunder
|
||||||
|
</div>
|
||||||
|
<div id = "int-boost-tab" class="col wDam dark-4u fake-button elem-boost" onclick="toggle_boost_tab('int')">
|
||||||
|
Water
|
||||||
|
</div>
|
||||||
|
<div id = "def-boost-tab" class="col fDam dark-4u fake-button elem-boost" onclick="toggle_boost_tab('def')">
|
||||||
|
Fire
|
||||||
|
</div>
|
||||||
|
<div id = "agi-boost-tab" class="col aDam dark-4u fake-button elem-boost" onclick="toggle_boost_tab('agi')">
|
||||||
|
Air
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row row-cols-1 p-0 m-0" id="str-boost" style="display: none;">
|
||||||
|
<div class="col eDam dark-5">
|
||||||
|
Quake (Active)
|
||||||
|
</div>
|
||||||
|
<div class="col skp-tooltip dark-6 rounded-bottom my-3 my-xl-1" >
|
||||||
|
<button class = "button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id = "Quake-1" onclick = "updatePowderSpecials('Quake-1')">
|
||||||
|
Lv.4 [e4e4]
|
||||||
|
</button>
|
||||||
|
<button class = "button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id = "Quake-2" onclick = "updatePowderSpecials('Quake-2')">
|
||||||
|
Lv.4.5 [e5e4]
|
||||||
|
</button>
|
||||||
|
<button class = "button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id = "Quake-3" onclick = "updatePowderSpecials('Quake-3')">
|
||||||
|
Lv.5 [e5e5]
|
||||||
|
</button>
|
||||||
|
<button class = "button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id = "Quake-4" onclick = "updatePowderSpecials('Quake-4')">
|
||||||
|
Lv.5.5 [e6e5]
|
||||||
|
</button>
|
||||||
|
<button class = "button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id = "Quake-5" onclick = "updatePowderSpecials('Quake-5')">
|
||||||
|
Lv.6 [e6e6]
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<div class="col eDam">
|
||||||
|
Rage (Passive)
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row row-cols-1 p-0 m-0" id="dex-boost" style="display: none;">
|
||||||
|
<div class="col tDam dark-5">
|
||||||
|
Chain Lightning (Active)
|
||||||
|
</div>
|
||||||
|
<div class="col skp-tooltip dark-6 rounded-bottom my-3 my-xl-1">
|
||||||
|
<button class = "button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id = "Chain_Lightning-1" onclick = "updatePowderSpecials('Chain_Lightning-1')">
|
||||||
|
Lv.4 [t4t4]
|
||||||
|
</button>
|
||||||
|
<button class = "button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id = "Chain_Lightning-2" onclick = "updatePowderSpecials('Chain_Lightning-2')">
|
||||||
|
Lv.4.5 [t5t4]
|
||||||
|
</button>
|
||||||
|
<button class = "button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id = "Chain_Lightning-3" onclick = "updatePowderSpecials('Chain_Lightning-3')">
|
||||||
|
Lv.5 [t5t5]
|
||||||
|
</button>
|
||||||
|
<button class = "button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id = "Chain_Lightning-4" onclick = "updatePowderSpecials('Chain_Lightning-4')">
|
||||||
|
Lv.5.5 [t6t5]
|
||||||
|
</button>
|
||||||
|
<button class = "button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id = "Chain_Lightning-5" onclick = "updatePowderSpecials('Chain_Lightning-5')">
|
||||||
|
Lv.6 [t6t6]
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<div class="col tDam">
|
||||||
|
Kill Streak (Passive)
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row row-cols-1 p-0 m-0" id="int-boost">
|
||||||
|
<div class="col wDam dark-5">
|
||||||
|
Curse (Active)
|
||||||
|
</div>
|
||||||
|
<div class="col skp-tooltip dark-6 rounded-bottom my-3 my-xl-1">
|
||||||
|
<button class = "button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id = "Curse-1" onclick = "updatePowderSpecials('Curse-1')">
|
||||||
|
Lv.4 [w4w4]
|
||||||
|
</button>
|
||||||
|
<button class = "button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id = "Curse-2" onclick = "updatePowderSpecials('Curse-2')">
|
||||||
|
Lv.4.5 [w5w4]
|
||||||
|
</button>
|
||||||
|
<button class = "button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id = "Curse-3" onclick = "updatePowderSpecials('Curse-3')">
|
||||||
|
Lv.5 [w5w5]
|
||||||
|
</button>
|
||||||
|
<button class = "button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id = "Curse-4" onclick = "updatePowderSpecials('Curse-4')">
|
||||||
|
Lv.5.5 [w6w5]
|
||||||
|
</button>
|
||||||
|
<button class = "button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id = "Curse-5" onclick = "updatePowderSpecials('Curse-5')">
|
||||||
|
Lv.6 [w6w6]
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<div class="col wDam">
|
||||||
|
Concentration (Passive)
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row row-cols-1 p-0 m-0" id="def-boost" style="display: none;">
|
||||||
|
<div class="col fDam dark-5">
|
||||||
|
Courage (Active)
|
||||||
|
</div>
|
||||||
|
<div class="col skp-tooltip dark-6 rounded-bottom my-3 my-xl-1">
|
||||||
|
<button class = "button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id = "Courage-1" onclick = "updatePowderSpecials('Courage-1')">
|
||||||
|
Lv.4 [f4f4]
|
||||||
|
</button>
|
||||||
|
<button class = "button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id = "Courage-2" onclick = "updatePowderSpecials('Courage-2')">
|
||||||
|
Lv.4.5 [f5f4]
|
||||||
|
</button>
|
||||||
|
<button class = "button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id = "Courage-3" onclick = "updatePowderSpecials('Courage-3')">
|
||||||
|
Lv.5 [f5f5]
|
||||||
|
</button>
|
||||||
|
<button class = "button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id = "Courage-4" onclick = "updatePowderSpecials('Courage-4')">
|
||||||
|
Lv.5.5 [f6f5]
|
||||||
|
</button>
|
||||||
|
<button class = "button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id = "Courage-5" onclick = "updatePowderSpecials('Courage-5')">
|
||||||
|
Lv.6 [f6f6]
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<div class="col fDam">
|
||||||
|
Endurance (Passive)
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row row-cols-1 p-0 m-0" id="agi-boost" style="display: none;">
|
||||||
|
<div class="col aDam dark-5">
|
||||||
|
Wind Prison (Active)
|
||||||
|
</div>
|
||||||
|
<div class="col skp-tooltip dark-6 rounded-bottom my-3 my-xl-1">
|
||||||
|
<button class = "button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id = "Wind_Prison-1" onclick = "updatePowderSpecials('Wind_Prison-1')">
|
||||||
|
Lv.4 [a4a4]
|
||||||
|
</button>
|
||||||
|
<button class = "button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id = "Wind_Prison-2" onclick = "updatePowderSpecials('Wind_Prison-2')">
|
||||||
|
Lv.4.5 [a5a4]
|
||||||
|
</button>
|
||||||
|
<button class = "button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id = "Wind_Prison-3" onclick = "updatePowderSpecials('Wind_Prison-3')">
|
||||||
|
Lv.5 [a5a5]
|
||||||
|
</button>
|
||||||
|
<button class = "button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id = "Wind_Prison-4" onclick = "updatePowderSpecials('Wind_Prison-4')">
|
||||||
|
Lv.5.5 [a6a5]
|
||||||
|
</button>
|
||||||
|
<button class = "button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id = "Wind_Prison-5" onclick = "updatePowderSpecials('Wind_Prison-5')">
|
||||||
|
Lv.6 [a6a6]
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<div class="col aDam">
|
||||||
|
Dodge (Passive)
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div class="col mb-1">
|
<div class="col mb-1">
|
||||||
<div class="row row-cols-1 row-cols-1 text-center scaled-font dark-5 rounded dark-shadow">
|
<div class="row row-cols-1 row-cols-1 text-center scaled-font dark-5 rounded dark-shadow">
|
||||||
<div class="col fw-bold dark-4 rounded-top">
|
<div class="col fw-bold dark-4 rounded-top">
|
||||||
|
@ -960,265 +1127,6 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col mb-1">
|
|
||||||
<div class="row row-cols-1 row-cols-1 text-center scaled-font dark-5 rounded dark-shadow">
|
|
||||||
<div class="col fw-bold dark-4 rounded-top">
|
|
||||||
Active boosts
|
|
||||||
</div>
|
|
||||||
<div class="col skp-tooltip dark-6 rounded-bottom my-3 my-xl-1">
|
|
||||||
<div class="row row-cols-2 row-cols-xl-0 text-nowrap justify-content-center">
|
|
||||||
<div class="col-auto p-1">
|
|
||||||
<button class="button-boost w-100 border-0 text-white dark-8u dark-shadow-sm" id="vanish-boost" onclick="update_boosts('vanish-boost')">
|
|
||||||
Vanish (+80%)
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<div class="col-auto p-1">
|
|
||||||
<button class="button-boost w-100 border-0 text-white dark-8u dark-shadow-sm" id="warscream-boost" onclick="update_boosts('warscream-boost')">
|
|
||||||
War Scream
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<div class="col-auto p-1">
|
|
||||||
<button class="button-boost w-100 border-0 text-white dark-8u dark-shadow-sm" id="ragnarokkr-boost" onclick="update_boosts('ragnarokkr-boost')">
|
|
||||||
Ragnarokkr (+30%)
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<div class="col-auto p-1">
|
|
||||||
<button class="button-boost w-100 border-0 text-white dark-8u dark-shadow-sm" id="yourtotem-boost" onclick="update_boosts('yourtotem-boost')">
|
|
||||||
Your Totem (+35%)
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<div class="col-auto p-1">
|
|
||||||
<button class="button-boost w-100 border-0 text-white dark-8u dark-shadow-sm" id="allytotem-boost" onclick="update_boosts('allytotem-boost')">
|
|
||||||
Ally Totem (+15%)
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<div class="col-auto p-1">
|
|
||||||
<button class="button-boost w-100 border-0 text-white dark-8u dark-shadow-sm" id="fortitude-boost" onclick="update_boosts('fortitude-boost')">
|
|
||||||
Fortitude (+60%)
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col mb-1">
|
|
||||||
<div class="row row-cols-1 rounded text-center dark-5 scaled-font">
|
|
||||||
<div class="col">
|
|
||||||
<div class="row text-nowrap">
|
|
||||||
<div id = "str-boost-tab" class="col eDam dark-4u fake-button elem-boost" onclick="toggle_boost_tab('str')">
|
|
||||||
Earth
|
|
||||||
</div>
|
|
||||||
<div id = "dex-boost-tab" class="col tDam dark-4u fake-button elem-boost" onclick="toggle_boost_tab('dex')">
|
|
||||||
Thunder
|
|
||||||
</div>
|
|
||||||
<div id = "int-boost-tab" class="col wDam dark-4u fake-button elem-boost" onclick="toggle_boost_tab('int')">
|
|
||||||
Water
|
|
||||||
</div>
|
|
||||||
<div id = "def-boost-tab" class="col fDam dark-4u fake-button elem-boost" onclick="toggle_boost_tab('def')">
|
|
||||||
Fire
|
|
||||||
</div>
|
|
||||||
<div id = "agi-boost-tab" class="col aDam dark-4u fake-button elem-boost" onclick="toggle_boost_tab('agi')">
|
|
||||||
Air
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col" id="str-boost" style="display: none;">
|
|
||||||
<div class="row row-cols-1">
|
|
||||||
<div class="col eDam dark-5">
|
|
||||||
Quake (Active)
|
|
||||||
</div>
|
|
||||||
<div class="col skp-tooltip dark-6 rounded-bottom my-3 my-xl-1">
|
|
||||||
<div class="row row-cols-2 row-cols-xl-0 text-nowrap justify-content-center">
|
|
||||||
<div class="col-auto p-1">
|
|
||||||
<button class = "button-boost w-100 border-0 text-white dark-8u dark-shadow-sm" id = "Quake-1" onclick = "updatePowderSpecials('Quake-1')">
|
|
||||||
Lv.4 [e4e4]
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<div class="col-auto p-1">
|
|
||||||
<button class = "button-boost w-100 border-0 text-white dark-8u dark-shadow-sm" id = "Quake-2" onclick = "updatePowderSpecials('Quake-2')">
|
|
||||||
Lv.4.5 [e5e4]
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<div class="col-auto p-1">
|
|
||||||
<button class = "button-boost w-100 border-0 text-white dark-8u dark-shadow-sm" id = "Quake-3" onclick = "updatePowderSpecials('Quake-3')">
|
|
||||||
Lv.5 [e5e5]
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<div class="col-auto p-1">
|
|
||||||
<button class = "button-boost w-100 border-0 text-white dark-8u dark-shadow-sm" id = "Quake-4" onclick = "updatePowderSpecials('Quake-4')">
|
|
||||||
Lv.5.5 [e6e5]
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<div class="col-auto p-1">
|
|
||||||
<button class = "button-boost w-100 border-0 text-white dark-8u dark-shadow-sm" id = "Quake-5" onclick = "updatePowderSpecials('Quake-5')">
|
|
||||||
Lv.6 [e6e6]
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col eDam">
|
|
||||||
Rage (Passive)
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col" id="dex-boost" style="display: none;">
|
|
||||||
<div class="row row-cols-1">
|
|
||||||
<div class="col tDam dark-5">
|
|
||||||
Chain Lightning (Active)
|
|
||||||
</div>
|
|
||||||
<div class="col skp-tooltip dark-6 rounded-bottom my-3 my-xl-1">
|
|
||||||
<div class="row row-cols-2 row-cols-xl-0 text-nowrap justify-content-center">
|
|
||||||
<div class="col-auto p-1">
|
|
||||||
<button class = "button-boost w-100 border-0 text-white dark-8u dark-shadow-sm" id = "Chain_Lightning-1" onclick = "updatePowderSpecials('Chain_Lightning-1')">
|
|
||||||
Lv.4 [t4t4]
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<div class="col-auto p-1">
|
|
||||||
<button class = "button-boost w-100 border-0 text-white dark-8u dark-shadow-sm" id = "Chain_Lightning-2" onclick = "updatePowderSpecials('Chain_Lightning-2')">
|
|
||||||
Lv.4.5 [t5t4]
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<div class="col-auto p-1">
|
|
||||||
<button class = "button-boost w-100 border-0 text-white dark-8u dark-shadow-sm" id = "Chain_Lightning-3" onclick = "updatePowderSpecials('Chain_Lightning-3')">
|
|
||||||
Lv.5 [t5t5]
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<div class="col-auto p-1">
|
|
||||||
<button class = "button-boost w-100 border-0 text-white dark-8u dark-shadow-sm" id = "Chain_Lightning-4" onclick = "updatePowderSpecials('Chain_Lightning-4')">
|
|
||||||
Lv.5.5 [t6t5]
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<div class="col-auto p-1">
|
|
||||||
<button class = "button-boost w-100 border-0 text-white dark-8u dark-shadow-sm" id = "Chain_Lightning-5" onclick = "updatePowderSpecials('Chain_Lightning-5')">
|
|
||||||
Lv.6 [t6t6]
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col tDam">
|
|
||||||
Kill Streak (Passive)
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col" id="int-boost">
|
|
||||||
<div class="row row-cols-1">
|
|
||||||
<div class="col wDam dark-5">
|
|
||||||
Curse (Active)
|
|
||||||
</div>
|
|
||||||
<div class="col skp-tooltip dark-6 rounded-bottom my-3 my-xl-1">
|
|
||||||
<div class="row row-cols-2 row-cols-xl-0 text-nowrap justify-content-center">
|
|
||||||
<div class="col-auto p-1">
|
|
||||||
<button class = "button-boost w-100 border-0 text-white dark-8u dark-shadow-sm" id = "Curse-1" onclick = "updatePowderSpecials('Curse-1')">
|
|
||||||
Lv.4 [w4w4]
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<div class="col-auto p-1">
|
|
||||||
<button class = "button-boost w-100 border-0 text-white dark-8u dark-shadow-sm" id = "Curse-2" onclick = "updatePowderSpecials('Curse-2')">
|
|
||||||
Lv.4.5 [w5w4]
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<div class="col-auto p-1">
|
|
||||||
<button class = "button-boost w-100 border-0 text-white dark-8u dark-shadow-sm" id = "Curse-3" onclick = "updatePowderSpecials('Curse-3')">
|
|
||||||
Lv.5 [w5w5]
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<div class="col-auto p-1">
|
|
||||||
<button class = "button-boost w-100 border-0 text-white dark-8u dark-shadow-sm" id = "Curse-4" onclick = "updatePowderSpecials('Curse-4')">
|
|
||||||
Lv.5.5 [w6w5]
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<div class="col-auto p-1">
|
|
||||||
<button class = "button-boost w-100 border-0 text-white dark-8u dark-shadow-sm" id = "Curse-5" onclick = "updatePowderSpecials('Curse-5')">
|
|
||||||
Lv.6 [w6w6]
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col wDam">
|
|
||||||
Concentration (Passive)
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col" id="def-boost" style="display: none;">
|
|
||||||
<div class="row row-cols-1">
|
|
||||||
<div class="col fDam dark-5">
|
|
||||||
Courage (Active)
|
|
||||||
</div>
|
|
||||||
<div class="col skp-tooltip dark-6 rounded-bottom my-3 my-xl-1">
|
|
||||||
<div class="row row-cols-2 row-cols-xl-0 text-nowrap justify-content-center">
|
|
||||||
<div class="col-auto p-1">
|
|
||||||
<button class = "button-boost w-100 border-0 text-white dark-8u dark-shadow-sm" id = "Courage-1" onclick = "updatePowderSpecials('Courage-1')">
|
|
||||||
Lv.4 [f4f4]
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<div class="col-auto p-1">
|
|
||||||
<button class = "button-boost w-100 border-0 text-white dark-8u dark-shadow-sm" id = "Courage-2" onclick = "updatePowderSpecials('Courage-2')">
|
|
||||||
Lv.4.5 [f5f4]
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<div class="col-auto p-1">
|
|
||||||
<button class = "button-boost w-100 border-0 text-white dark-8u dark-shadow-sm" id = "Courage-3" onclick = "updatePowderSpecials('Courage-3')">
|
|
||||||
Lv.5 [f5f5]
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<div class="col-auto p-1">
|
|
||||||
<button class = "button-boost w-100 border-0 text-white dark-8u dark-shadow-sm" id = "Courage-4" onclick = "updatePowderSpecials('Courage-4')">
|
|
||||||
Lv.5.5 [f6f5]
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<div class="col-auto p-1">
|
|
||||||
<button class = "button-boost w-100 border-0 text-white dark-8u dark-shadow-sm" id = "Courage-5" onclick = "updatePowderSpecials('Courage-5')">
|
|
||||||
Lv.6 [f6f6]
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col fDam">
|
|
||||||
Endurance (Passive)
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col" id="agi-boost" style="display: none;">
|
|
||||||
<div class="row row-cols-1">
|
|
||||||
<div class="col aDam dark-5">
|
|
||||||
Wind Prison (Active)
|
|
||||||
</div>
|
|
||||||
<div class="col skp-tooltip dark-6 rounded-bottom my-3 my-xl-1">
|
|
||||||
<div class="row row-cols-2 row-cols-xl-0 text-nowrap justify-content-center">
|
|
||||||
<div class="col-auto p-1">
|
|
||||||
<button class = "button-boost w-100 border-0 text-white dark-8u dark-shadow-sm" id = "Wind_Prison-1" onclick = "updatePowderSpecials('Wind_Prison-1')">
|
|
||||||
Lv.4 [a4a4]
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<div class="col-auto p-1">
|
|
||||||
<button class = "button-boost w-100 border-0 text-white dark-8u dark-shadow-sm" id = "Wind_Prison-2" onclick = "updatePowderSpecials('Wind_Prison-2')">
|
|
||||||
Lv.4.5 [a5a4]
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<div class="col-auto p-1">
|
|
||||||
<button class = "button-boost w-100 border-0 text-white dark-8u dark-shadow-sm" id = "Wind_Prison-3" onclick = "updatePowderSpecials('Wind_Prison-3')">
|
|
||||||
Lv.5 [a5a5]
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<div class="col-auto p-1">
|
|
||||||
<button class = "button-boost w-100 border-0 text-white dark-8u dark-shadow-sm" id = "Wind_Prison-4" onclick = "updatePowderSpecials('Wind_Prison-4')">
|
|
||||||
Lv.5.5 [a6a5]
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<div class="col-auto p-1">
|
|
||||||
<button class = "button-boost w-100 border-0 text-white dark-8u dark-shadow-sm" id = "Wind_Prison-5" onclick = "updatePowderSpecials('Wind_Prison-5')">
|
|
||||||
Lv.6 [a6a6]
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col aDam">
|
|
||||||
Dodge (Passive)
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -1244,23 +1152,17 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-xl-3 mb-3 px-0">
|
<div class="col-xl-3 mb-3 px-0">
|
||||||
<div class="row row-cols-1 gy-3 mb-4 text-center scaled-font">
|
<div id="all-spells-display" class="row row-cols-1 gy-3 mb-4 text-center scaled-font">
|
||||||
<div class = "col">
|
|
||||||
<div class = "spell-display spell-expand dark-5 rounded dark-shadow py-2 border border-dark" id="build-melee-statsAvg">melee</div>
|
|
||||||
<div class = "spell-display dark-5 rounded-bottom py-2 dark-shadow" id = "build-melee-stats" style="display: none;"></div>
|
|
||||||
</div>
|
|
||||||
<div class = "col">
|
|
||||||
<div class = "col spell-display dark-5 rounded dark-shadow py-2 border border-dark" id="build-poison-stats">poison</div>
|
|
||||||
</div>
|
|
||||||
<div id="all-spells-display" class="row row-cols-1 gy-3 text-center scaled-font pe-0">
|
|
||||||
<div class = "col pe-0">
|
<div class = "col pe-0">
|
||||||
<div class = "col spell-display spell-expand dark-5 rounded dark-shadow pt-2 border border-dark" id="spell0-infoAvg">Input a weapon to see abilities!</div>
|
<div class = "col spell-display spell-expand dark-5 rounded dark-shadow pt-2 border border-dark" id="spell0-infoAvg">Input a weapon to see abilities!</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class = "col">
|
<div class="row row-cols-1 gy-3 mb-4 text-center scaled-font" id="build-poison-stats" style="display: none">
|
||||||
<div class = "spell-display dark-5 rounded dark-shadow py-2 border border-dark" id = "powder-special-stats"></div>
|
</div>
|
||||||
|
<div class="row row-cols-1 gy-3 mb-4 text-center scaled-font">
|
||||||
|
<div class = "col pe-0">
|
||||||
|
<div class="col pe-0 spell-display dark-5 rounded dark-shadow py-2 border border-dark" id="powder-special-stats"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -1284,20 +1186,6 @@
|
||||||
</div>
|
</div>
|
||||||
<div id="weapon-tooltip" class="rounded row row-cols-1 g-0 scaled-font float-tooltip border border-3 border-dark dark-shadow p-3">
|
<div id="weapon-tooltip" class="rounded row row-cols-1 g-0 scaled-font float-tooltip border border-3 border-dark dark-shadow p-3">
|
||||||
</div>
|
</div>
|
||||||
<!--div id="weaponTome1-tooltip" class="rounded row row-cols-1 g-0 scaled-font float-tooltip border border-3 border-dark dark-shadow p-3">
|
|
||||||
</div>
|
|
||||||
<div id="weaponTome2-tooltip" class="rounded row row-cols-1 g-0 scaled-font float-tooltip border border-3 border-dark dark-shadow p-3">
|
|
||||||
</div>
|
|
||||||
<div id="armorTome1-tooltip" class="rounded row row-cols-1 g-0 scaled-font float-tooltip border border-3 border-dark dark-shadow p-3">
|
|
||||||
</div>
|
|
||||||
<div id="armorTome2-tooltip" class="rounded row row-cols-1 g-0 scaled-font float-tooltip border border-3 border-dark dark-shadow p-3">
|
|
||||||
</div>
|
|
||||||
<div id="armorTome3-tooltip" class="rounded row row-cols-1 g-0 scaled-font float-tooltip border border-3 border-dark dark-shadow p-3">
|
|
||||||
</div>
|
|
||||||
<div id="armorTome4-tooltip" class="rounded row row-cols-1 g-0 scaled-font float-tooltip border border-3 border-dark dark-shadow p-3">
|
|
||||||
</div>
|
|
||||||
<div id="guildTome1-tooltip" class="rounded row row-cols-1 g-0 scaled-font float-tooltip border border-3 border-dark dark-shadow p-3">
|
|
||||||
</div-->
|
|
||||||
<div class="rounded row row-cols-1 g-0 scaled-font float-tooltip border border-3 border-dark dark-shadow p-3" id = "build-order">
|
<div class="rounded row row-cols-1 g-0 scaled-font float-tooltip border border-3 border-dark dark-shadow p-3" id = "build-order">
|
||||||
</div>
|
</div>
|
||||||
<div class = "rounded row row-cols-1 g-0 scaled-font float-tooltip border border-3 border-dark p-3" id = "set-info"></div>
|
<div class = "rounded row row-cols-1 g-0 scaled-font float-tooltip border border-3 border-dark p-3" id = "set-info"></div>
|
||||||
|
@ -1364,10 +1252,8 @@
|
||||||
<div class = "row box-title justify-content-center my-1" id = "summary">
|
<div class = "row box-title justify-content-center my-1" id = "summary">
|
||||||
</div>
|
</div>
|
||||||
<div class = "row" id = "search-results">
|
<div class = "row" id = "search-results">
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -1376,6 +1262,7 @@
|
||||||
<script type="text/javascript" src="../js/utils.js"></script>
|
<script type="text/javascript" src="../js/utils.js"></script>
|
||||||
<script type="text/javascript" src="../js/build_utils.js"></script>
|
<script type="text/javascript" src="../js/build_utils.js"></script>
|
||||||
<script type="text/javascript" src="../js/computation_graph.js"></script>
|
<script type="text/javascript" src="../js/computation_graph.js"></script>
|
||||||
|
<script type="text/javascript">COMPUTE_GRAPH_DEBUG=true;</script>
|
||||||
<!-- <script type="text/javascript" src="../js/icons.js"></script> -->
|
<!-- <script type="text/javascript" src="../js/icons.js"></script> -->
|
||||||
<script type="text/javascript" src="../js/sq2icons.js"></script>
|
<script type="text/javascript" src="../js/sq2icons.js"></script>
|
||||||
<script type="text/javascript" src="../js/powders.js"></script>
|
<script type="text/javascript" src="../js/powders.js"></script>
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -409,6 +409,186 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="col">
|
<div class="col">
|
||||||
<div class="row row-cols-1 gy-4">
|
<div class="row row-cols-1 gy-4">
|
||||||
|
|
||||||
|
<div class="col mb-1 text-center scaled-font dark-5 rounded dark-shadow">
|
||||||
|
<div class="row row-cols-1 justify-content-center">
|
||||||
|
<div class="col fw-bold dark-4 rounded-top">
|
||||||
|
Active boosts
|
||||||
|
</div>
|
||||||
|
<div class="col">
|
||||||
|
<button class="button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id="vanish-boost" onclick="update_boosts('vanish-boost')">
|
||||||
|
Vanish (+80%)
|
||||||
|
</button>
|
||||||
|
<button class="button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id="warscream-boost" onclick="update_boosts('warscream-boost')">
|
||||||
|
War Scream
|
||||||
|
</button>
|
||||||
|
<button class="button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id="ragnarokkr-boost" onclick="update_boosts('ragnarokkr-boost')">
|
||||||
|
Ragnarokkr (+30%)
|
||||||
|
</button>
|
||||||
|
<button class="button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id="yourtotem-boost" onclick="update_boosts('yourtotem-boost')">
|
||||||
|
Your Totem (+35%)
|
||||||
|
</button>
|
||||||
|
<button class="button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id="allytotem-boost" onclick="update_boosts('allytotem-boost')">
|
||||||
|
Ally Totem (+15%)
|
||||||
|
</button>
|
||||||
|
<button class="button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id="fortitude-boost" onclick="update_boosts('fortitude-boost')">
|
||||||
|
Fortitude (+60%)
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<div class="col" id="boost-toggles">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row row-cols-1 justify-content-center" id="boost-sliders">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col mb-1">
|
||||||
|
<div class="row row-cols-1 rounded text-center dark-5 scaled-font">
|
||||||
|
<div class="row p-0 m-0 text-nowrap">
|
||||||
|
<div id = "str-boost-tab" class="col eDam dark-4u fake-button elem-boost" onclick="toggle_boost_tab('str')">
|
||||||
|
Earth
|
||||||
|
</div>
|
||||||
|
<div id = "dex-boost-tab" class="col tDam dark-4u fake-button elem-boost" onclick="toggle_boost_tab('dex')">
|
||||||
|
Thunder
|
||||||
|
</div>
|
||||||
|
<div id = "int-boost-tab" class="col wDam dark-4u fake-button elem-boost" onclick="toggle_boost_tab('int')">
|
||||||
|
Water
|
||||||
|
</div>
|
||||||
|
<div id = "def-boost-tab" class="col fDam dark-4u fake-button elem-boost" onclick="toggle_boost_tab('def')">
|
||||||
|
Fire
|
||||||
|
</div>
|
||||||
|
<div id = "agi-boost-tab" class="col aDam dark-4u fake-button elem-boost" onclick="toggle_boost_tab('agi')">
|
||||||
|
Air
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row row-cols-1 p-0 m-0" id="str-boost" style="display: none;">
|
||||||
|
<div class="col eDam dark-5">
|
||||||
|
Quake (Active)
|
||||||
|
</div>
|
||||||
|
<div class="col skp-tooltip dark-6 rounded-bottom my-3 my-xl-1" >
|
||||||
|
<button class = "button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id = "Quake-1" onclick = "updatePowderSpecials('Quake-1')">
|
||||||
|
Lv.4 [e4e4]
|
||||||
|
</button>
|
||||||
|
<button class = "button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id = "Quake-2" onclick = "updatePowderSpecials('Quake-2')">
|
||||||
|
Lv.4.5 [e5e4]
|
||||||
|
</button>
|
||||||
|
<button class = "button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id = "Quake-3" onclick = "updatePowderSpecials('Quake-3')">
|
||||||
|
Lv.5 [e5e5]
|
||||||
|
</button>
|
||||||
|
<button class = "button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id = "Quake-4" onclick = "updatePowderSpecials('Quake-4')">
|
||||||
|
Lv.5.5 [e6e5]
|
||||||
|
</button>
|
||||||
|
<button class = "button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id = "Quake-5" onclick = "updatePowderSpecials('Quake-5')">
|
||||||
|
Lv.6 [e6e6]
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<div class="col eDam">
|
||||||
|
Rage (Passive)
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row row-cols-1 p-0 m-0" id="dex-boost" style="display: none;">
|
||||||
|
<div class="col tDam dark-5">
|
||||||
|
Chain Lightning (Active)
|
||||||
|
</div>
|
||||||
|
<div class="col skp-tooltip dark-6 rounded-bottom my-3 my-xl-1">
|
||||||
|
<button class = "button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id = "Chain_Lightning-1" onclick = "updatePowderSpecials('Chain_Lightning-1')">
|
||||||
|
Lv.4 [t4t4]
|
||||||
|
</button>
|
||||||
|
<button class = "button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id = "Chain_Lightning-2" onclick = "updatePowderSpecials('Chain_Lightning-2')">
|
||||||
|
Lv.4.5 [t5t4]
|
||||||
|
</button>
|
||||||
|
<button class = "button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id = "Chain_Lightning-3" onclick = "updatePowderSpecials('Chain_Lightning-3')">
|
||||||
|
Lv.5 [t5t5]
|
||||||
|
</button>
|
||||||
|
<button class = "button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id = "Chain_Lightning-4" onclick = "updatePowderSpecials('Chain_Lightning-4')">
|
||||||
|
Lv.5.5 [t6t5]
|
||||||
|
</button>
|
||||||
|
<button class = "button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id = "Chain_Lightning-5" onclick = "updatePowderSpecials('Chain_Lightning-5')">
|
||||||
|
Lv.6 [t6t6]
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<div class="col tDam">
|
||||||
|
Kill Streak (Passive)
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row row-cols-1 p-0 m-0" id="int-boost">
|
||||||
|
<div class="col wDam dark-5">
|
||||||
|
Curse (Active)
|
||||||
|
</div>
|
||||||
|
<div class="col skp-tooltip dark-6 rounded-bottom my-3 my-xl-1">
|
||||||
|
<button class = "button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id = "Curse-1" onclick = "updatePowderSpecials('Curse-1')">
|
||||||
|
Lv.4 [w4w4]
|
||||||
|
</button>
|
||||||
|
<button class = "button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id = "Curse-2" onclick = "updatePowderSpecials('Curse-2')">
|
||||||
|
Lv.4.5 [w5w4]
|
||||||
|
</button>
|
||||||
|
<button class = "button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id = "Curse-3" onclick = "updatePowderSpecials('Curse-3')">
|
||||||
|
Lv.5 [w5w5]
|
||||||
|
</button>
|
||||||
|
<button class = "button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id = "Curse-4" onclick = "updatePowderSpecials('Curse-4')">
|
||||||
|
Lv.5.5 [w6w5]
|
||||||
|
</button>
|
||||||
|
<button class = "button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id = "Curse-5" onclick = "updatePowderSpecials('Curse-5')">
|
||||||
|
Lv.6 [w6w6]
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<div class="col wDam">
|
||||||
|
Concentration (Passive)
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row row-cols-1 p-0 m-0" id="def-boost" style="display: none;">
|
||||||
|
<div class="col fDam dark-5">
|
||||||
|
Courage (Active)
|
||||||
|
</div>
|
||||||
|
<div class="col skp-tooltip dark-6 rounded-bottom my-3 my-xl-1">
|
||||||
|
<button class = "button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id = "Courage-1" onclick = "updatePowderSpecials('Courage-1')">
|
||||||
|
Lv.4 [f4f4]
|
||||||
|
</button>
|
||||||
|
<button class = "button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id = "Courage-2" onclick = "updatePowderSpecials('Courage-2')">
|
||||||
|
Lv.4.5 [f5f4]
|
||||||
|
</button>
|
||||||
|
<button class = "button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id = "Courage-3" onclick = "updatePowderSpecials('Courage-3')">
|
||||||
|
Lv.5 [f5f5]
|
||||||
|
</button>
|
||||||
|
<button class = "button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id = "Courage-4" onclick = "updatePowderSpecials('Courage-4')">
|
||||||
|
Lv.5.5 [f6f5]
|
||||||
|
</button>
|
||||||
|
<button class = "button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id = "Courage-5" onclick = "updatePowderSpecials('Courage-5')">
|
||||||
|
Lv.6 [f6f6]
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<div class="col fDam">
|
||||||
|
Endurance (Passive)
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row row-cols-1 p-0 m-0" id="agi-boost" style="display: none;">
|
||||||
|
<div class="col aDam dark-5">
|
||||||
|
Wind Prison (Active)
|
||||||
|
</div>
|
||||||
|
<div class="col skp-tooltip dark-6 rounded-bottom my-3 my-xl-1">
|
||||||
|
<button class = "button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id = "Wind_Prison-1" onclick = "updatePowderSpecials('Wind_Prison-1')">
|
||||||
|
Lv.4 [a4a4]
|
||||||
|
</button>
|
||||||
|
<button class = "button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id = "Wind_Prison-2" onclick = "updatePowderSpecials('Wind_Prison-2')">
|
||||||
|
Lv.4.5 [a5a4]
|
||||||
|
</button>
|
||||||
|
<button class = "button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id = "Wind_Prison-3" onclick = "updatePowderSpecials('Wind_Prison-3')">
|
||||||
|
Lv.5 [a5a5]
|
||||||
|
</button>
|
||||||
|
<button class = "button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id = "Wind_Prison-4" onclick = "updatePowderSpecials('Wind_Prison-4')">
|
||||||
|
Lv.5.5 [a6a5]
|
||||||
|
</button>
|
||||||
|
<button class = "button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id = "Wind_Prison-5" onclick = "updatePowderSpecials('Wind_Prison-5')">
|
||||||
|
Lv.6 [a6a6]
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<div class="col aDam">
|
||||||
|
Dodge (Passive)
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div class="col mb-1">
|
<div class="col mb-1">
|
||||||
<div class="row row-cols-1 row-cols-1 text-center scaled-font dark-5 rounded dark-shadow">
|
<div class="row row-cols-1 row-cols-1 text-center scaled-font dark-5 rounded dark-shadow">
|
||||||
<div class="col fw-bold dark-4 rounded-top">
|
<div class="col fw-bold dark-4 rounded-top">
|
||||||
|
@ -947,179 +1127,6 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col mb-1">
|
|
||||||
<div class="row row-cols-1 text-center scaled-font dark-5 rounded dark-shadow justify-content-center">
|
|
||||||
<div class="col fw-bold dark-4 rounded-top">
|
|
||||||
Active boosts
|
|
||||||
</div>
|
|
||||||
<div class="col">
|
|
||||||
<button class="button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id="vanish-boost" onclick="update_boosts('vanish-boost')">
|
|
||||||
Vanish (+80%)
|
|
||||||
</button>
|
|
||||||
<button class="button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id="warscream-boost" onclick="update_boosts('warscream-boost')">
|
|
||||||
War Scream
|
|
||||||
</button>
|
|
||||||
<button class="button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id="ragnarokkr-boost" onclick="update_boosts('ragnarokkr-boost')">
|
|
||||||
Ragnarokkr (+30%)
|
|
||||||
</button>
|
|
||||||
<button class="button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id="yourtotem-boost" onclick="update_boosts('yourtotem-boost')">
|
|
||||||
Your Totem (+35%)
|
|
||||||
</button>
|
|
||||||
<button class="button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id="allytotem-boost" onclick="update_boosts('allytotem-boost')">
|
|
||||||
Ally Totem (+15%)
|
|
||||||
</button>
|
|
||||||
<button class="button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id="fortitude-boost" onclick="update_boosts('fortitude-boost')">
|
|
||||||
Fortitude (+60%)
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col mb-1">
|
|
||||||
<div class="row row-cols-1 rounded text-center dark-5 scaled-font">
|
|
||||||
<div class="row p-0 m-0 text-nowrap">
|
|
||||||
<div id = "str-boost-tab" class="col eDam dark-4u fake-button elem-boost" onclick="toggle_boost_tab('str')">
|
|
||||||
Earth
|
|
||||||
</div>
|
|
||||||
<div id = "dex-boost-tab" class="col tDam dark-4u fake-button elem-boost" onclick="toggle_boost_tab('dex')">
|
|
||||||
Thunder
|
|
||||||
</div>
|
|
||||||
<div id = "int-boost-tab" class="col wDam dark-4u fake-button elem-boost" onclick="toggle_boost_tab('int')">
|
|
||||||
Water
|
|
||||||
</div>
|
|
||||||
<div id = "def-boost-tab" class="col fDam dark-4u fake-button elem-boost" onclick="toggle_boost_tab('def')">
|
|
||||||
Fire
|
|
||||||
</div>
|
|
||||||
<div id = "agi-boost-tab" class="col aDam dark-4u fake-button elem-boost" onclick="toggle_boost_tab('agi')">
|
|
||||||
Air
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row row-cols-1 p-0 m-0" id="str-boost" style="display: none;">
|
|
||||||
<div class="col eDam dark-5">
|
|
||||||
Quake (Active)
|
|
||||||
</div>
|
|
||||||
<div class="col skp-tooltip dark-6 rounded-bottom my-3 my-xl-1" >
|
|
||||||
<button class = "button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id = "Quake-1" onclick = "updatePowderSpecials('Quake-1')">
|
|
||||||
Lv.4 [e4e4]
|
|
||||||
</button>
|
|
||||||
<button class = "button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id = "Quake-2" onclick = "updatePowderSpecials('Quake-2')">
|
|
||||||
Lv.4.5 [e5e4]
|
|
||||||
</button>
|
|
||||||
<button class = "button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id = "Quake-3" onclick = "updatePowderSpecials('Quake-3')">
|
|
||||||
Lv.5 [e5e5]
|
|
||||||
</button>
|
|
||||||
<button class = "button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id = "Quake-4" onclick = "updatePowderSpecials('Quake-4')">
|
|
||||||
Lv.5.5 [e6e5]
|
|
||||||
</button>
|
|
||||||
<button class = "button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id = "Quake-5" onclick = "updatePowderSpecials('Quake-5')">
|
|
||||||
Lv.6 [e6e6]
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<div class="col eDam">
|
|
||||||
Rage (Passive)
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row row-cols-1 p-0 m-0" id="dex-boost" style="display: none;">
|
|
||||||
<div class="col tDam dark-5">
|
|
||||||
Chain Lightning (Active)
|
|
||||||
</div>
|
|
||||||
<div class="col skp-tooltip dark-6 rounded-bottom my-3 my-xl-1">
|
|
||||||
<button class = "button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id = "Chain_Lightning-1" onclick = "updatePowderSpecials('Chain_Lightning-1')">
|
|
||||||
Lv.4 [t4t4]
|
|
||||||
</button>
|
|
||||||
<button class = "button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id = "Chain_Lightning-2" onclick = "updatePowderSpecials('Chain_Lightning-2')">
|
|
||||||
Lv.4.5 [t5t4]
|
|
||||||
</button>
|
|
||||||
<button class = "button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id = "Chain_Lightning-3" onclick = "updatePowderSpecials('Chain_Lightning-3')">
|
|
||||||
Lv.5 [t5t5]
|
|
||||||
</button>
|
|
||||||
<button class = "button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id = "Chain_Lightning-4" onclick = "updatePowderSpecials('Chain_Lightning-4')">
|
|
||||||
Lv.5.5 [t6t5]
|
|
||||||
</button>
|
|
||||||
<button class = "button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id = "Chain_Lightning-5" onclick = "updatePowderSpecials('Chain_Lightning-5')">
|
|
||||||
Lv.6 [t6t6]
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<div class="col tDam">
|
|
||||||
Kill Streak (Passive)
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row row-cols-1 p-0 m-0" id="int-boost">
|
|
||||||
<div class="col wDam dark-5">
|
|
||||||
Curse (Active)
|
|
||||||
</div>
|
|
||||||
<div class="col skp-tooltip dark-6 rounded-bottom my-3 my-xl-1">
|
|
||||||
<button class = "button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id = "Curse-1" onclick = "updatePowderSpecials('Curse-1')">
|
|
||||||
Lv.4 [w4w4]
|
|
||||||
</button>
|
|
||||||
<button class = "button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id = "Curse-2" onclick = "updatePowderSpecials('Curse-2')">
|
|
||||||
Lv.4.5 [w5w4]
|
|
||||||
</button>
|
|
||||||
<button class = "button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id = "Curse-3" onclick = "updatePowderSpecials('Curse-3')">
|
|
||||||
Lv.5 [w5w5]
|
|
||||||
</button>
|
|
||||||
<button class = "button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id = "Curse-4" onclick = "updatePowderSpecials('Curse-4')">
|
|
||||||
Lv.5.5 [w6w5]
|
|
||||||
</button>
|
|
||||||
<button class = "button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id = "Curse-5" onclick = "updatePowderSpecials('Curse-5')">
|
|
||||||
Lv.6 [w6w6]
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<div class="col wDam">
|
|
||||||
Concentration (Passive)
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row row-cols-1 p-0 m-0" id="def-boost" style="display: none;">
|
|
||||||
<div class="col fDam dark-5">
|
|
||||||
Courage (Active)
|
|
||||||
</div>
|
|
||||||
<div class="col skp-tooltip dark-6 rounded-bottom my-3 my-xl-1">
|
|
||||||
<button class = "button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id = "Courage-1" onclick = "updatePowderSpecials('Courage-1')">
|
|
||||||
Lv.4 [f4f4]
|
|
||||||
</button>
|
|
||||||
<button class = "button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id = "Courage-2" onclick = "updatePowderSpecials('Courage-2')">
|
|
||||||
Lv.4.5 [f5f4]
|
|
||||||
</button>
|
|
||||||
<button class = "button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id = "Courage-3" onclick = "updatePowderSpecials('Courage-3')">
|
|
||||||
Lv.5 [f5f5]
|
|
||||||
</button>
|
|
||||||
<button class = "button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id = "Courage-4" onclick = "updatePowderSpecials('Courage-4')">
|
|
||||||
Lv.5.5 [f6f5]
|
|
||||||
</button>
|
|
||||||
<button class = "button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id = "Courage-5" onclick = "updatePowderSpecials('Courage-5')">
|
|
||||||
Lv.6 [f6f6]
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<div class="col fDam">
|
|
||||||
Endurance (Passive)
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row row-cols-1 p-0 m-0" id="agi-boost" style="display: none;">
|
|
||||||
<div class="col aDam dark-5">
|
|
||||||
Wind Prison (Active)
|
|
||||||
</div>
|
|
||||||
<div class="col skp-tooltip dark-6 rounded-bottom my-3 my-xl-1">
|
|
||||||
<button class = "button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id = "Wind_Prison-1" onclick = "updatePowderSpecials('Wind_Prison-1')">
|
|
||||||
Lv.4 [a4a4]
|
|
||||||
</button>
|
|
||||||
<button class = "button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id = "Wind_Prison-2" onclick = "updatePowderSpecials('Wind_Prison-2')">
|
|
||||||
Lv.4.5 [a5a4]
|
|
||||||
</button>
|
|
||||||
<button class = "button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id = "Wind_Prison-3" onclick = "updatePowderSpecials('Wind_Prison-3')">
|
|
||||||
Lv.5 [a5a5]
|
|
||||||
</button>
|
|
||||||
<button class = "button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id = "Wind_Prison-4" onclick = "updatePowderSpecials('Wind_Prison-4')">
|
|
||||||
Lv.5.5 [a6a5]
|
|
||||||
</button>
|
|
||||||
<button class = "button-boost m-1 border-0 text-white dark-8u dark-shadow-sm" id = "Wind_Prison-5" onclick = "updatePowderSpecials('Wind_Prison-5')">
|
|
||||||
Lv.6 [a6a6]
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<div class="col aDam">
|
|
||||||
Dodge (Passive)
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
116
clean.json
116
clean.json
|
@ -15824,7 +15824,7 @@
|
||||||
"type": "bow",
|
"type": "bow",
|
||||||
"category": "weapon",
|
"category": "weapon",
|
||||||
"drop": "NORMAL",
|
"drop": "NORMAL",
|
||||||
"nDam": "149-149",
|
"nDam": "125-125",
|
||||||
"fDam": "0-0",
|
"fDam": "0-0",
|
||||||
"wDam": "0-0",
|
"wDam": "0-0",
|
||||||
"aDam": "0-0",
|
"aDam": "0-0",
|
||||||
|
@ -76176,8 +76176,8 @@
|
||||||
"sdPct": 14,
|
"sdPct": 14,
|
||||||
"mdPct": 14,
|
"mdPct": 14,
|
||||||
"jh": 1,
|
"jh": 1,
|
||||||
"mr": -1,
|
"mr": -5,
|
||||||
"ms": -1
|
"ms": -5
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"hprRaw": 50,
|
"hprRaw": 50,
|
||||||
|
@ -76205,19 +76205,19 @@
|
||||||
"bonuses": [
|
"bonuses": [
|
||||||
{},
|
{},
|
||||||
{
|
{
|
||||||
"ms": 1,
|
"ms": 5,
|
||||||
"dex": 2,
|
"dex": 2,
|
||||||
"sdRaw": 15,
|
"sdRaw": 15,
|
||||||
"mdRaw": 5
|
"mdRaw": 5
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ms": 1,
|
"ms": 5,
|
||||||
"dex": 6,
|
"dex": 6,
|
||||||
"sdRaw": 35,
|
"sdRaw": 35,
|
||||||
"mdRaw": 10
|
"mdRaw": 10
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ms": 3,
|
"ms": 15,
|
||||||
"dex": 20,
|
"dex": 20,
|
||||||
"sdRaw": 65,
|
"sdRaw": 65,
|
||||||
"mdRaw": 70
|
"mdRaw": 70
|
||||||
|
@ -76277,10 +76277,10 @@
|
||||||
{},
|
{},
|
||||||
{},
|
{},
|
||||||
{
|
{
|
||||||
"mr": 5,
|
"mr": 25,
|
||||||
"sdPct": 75,
|
"sdPct": 75,
|
||||||
"mdPct": 75,
|
"mdPct": 75,
|
||||||
"ms": 5,
|
"ms": 25,
|
||||||
"ls": 400,
|
"ls": 400,
|
||||||
"hprRaw": 600
|
"hprRaw": 600
|
||||||
}
|
}
|
||||||
|
@ -76405,24 +76405,24 @@
|
||||||
"bonuses": [
|
"bonuses": [
|
||||||
{},
|
{},
|
||||||
{
|
{
|
||||||
"mr": -1,
|
"mr": -5,
|
||||||
"ms": 2,
|
"ms": 10,
|
||||||
"sdRaw": 40,
|
"sdRaw": 40,
|
||||||
"wDamPct": 5,
|
"wDamPct": 5,
|
||||||
"tDamPct": 5,
|
"tDamPct": 5,
|
||||||
"eDamPct": -34
|
"eDamPct": -34
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"mr": -2,
|
"mr": -10,
|
||||||
"ms": 4,
|
"ms": 20,
|
||||||
"sdRaw": 115,
|
"sdRaw": 115,
|
||||||
"wDamPct": 10,
|
"wDamPct": 10,
|
||||||
"tDamPct": 10,
|
"tDamPct": 10,
|
||||||
"eDamPct": -67
|
"eDamPct": -67
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"mr": -3,
|
"mr": -15,
|
||||||
"ms": 6,
|
"ms": 30,
|
||||||
"sdRaw": 230,
|
"sdRaw": 230,
|
||||||
"wDamPct": 32,
|
"wDamPct": 32,
|
||||||
"tDamPct": 32,
|
"tDamPct": 32,
|
||||||
|
@ -76459,7 +76459,7 @@
|
||||||
"spRegen": 15
|
"spRegen": 15
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"mr": 2,
|
"mr": 10,
|
||||||
"sdPct": 25,
|
"sdPct": 25,
|
||||||
"mdPct": 25,
|
"mdPct": 25,
|
||||||
"xpb": 50,
|
"xpb": 50,
|
||||||
|
@ -76545,7 +76545,7 @@
|
||||||
"bonuses": [
|
"bonuses": [
|
||||||
{},
|
{},
|
||||||
{
|
{
|
||||||
"mr": 2,
|
"mr": 10,
|
||||||
"xpb": 40,
|
"xpb": 40,
|
||||||
"def": 25,
|
"def": 25,
|
||||||
"fDamPct": 20,
|
"fDamPct": 20,
|
||||||
|
@ -76689,21 +76689,21 @@
|
||||||
{},
|
{},
|
||||||
{
|
{
|
||||||
"hprPct": -10,
|
"hprPct": -10,
|
||||||
"mr": 1,
|
"mr": 5,
|
||||||
"sdPct": 6,
|
"sdPct": 6,
|
||||||
"ref": 10,
|
"ref": 10,
|
||||||
"thorns": 8
|
"thorns": 8
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"hprPct": -20,
|
"hprPct": -20,
|
||||||
"mr": 2,
|
"mr": 10,
|
||||||
"sdPct": 14,
|
"sdPct": 14,
|
||||||
"ref": 35,
|
"ref": 35,
|
||||||
"thorns": 24
|
"thorns": 24
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"hprPct": -30,
|
"hprPct": -30,
|
||||||
"mr": 4,
|
"mr": 20,
|
||||||
"sdPct": 30,
|
"sdPct": 30,
|
||||||
"ref": 75,
|
"ref": 75,
|
||||||
"thorns": 70
|
"thorns": 70
|
||||||
|
@ -76719,9 +76719,9 @@
|
||||||
{},
|
{},
|
||||||
{
|
{
|
||||||
"mdPct": 30,
|
"mdPct": 30,
|
||||||
"ms": 2,
|
"ms": 10,
|
||||||
"spd": 25,
|
"spd": 25,
|
||||||
"spPct2": -40
|
"spPct2": -28
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
@ -76743,46 +76743,46 @@
|
||||||
"lb": 5
|
"lb": 5
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"mr": 1,
|
"mr": 5,
|
||||||
"xpb": 10,
|
"xpb": 10,
|
||||||
"lb": 10,
|
"lb": 10,
|
||||||
"spRaw2": -1,
|
"spRaw2": -5,
|
||||||
"hpBonus": 125
|
"hpBonus": 125
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"mr": 1,
|
"mr": 5,
|
||||||
"xpb": 15,
|
"xpb": 15,
|
||||||
"lb": 15,
|
"lb": 15,
|
||||||
"spRaw2": -1,
|
"spRaw2": -5,
|
||||||
"hpBonus": 425
|
"hpBonus": 425
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"mr": 2,
|
"mr": 10,
|
||||||
"xpb": 35,
|
"xpb": 35,
|
||||||
"lb": 35,
|
"lb": 35,
|
||||||
"hpBonus": 1325,
|
"hpBonus": 1325,
|
||||||
"spRaw2": -1,
|
"spRaw2": -5,
|
||||||
"spRaw4": -1
|
"spRaw4": -5
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"mr": 2,
|
"mr": 10,
|
||||||
"xpb": 55,
|
"xpb": 55,
|
||||||
"lb": 55,
|
"lb": 55,
|
||||||
"hpBonus": 2575,
|
"hpBonus": 2575,
|
||||||
"spRaw2": -1,
|
"spRaw2": -5,
|
||||||
"spRaw4": -1
|
"spRaw4": -5
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"mr": 3,
|
"mr": 15,
|
||||||
"xpb": 80,
|
"xpb": 80,
|
||||||
"lb": 80,
|
"lb": 80,
|
||||||
"hpBonus": 4450,
|
"hpBonus": 4450,
|
||||||
"spRaw1": -1,
|
"spRaw1": -5,
|
||||||
"spRaw2": -1,
|
"spRaw2": -5,
|
||||||
"spRaw4": -1
|
"spRaw4": -5
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"mr": 4,
|
"mr": 20,
|
||||||
"xpb": 100,
|
"xpb": 100,
|
||||||
"lb": 100,
|
"lb": 100,
|
||||||
"str": 15,
|
"str": 15,
|
||||||
|
@ -76791,10 +76791,10 @@
|
||||||
"agi": 15,
|
"agi": 15,
|
||||||
"def": 15,
|
"def": 15,
|
||||||
"hpBonus": 8270,
|
"hpBonus": 8270,
|
||||||
"spRaw1": -1,
|
"spRaw1": -5,
|
||||||
"spRaw2": -1,
|
"spRaw2": -5,
|
||||||
"spRaw3": -1,
|
"spRaw3": -5,
|
||||||
"spRaw4": -1
|
"spRaw4": -5
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
@ -76816,8 +76816,8 @@
|
||||||
"xpb": 25,
|
"xpb": 25,
|
||||||
"spRegen": 10,
|
"spRegen": 10,
|
||||||
"sdPct": 8,
|
"sdPct": 8,
|
||||||
"spPct1": -12,
|
"spPct1": -8,
|
||||||
"spPct3": -12
|
"spPct3": -8
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
@ -76858,11 +76858,11 @@
|
||||||
"bonuses": [
|
"bonuses": [
|
||||||
{},
|
{},
|
||||||
{
|
{
|
||||||
"mr": 2,
|
"mr": 10,
|
||||||
"sdPct": 15,
|
"sdPct": 15,
|
||||||
"mdPct": -15,
|
"mdPct": -15,
|
||||||
"sdRaw": 30,
|
"sdRaw": 30,
|
||||||
"spPct2": -50
|
"spPct2": -35
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
@ -77126,7 +77126,7 @@
|
||||||
"bonuses": [
|
"bonuses": [
|
||||||
{},
|
{},
|
||||||
{
|
{
|
||||||
"mr": 2,
|
"mr": 10,
|
||||||
"mdPct": -24,
|
"mdPct": -24,
|
||||||
"int": 5,
|
"int": 5,
|
||||||
"wDamPct": 10,
|
"wDamPct": 10,
|
||||||
|
@ -77134,7 +77134,7 @@
|
||||||
"wDefPct": 16
|
"wDefPct": 16
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"mr": 5,
|
"mr": 25,
|
||||||
"mdPct": -54,
|
"mdPct": -54,
|
||||||
"int": 15,
|
"int": 15,
|
||||||
"wDamPct": 20,
|
"wDamPct": 20,
|
||||||
|
@ -77142,7 +77142,7 @@
|
||||||
"wDefPct": 36
|
"wDefPct": 36
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"mr": 8,
|
"mr": 40,
|
||||||
"mdPct": -90,
|
"mdPct": -90,
|
||||||
"int": 25,
|
"int": 25,
|
||||||
"wDamPct": 40,
|
"wDamPct": 40,
|
||||||
|
@ -77168,7 +77168,7 @@
|
||||||
"aDefPct": 20,
|
"aDefPct": 20,
|
||||||
"tDefPct": 20,
|
"tDefPct": 20,
|
||||||
"eDefPct": 20,
|
"eDefPct": 20,
|
||||||
"ms": 1
|
"ms": 5
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"xpb": 50,
|
"xpb": 50,
|
||||||
|
@ -77178,7 +77178,7 @@
|
||||||
"aDefPct": 50,
|
"aDefPct": 50,
|
||||||
"tDefPct": 50,
|
"tDefPct": 50,
|
||||||
"eDefPct": 50,
|
"eDefPct": 50,
|
||||||
"ms": 2
|
"ms": 10
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"xpb": 75,
|
"xpb": 75,
|
||||||
|
@ -77189,7 +77189,7 @@
|
||||||
"tDefPct": 100,
|
"tDefPct": 100,
|
||||||
"eDefPct": 100,
|
"eDefPct": 100,
|
||||||
"sdPct": 40,
|
"sdPct": 40,
|
||||||
"ms": 6
|
"ms": 30
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
@ -77203,7 +77203,7 @@
|
||||||
"bonuses": [
|
"bonuses": [
|
||||||
{},
|
{},
|
||||||
{
|
{
|
||||||
"mr": 1,
|
"mr": 5,
|
||||||
"sdPct": -10,
|
"sdPct": -10,
|
||||||
"mdPct": -15,
|
"mdPct": -15,
|
||||||
"def": 7,
|
"def": 7,
|
||||||
|
@ -77212,7 +77212,7 @@
|
||||||
"aDamPct": 15
|
"aDamPct": 15
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"mr": 3,
|
"mr": 15,
|
||||||
"sdPct": -20,
|
"sdPct": -20,
|
||||||
"mdPct": -40,
|
"mdPct": -40,
|
||||||
"def": 15,
|
"def": 15,
|
||||||
|
@ -77221,7 +77221,7 @@
|
||||||
"aDamPct": 40
|
"aDamPct": 40
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"mr": 6,
|
"mr": 30,
|
||||||
"sdPct": -40,
|
"sdPct": -40,
|
||||||
"mdPct": -85,
|
"mdPct": -85,
|
||||||
"def": 40,
|
"def": 40,
|
||||||
|
@ -77283,7 +77283,7 @@
|
||||||
"sdPct": -33,
|
"sdPct": -33,
|
||||||
"mdPct": -33,
|
"mdPct": -33,
|
||||||
"ls": 90,
|
"ls": 90,
|
||||||
"ms": 2,
|
"ms": 10,
|
||||||
"sdRaw": 160,
|
"sdRaw": 160,
|
||||||
"mdRaw": 105,
|
"mdRaw": 105,
|
||||||
"atkTier": 1
|
"atkTier": 1
|
||||||
|
@ -77304,7 +77304,7 @@
|
||||||
"hprRaw": 90
|
"hprRaw": 90
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"mr": 5,
|
"mr": 25,
|
||||||
"int": 20,
|
"int": 20,
|
||||||
"def": 20,
|
"def": 20,
|
||||||
"hpBonus": 1500,
|
"hpBonus": 1500,
|
||||||
|
@ -77324,19 +77324,19 @@
|
||||||
"bonuses": [
|
"bonuses": [
|
||||||
{},
|
{},
|
||||||
{
|
{
|
||||||
"mr": 1,
|
"mr": 5,
|
||||||
"xpb": 5,
|
"xpb": 5,
|
||||||
"lb": 10,
|
"lb": 10,
|
||||||
"hpBonus": 55
|
"hpBonus": 55
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"mr": 2,
|
"mr": 10,
|
||||||
"xpb": 10,
|
"xpb": 10,
|
||||||
"lb": 25,
|
"lb": 25,
|
||||||
"hpBonus": 170
|
"hpBonus": 170
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"mr": 4,
|
"mr": 20,
|
||||||
"xpb": 25,
|
"xpb": 25,
|
||||||
"lb": 50,
|
"lb": 50,
|
||||||
"int": 20,
|
"int": 20,
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -59,7 +59,6 @@
|
||||||
<script type="text/javascript" src="/js/icons.js"></script>
|
<script type="text/javascript" src="/js/icons.js"></script>
|
||||||
<script type="text/javascript" src="/js/damage_calc.js"></script>
|
<script type="text/javascript" src="/js/damage_calc.js"></script>
|
||||||
<script type="text/javascript" src="/js/powders.js"></script>
|
<script type="text/javascript" src="/js/powders.js"></script>
|
||||||
<!-- <script type="text/javascript" src="/js/powders.js"></script> -->
|
|
||||||
<script type="text/javascript" src="/js/load.js"></script>
|
<script type="text/javascript" src="/js/load.js"></script>
|
||||||
<script type="text/javascript" src="/js/load_ing.js"></script>
|
<script type="text/javascript" src="/js/load_ing.js"></script>
|
||||||
<script type="text/javascript" src="/js/display_constants.js"></script>
|
<script type="text/javascript" src="/js/display_constants.js"></script>
|
||||||
|
|
166
js/atree.js
166
js/atree.js
|
@ -199,7 +199,6 @@ const atree_node = new (class extends ComputeNode {
|
||||||
const atree_render = new (class extends ComputeNode {
|
const atree_render = new (class extends ComputeNode {
|
||||||
constructor() {
|
constructor() {
|
||||||
super('builder-atree-render');
|
super('builder-atree-render');
|
||||||
this.fail_cb = true;
|
|
||||||
this.UI_elem = document.getElementById("atree-ui");
|
this.UI_elem = document.getElementById("atree-ui");
|
||||||
this.list_elem = document.getElementById("atree-header");
|
this.list_elem = document.getElementById("atree-header");
|
||||||
}
|
}
|
||||||
|
@ -310,7 +309,7 @@ function abil_can_activate(atree_node, atree_state, reachable, archetype_count,
|
||||||
}
|
}
|
||||||
let failed_deps = [];
|
let failed_deps = [];
|
||||||
for (const dep_id of ability.dependencies) {
|
for (const dep_id of ability.dependencies) {
|
||||||
if (!atree_state.get(dep_id).active) { failed_deps.push(dep_id) }
|
if (!reachable.has(dep_id)) { failed_deps.push(dep_id) }
|
||||||
}
|
}
|
||||||
if (failed_deps.length > 0) {
|
if (failed_deps.length > 0) {
|
||||||
const dep_strings = failed_deps.map(i => '"' + atree_state.get(i).ability.display_name + '"');
|
const dep_strings = failed_deps.map(i => '"' + atree_state.get(i).ability.display_name + '"');
|
||||||
|
@ -318,7 +317,7 @@ function abil_can_activate(atree_node, atree_state, reachable, archetype_count,
|
||||||
}
|
}
|
||||||
let blocking_ids = [];
|
let blocking_ids = [];
|
||||||
for (const blocker_id of ability.blockers) {
|
for (const blocker_id of ability.blockers) {
|
||||||
if (atree_state.get(blocker_id).active) { blocking_ids.push(blocker_id); }
|
if (reachable.has(blocker_id)) { blocking_ids.push(blocker_id); }
|
||||||
}
|
}
|
||||||
if (blocking_ids.length > 0) {
|
if (blocking_ids.length > 0) {
|
||||||
const blockers_strings = blocking_ids.map(i => '"' + atree_state.get(i).ability.display_name + '"');
|
const blockers_strings = blocking_ids.map(i => '"' + atree_state.get(i).ability.display_name + '"');
|
||||||
|
@ -403,6 +402,7 @@ const atree_validate = new (class extends ComputeNode {
|
||||||
reachable.add(ability.id);
|
reachable.add(ability.id);
|
||||||
}
|
}
|
||||||
if (atree_to_add.length == _add.length) {
|
if (atree_to_add.length == _add.length) {
|
||||||
|
atree_to_add = _add;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
atree_to_add = _add;
|
atree_to_add = _add;
|
||||||
|
@ -643,6 +643,9 @@ const atree_make_interactives = new (class extends ComputeNode {
|
||||||
const atree_order = input_map.get('atree-order');
|
const atree_order = input_map.get('atree-order');
|
||||||
const atree_html = input_map.get('atree-elements');
|
const atree_html = input_map.get('atree-elements');
|
||||||
|
|
||||||
|
document.getElementById("boost-sliders").innerHTML = "";
|
||||||
|
document.getElementById("boost-toggles").innerHTML = "";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* slider_info
|
* slider_info
|
||||||
* label_name: str,
|
* label_name: str,
|
||||||
|
@ -657,7 +660,7 @@ const atree_make_interactives = new (class extends ComputeNode {
|
||||||
const slider_map = new Map();
|
const slider_map = new Map();
|
||||||
const button_map = new Map();
|
const button_map = new Map();
|
||||||
|
|
||||||
// first, pull out all the sliders.
|
// first, pull out all the sliders and toggles.
|
||||||
for (const [abil_id, ability] of merged_abils.entries()) {
|
for (const [abil_id, ability] of merged_abils.entries()) {
|
||||||
for (const effect of ability.effects) {
|
for (const effect of ability.effects) {
|
||||||
if (effect['type'] === "stat_scaling" && effect['slider'] === true) {
|
if (effect['type'] === "stat_scaling" && effect['slider'] === true) {
|
||||||
|
@ -670,7 +673,7 @@ const atree_make_interactives = new (class extends ComputeNode {
|
||||||
}
|
}
|
||||||
else if (slider_behavior === 'merge') {
|
else if (slider_behavior === 'merge') {
|
||||||
slider_map.set(slider_name, {
|
slider_map.set(slider_name, {
|
||||||
label_name: slider_name,
|
label_name: slider_name+' ('+ability.display_name+')',
|
||||||
max: slider_max,
|
max: slider_max,
|
||||||
step: slider_step,
|
step: slider_step,
|
||||||
id: "ability-slider"+ability.id,
|
id: "ability-slider"+ability.id,
|
||||||
|
@ -687,15 +690,15 @@ const atree_make_interactives = new (class extends ComputeNode {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// next, render the sliders onto the abilities.
|
// next, render the sliders and toggles onto the abilities.
|
||||||
for (const [slider_name, slider_info] of slider_map.entries()) {
|
for (const [slider_name, slider_info] of slider_map.entries()) {
|
||||||
let slider_container = gen_slider_labeled(slider_info);
|
let slider_container = gen_slider_labeled(slider_info);
|
||||||
atree_html.get(slider_info.abil.id).appendChild(slider_container);
|
document.getElementById("boost-sliders").appendChild(slider_container);
|
||||||
slider_info.slider = document.getElementById(slider_info.id);
|
slider_info.slider = document.getElementById(slider_info.id);
|
||||||
slider_info.slider.addEventListener("change", (e) => atree_stats.mark_dirty().update());
|
slider_info.slider.addEventListener("change", (e) => atree_scaling.mark_dirty().update());
|
||||||
}
|
}
|
||||||
for (const [button_name, button_info] of button_map.entries()) {
|
for (const [button_name, button_info] of button_map.entries()) {
|
||||||
let button = make_elem('button', ["button-boost", "border-0", "text-white", "dark-8u", "dark-shadow-sm"], {
|
let button = make_elem('button', ["button-boost", "border-0", "text-white", "dark-8u", "dark-shadow-sm", "m-1"], {
|
||||||
id: button_info.abil.id,
|
id: button_info.abil.id,
|
||||||
textContent: button_name
|
textContent: button_name
|
||||||
});
|
});
|
||||||
|
@ -705,28 +708,28 @@ const atree_make_interactives = new (class extends ComputeNode {
|
||||||
} else {
|
} else {
|
||||||
button.classList.add("toggleOn");
|
button.classList.add("toggleOn");
|
||||||
}
|
}
|
||||||
atree_stats.mark_dirty().update()
|
atree_scaling.mark_dirty().update()
|
||||||
});
|
});
|
||||||
button_info.button = button;
|
button_info.button = button;
|
||||||
atree_html.get(button_info.abil.id).appendChild(button);
|
document.getElementById("boost-toggles").appendChild(button);
|
||||||
}
|
}
|
||||||
return [slider_map, button_map];
|
return [slider_map, button_map];
|
||||||
}
|
}
|
||||||
})().link_to(atree_node, 'atree-order').link_to(atree_merge, 'atree-merged').link_to(atree_render_active, 'atree-elements');
|
})().link_to(atree_node, 'atree-order').link_to(atree_merge, 'atree-merged').link_to(atree_render_active, 'atree-elements');
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Collect stats from ability tree.
|
* Scaling stats from ability tree.
|
||||||
* Return StatMap of added stats (incl. cost modifications as raw cost)
|
* Return StatMap of added stats,
|
||||||
*
|
*
|
||||||
* Signature: AbilityTreeStatsNode(atree-merged: MergedATree, build: Build, atree-interactive: Map<str, slider_info>) => StatMap
|
* Signature: AbilityTreeScalingNode(atree-merged: MergedATree, scale-scats: StatMap,
|
||||||
|
* atree-interactive: [Map<str, slider_info>, Map<str, button_info>]) => StatMap
|
||||||
*/
|
*/
|
||||||
const atree_stats = new (class extends ComputeNode {
|
const atree_scaling = new (class extends ComputeNode {
|
||||||
constructor() { super('atree-stats-collector'); }
|
constructor() { super('atree-scaling-collector'); }
|
||||||
|
|
||||||
compute_func(input_map) {
|
compute_func(input_map) {
|
||||||
const atree_merged = input_map.get('atree-merged');
|
const atree_merged = input_map.get('atree-merged');
|
||||||
const item_stats = input_map.get('build').statMap;
|
const pre_scale_stats = input_map.get('scale-stats');
|
||||||
const [slider_map, button_map] = input_map.get('atree-interactive');
|
const [slider_map, button_map] = input_map.get('atree-interactive');
|
||||||
|
|
||||||
let ret_effects = new Map();
|
let ret_effects = new Map();
|
||||||
|
@ -735,13 +738,37 @@ const atree_stats = new (class extends ComputeNode {
|
||||||
|
|
||||||
for (const effect of abil.effects) {
|
for (const effect of abil.effects) {
|
||||||
switch (effect.type) {
|
switch (effect.type) {
|
||||||
|
case 'raw_stat':
|
||||||
|
// TODO: toggles...
|
||||||
|
if (effect.toggle) {
|
||||||
|
const button = button_map.get(effect.toggle).button;
|
||||||
|
if (!button.classList.contains("toggleOn")) { continue; }
|
||||||
|
for (const bonus of effect.bonuses) {
|
||||||
|
const { type, name, abil = "", value } = bonus;
|
||||||
|
// TODO: prop
|
||||||
|
if (type === "stat") {
|
||||||
|
merge_stat(ret_effects, name, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
continue;
|
||||||
case 'stat_scaling':
|
case 'stat_scaling':
|
||||||
if (effect.slider) {
|
let total = 0;
|
||||||
if ('output' in effect) { // sometimes nodes will modify slider without having effect.
|
const {round = true, slider = false, scaling = [0]} = effect;
|
||||||
|
if (slider) {
|
||||||
const slider_val = slider_map.get(effect.slider_name).slider.value;
|
const slider_val = slider_map.get(effect.slider_name).slider.value;
|
||||||
const {round = true} = effect;
|
total = parseInt(slider_val) * scaling[0];
|
||||||
let total = parseInt(slider_val) * effect.scaling[0];
|
}
|
||||||
|
else {
|
||||||
|
// TODO: type: prop?
|
||||||
|
for (const [_scaling, input] of zip2(scaling, effect.inputs)) {
|
||||||
|
total += _scaling * pre_scale_stats.get(input.name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ('output' in effect) { // sometimes nodes will modify slider without having effect.
|
||||||
if (round) { total = Math.floor(round_near(total)); }
|
if (round) { total = Math.floor(round_near(total)); }
|
||||||
|
if (total < 0) { total = 0; } // Normal stat scaling will not go negative.
|
||||||
if ('max' in effect && total > effect.max) { total = effect.max; }
|
if ('max' in effect && total > effect.max) { total = effect.max; }
|
||||||
if (Array.isArray(effect.output)) {
|
if (Array.isArray(effect.output)) {
|
||||||
for (const output of effect.output) {
|
for (const output of effect.output) {
|
||||||
|
@ -756,38 +783,35 @@ const atree_stats = new (class extends ComputeNode {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else {
|
|
||||||
// TODO: type: prop?
|
|
||||||
let total = 0;
|
|
||||||
const {round = true} = effect;
|
|
||||||
for (const [scaling, input] of zip2(effect.scaling, effect.inputs)) {
|
|
||||||
total += scaling * item_stats.get(input.name);
|
|
||||||
}
|
|
||||||
if (round) { total = Math.floor(round_near(total)); }
|
|
||||||
if (total < 0) { total = 0; } // Normal stat scaling will not go negative.
|
|
||||||
if ('max' in effect && total > effect.max) { total = effect.max; }
|
|
||||||
// TODO: output (list...)
|
|
||||||
if (Array.isArray(effect.output)) {
|
|
||||||
for (const output of effect.output) {
|
|
||||||
if (output.type === 'stat') {
|
|
||||||
merge_stat(ret_effects, output.name, total);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
if (effect.output.type === 'stat') {
|
|
||||||
merge_stat(ret_effects, effect.output.name, total);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
continue;
|
continue;
|
||||||
case 'raw_stat':
|
|
||||||
// TODO: toggles...
|
|
||||||
if (effect.toggle) {
|
|
||||||
const button = button_map.get(effect.toggle).button;
|
|
||||||
if (!button.classList.contains("toggleOn")) { continue; }
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ret_effects;
|
||||||
|
}
|
||||||
|
})().link_to(atree_merge, 'atree-merged').link_to(atree_make_interactives, 'atree-interactive');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Collect stats from ability tree.
|
||||||
|
* Return StatMap of added stats.
|
||||||
|
*
|
||||||
|
* Signature: AbilityTreeStatsNode(atree-merged: MergedATree) => StatMap
|
||||||
|
*/
|
||||||
|
const atree_stats = new (class extends ComputeNode {
|
||||||
|
constructor() { super('atree-stats-collector'); }
|
||||||
|
|
||||||
|
compute_func(input_map) {
|
||||||
|
const atree_merged = input_map.get('atree-merged');
|
||||||
|
|
||||||
|
let ret_effects = new Map();
|
||||||
|
for (const [abil_id, abil] of atree_merged.entries()) {
|
||||||
|
if (abil.effects.length == 0) { continue; }
|
||||||
|
|
||||||
|
for (const effect of abil.effects) {
|
||||||
|
switch (effect.type) {
|
||||||
|
case 'raw_stat':
|
||||||
|
// toggles are handled in atree_scaling.
|
||||||
|
if (effect.toggle) { continue; }
|
||||||
for (const bonus of effect.bonuses) {
|
for (const bonus of effect.bonuses) {
|
||||||
const { type, name, abil = "", value } = bonus;
|
const { type, name, abil = "", value } = bonus;
|
||||||
// TODO: prop
|
// TODO: prop
|
||||||
|
@ -796,27 +820,12 @@ const atree_stats = new (class extends ComputeNode {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
case 'add_spell_prop':
|
|
||||||
continue;
|
|
||||||
// TODO unjankify....
|
|
||||||
// costs are converted to raw cost ID
|
|
||||||
// const { base_spell, cost = 0} = effect;
|
|
||||||
// if (cost) {
|
|
||||||
// const key = "spRaw"+base_spell;
|
|
||||||
// if (ret_effects.has(key)) { ret_effects.set(key, ret_effects.get(key) + cost); }
|
|
||||||
// else { ret_effects.set(key, cost); }
|
|
||||||
// }
|
|
||||||
// continue;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (ret_effects.has('baseResist')) {
|
|
||||||
merge_stat(ret_effects, "defMult", 1 - (ret_effects.get('baseResist') / 100));
|
|
||||||
}
|
|
||||||
return ret_effects;
|
return ret_effects;
|
||||||
}
|
}
|
||||||
})().link_to(atree_merge, 'atree-merged').link_to(atree_make_interactives, 'atree-interactive');
|
})().link_to(atree_merge, 'atree-merged');
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Construct compute nodes to link builder items and edit IDs to the appropriate display outputs.
|
* Construct compute nodes to link builder items and edit IDs to the appropriate display outputs.
|
||||||
|
@ -839,16 +848,15 @@ class AbilityTreeEnsureNodesNode extends ComputeNode {
|
||||||
this.build_node = build_node;
|
this.build_node = build_node;
|
||||||
this.stat_agg_node = stat_agg_node;
|
this.stat_agg_node = stat_agg_node;
|
||||||
// Slight amount of wasted compute to keep internal state non-changing.
|
// Slight amount of wasted compute to keep internal state non-changing.
|
||||||
this.passthrough = new PassThroughNode('atree-make-nodes_internal').link_to(this.build_node, 'build').link_to(this.stat_agg_node, 'stats');
|
this.passthrough = new PassThroughNode('spell-calc-buffer').link_to(this.build_node, 'build').link_to(this.stat_agg_node, 'stats');
|
||||||
this.spelldmg_nodes = []; // debugging use
|
this.spelldmg_nodes = []; // debugging use
|
||||||
this.spell_display_elem = document.getElementById("all-spells-display");
|
this.spell_display_elem = document.getElementById("all-spells-display");
|
||||||
}
|
}
|
||||||
|
|
||||||
compute_func(input_map) {
|
compute_func(input_map) {
|
||||||
console.log('atree make nodes');
|
|
||||||
this.passthrough.remove_link(this.build_node);
|
this.passthrough.remove_link(this.build_node);
|
||||||
this.passthrough.remove_link(this.stat_agg_node);
|
this.passthrough.remove_link(this.stat_agg_node);
|
||||||
this.passthrough = new PassThroughNode('atree-make-nodes_internal').link_to(this.build_node, 'build').link_to(this.stat_agg_node, 'stats');
|
this.passthrough = new PassThroughNode('spell-calc-buffer').link_to(this.build_node, 'build').link_to(this.stat_agg_node, 'stats');
|
||||||
this.spell_display_elem.textContent = "";
|
this.spell_display_elem.textContent = "";
|
||||||
const build_node = this.passthrough.get_node('build'); // aaaaaaaaa performance... savings... help....
|
const build_node = this.passthrough.get_node('build'); // aaaaaaaaa performance... savings... help....
|
||||||
const stat_agg_node = this.passthrough.get_node('stats');
|
const stat_agg_node = this.passthrough.get_node('stats');
|
||||||
|
@ -1143,6 +1151,7 @@ function generateTooltip(UI_elem, node_elem, ability, atree_map) {
|
||||||
let apUsed = 0;
|
let apUsed = 0;
|
||||||
let maxAP = parseInt(document.getElementById("active_AP_cap").innerHTML);
|
let maxAP = parseInt(document.getElementById("active_AP_cap").innerHTML);
|
||||||
let archChosen = 0;
|
let archChosen = 0;
|
||||||
|
let satisfiedDependencies = [];
|
||||||
let blockedBy = [];
|
let blockedBy = [];
|
||||||
for (let [id, node_wrap] of atree_map.entries()) {
|
for (let [id, node_wrap] of atree_map.entries()) {
|
||||||
if (!node_wrap.active || id == ability.id) {
|
if (!node_wrap.active || id == ability.id) {
|
||||||
|
@ -1152,6 +1161,9 @@ function generateTooltip(UI_elem, node_elem, ability, atree_map) {
|
||||||
if (node_wrap.ability.archetype == ability.archetype) {
|
if (node_wrap.ability.archetype == ability.archetype) {
|
||||||
archChosen++;
|
archChosen++;
|
||||||
}
|
}
|
||||||
|
if (ability.dependencies.includes(id)) {
|
||||||
|
satisfiedDependencies.push(id);
|
||||||
|
}
|
||||||
if (ability.blockers.includes(id)) {
|
if (ability.blockers.includes(id)) {
|
||||||
blockedBy.push(node_wrap.ability.display_name);
|
blockedBy.push(node_wrap.ability.display_name);
|
||||||
}
|
}
|
||||||
|
@ -1182,6 +1194,18 @@ function generateTooltip(UI_elem, node_elem, ability, atree_map) {
|
||||||
container.appendChild(archReq);
|
container.appendChild(archReq);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// dependencies
|
||||||
|
for (let i = 0; i < ability.dependencies.length; i++) {
|
||||||
|
let dependency = make_elem("p", ["scaled-font-sm", "my-0", "mx-1"], {});
|
||||||
|
if (satisfiedDependencies.includes(ability.dependencies[i])) {
|
||||||
|
dependency.innerHTML = reqYes;
|
||||||
|
} else {
|
||||||
|
dependency.innerHTML = reqNo;
|
||||||
|
}
|
||||||
|
dependency.innerHTML += " <span class = 'mc-gray'>Required Ability:</span> " + atree_map.get(ability.dependencies[i]).ability.display_name;
|
||||||
|
container.appendChild(dependency);
|
||||||
|
}
|
||||||
|
|
||||||
// blockers
|
// blockers
|
||||||
for (let i = 0; i < blockedBy.length; i++) {
|
for (let i = 0; i < blockedBy.length; i++) {
|
||||||
let blocker = make_elem("p", ["scaled-font-sm", "my-0", "mx-1"], {});
|
let blocker = make_elem("p", ["scaled-font-sm", "my-0", "mx-1"], {});
|
||||||
|
|
File diff suppressed because it is too large
Load diff
File diff suppressed because one or more lines are too long
|
@ -431,6 +431,7 @@ class PlayerClassNode extends ValueCheckComputeNode {
|
||||||
compute_func(input_map) {
|
compute_func(input_map) {
|
||||||
if (input_map.size !== 1) { throw "PlayerClassNode accepts exactly one input (build)"; }
|
if (input_map.size !== 1) { throw "PlayerClassNode accepts exactly one input (build)"; }
|
||||||
const [build] = input_map.values(); // Extract values, pattern match it into size one list and bind to first element
|
const [build] = input_map.values(); // Extract values, pattern match it into size one list and bind to first element
|
||||||
|
if (build.weapon.statMap.has('NONE')) { return null; }
|
||||||
return wep_to_class.get(build.weapon.statMap.get('type'));
|
return wep_to_class.get(build.weapon.statMap.get('type'));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -622,7 +623,7 @@ class SpellDamageCalcNode extends ComputeNode {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
spell_result.heal_amount += subpart.heal_amount;
|
spell_result.heal_amount += subpart.heal_amount * hits;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
spell_result.name = part.name;
|
spell_result.name = part.name;
|
||||||
|
@ -796,7 +797,7 @@ class DisplayBuildWarningsNode extends ComputeNode {
|
||||||
* Signature: AggregateStatsNode(*args) => StatMap
|
* Signature: AggregateStatsNode(*args) => StatMap
|
||||||
*/
|
*/
|
||||||
class AggregateStatsNode extends ComputeNode {
|
class AggregateStatsNode extends ComputeNode {
|
||||||
constructor() { super("builder-aggregate-stats"); }
|
constructor(name) { super(name); }
|
||||||
|
|
||||||
compute_func(input_map) {
|
compute_func(input_map) {
|
||||||
const output_stats = new Map();
|
const output_stats = new Map();
|
||||||
|
@ -999,7 +1000,8 @@ function builder_graph_init() {
|
||||||
// Phase 2/3: Set up editable IDs, skill points; use decodeBuild() skill points, calculate damage
|
// Phase 2/3: Set up editable IDs, skill points; use decodeBuild() skill points, calculate damage
|
||||||
|
|
||||||
// Create one node that will be the "aggregator node" (listen to all the editable id nodes, as well as the build_node (for non editable stats) and collect them into one statmap)
|
// Create one node that will be the "aggregator node" (listen to all the editable id nodes, as well as the build_node (for non editable stats) and collect them into one statmap)
|
||||||
stat_agg_node = new AggregateStatsNode();
|
pre_scale_agg_node = new AggregateStatsNode('pre-scale-stats');
|
||||||
|
stat_agg_node = new AggregateStatsNode('final-stats');
|
||||||
edit_agg_node = new AggregateEditableIDNode();
|
edit_agg_node = new AggregateEditableIDNode();
|
||||||
edit_agg_node.link_to(build_node, 'build');
|
edit_agg_node.link_to(build_node, 'build');
|
||||||
for (const field of editable_item_fields) {
|
for (const field of editable_item_fields) {
|
||||||
|
@ -1023,7 +1025,7 @@ function builder_graph_init() {
|
||||||
edit_input_nodes.push(node);
|
edit_input_nodes.push(node);
|
||||||
skp_inputs.push(node);
|
skp_inputs.push(node);
|
||||||
}
|
}
|
||||||
stat_agg_node.link_to(edit_agg_node);
|
pre_scale_agg_node.link_to(edit_agg_node);
|
||||||
|
|
||||||
// Phase 3/3: Set up atree stuff.
|
// Phase 3/3: Set up atree stuff.
|
||||||
|
|
||||||
|
@ -1031,8 +1033,10 @@ function builder_graph_init() {
|
||||||
// These two are defined in `atree.js`
|
// These two are defined in `atree.js`
|
||||||
atree_node.link_to(class_node, 'player-class');
|
atree_node.link_to(class_node, 'player-class');
|
||||||
atree_merge.link_to(class_node, 'player-class');
|
atree_merge.link_to(class_node, 'player-class');
|
||||||
atree_stats.link_to(build_node, 'build');
|
pre_scale_agg_node.link_to(atree_stats, 'atree-raw-stats');
|
||||||
stat_agg_node.link_to(atree_stats, 'atree-stats');
|
atree_scaling.link_to(pre_scale_agg_node, 'scale-stats');
|
||||||
|
stat_agg_node.link_to(pre_scale_agg_node, 'pre-scaling');
|
||||||
|
stat_agg_node.link_to(atree_scaling, 'atree-scaling');
|
||||||
|
|
||||||
build_encode_node.link_to(atree_node, 'atree').link_to(atree_state_node, 'atree-state');
|
build_encode_node.link_to(atree_node, 'atree').link_to(atree_state_node, 'atree-state');
|
||||||
|
|
||||||
|
@ -1064,7 +1068,7 @@ function builder_graph_init() {
|
||||||
let powder_special_calc = new PowderSpecialCalcNode().link_to(powder_special_input, 'powder-specials');
|
let powder_special_calc = new PowderSpecialCalcNode().link_to(powder_special_input, 'powder-specials');
|
||||||
new PowderSpecialDisplayNode().link_to(powder_special_input, 'powder-specials')
|
new PowderSpecialDisplayNode().link_to(powder_special_input, 'powder-specials')
|
||||||
.link_to(stat_agg_node, 'stats').link_to(build_node, 'build');
|
.link_to(stat_agg_node, 'stats').link_to(build_node, 'build');
|
||||||
stat_agg_node.link_to(powder_special_calc, 'powder-boost');
|
pre_scale_agg_node.link_to(powder_special_calc, 'powder-boost');
|
||||||
stat_agg_node.link_to(armor_powder_node, 'armor-powder');
|
stat_agg_node.link_to(armor_powder_node, 'armor-powder');
|
||||||
powder_special_input.update();
|
powder_special_input.update();
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
let all_nodes = [];
|
let all_nodes = new Set();
|
||||||
let node_debug_stack = [];
|
let node_debug_stack = [];
|
||||||
|
let COMPUTE_GRAPH_DEBUG = false;
|
||||||
class ComputeNode {
|
class ComputeNode {
|
||||||
/**
|
/**
|
||||||
* Make a generic compute node.
|
* Make a generic compute node.
|
||||||
|
@ -21,7 +22,7 @@ class ComputeNode {
|
||||||
// 0: clean
|
// 0: clean
|
||||||
this.inputs_dirty = new Map();
|
this.inputs_dirty = new Map();
|
||||||
this.inputs_dirty_count = 0;
|
this.inputs_dirty_count = 0;
|
||||||
all_nodes.push(this);
|
if (COMPUTE_GRAPH_DEBUG) { all_nodes.add(this); }
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -34,7 +35,7 @@ class ComputeNode {
|
||||||
if (this.dirty === 0) {
|
if (this.dirty === 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
node_debug_stack.push(this.name);
|
if (COMPUTE_GRAPH_DEBUG) { node_debug_stack.push(this.name); }
|
||||||
if (this.dirty == 2) {
|
if (this.dirty == 2) {
|
||||||
let calc_inputs = new Map();
|
let calc_inputs = new Map();
|
||||||
for (const input of this.inputs) {
|
for (const input of this.inputs) {
|
||||||
|
@ -46,7 +47,7 @@ class ComputeNode {
|
||||||
for (const child of this.children) {
|
for (const child of this.children) {
|
||||||
child.mark_input_clean(this.name, this.value);
|
child.mark_input_clean(this.name, this.value);
|
||||||
}
|
}
|
||||||
node_debug_stack.pop();
|
if (COMPUTE_GRAPH_DEBUG) { node_debug_stack.pop(); }
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -134,7 +135,7 @@ class ComputeNode {
|
||||||
}
|
}
|
||||||
|
|
||||||
class ValueCheckComputeNode extends ComputeNode {
|
class ValueCheckComputeNode extends ComputeNode {
|
||||||
constructor(name) { super(name); }
|
constructor(name) { super(name); this.valid_val = null; }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Request update of this compute node. Pushes updates to children,
|
* Request update of this compute node. Pushes updates to children,
|
||||||
|
@ -153,14 +154,11 @@ class ValueCheckComputeNode extends ComputeNode {
|
||||||
calc_inputs.set(this.input_translation.get(input.name), input.value);
|
calc_inputs.set(this.input_translation.get(input.name), input.value);
|
||||||
}
|
}
|
||||||
let val = this.compute_func(calc_inputs);
|
let val = this.compute_func(calc_inputs);
|
||||||
if (val !== this.value) {
|
if (val !== null) {
|
||||||
super.mark_dirty(2);
|
if (val !== this.valid_val) { super.mark_dirty(2); } // don't mark dirty if NULL (no update)
|
||||||
}
|
this.valid_val = val;
|
||||||
else {
|
|
||||||
console.log("soft update");
|
|
||||||
}
|
}
|
||||||
this.value = val;
|
this.value = val;
|
||||||
|
|
||||||
this.dirty = 0;
|
this.dirty = 0;
|
||||||
for (const child of this.children) {
|
for (const child of this.children) {
|
||||||
child.mark_input_clean(this.name, this.value);
|
child.mark_input_clean(this.name, this.value);
|
||||||
|
@ -190,7 +188,7 @@ function calcSchedule(node, timeout) {
|
||||||
}
|
}
|
||||||
node.mark_dirty();
|
node.mark_dirty();
|
||||||
node.update_task = setTimeout(function() {
|
node.update_task = setTimeout(function() {
|
||||||
node_debug_stack = [];
|
if (COMPUTE_GRAPH_DEBUG) { node_debug_stack = []; }
|
||||||
node.update();
|
node.update();
|
||||||
node.update_task = null;
|
node.update_task = null;
|
||||||
}, timeout);
|
}, timeout);
|
||||||
|
|
|
@ -65,7 +65,7 @@ function encodeCustom(custom, verbose) {
|
||||||
if (typeof (val) === "string" && val !== "") {
|
if (typeof (val) === "string" && val !== "") {
|
||||||
if ((damages.includes(id) && val === "0-0") || (!verbose && ["lore", "majorIds", "quest", "materials", "drop", "set"].includes(id))) { continue; }
|
if ((damages.includes(id) && val === "0-0") || (!verbose && ["lore", "majorIds", "quest", "materials", "drop", "set"].includes(id))) { continue; }
|
||||||
if (id === "type") {
|
if (id === "type") {
|
||||||
hash += Base64.fromIntN(i, 2) + Base64.fromIntN(types.indexOf(val.substring(0, 1).toUpperCase() + val.slice(1)), 1);
|
hash += Base64.fromIntN(i, 2) + Base64.fromIntN(all_types.indexOf(val.substring(0, 1).toUpperCase() + val.slice(1)), 1);
|
||||||
} else if (id === "tier") {
|
} else if (id === "tier") {
|
||||||
hash += Base64.fromIntN(i, 2) + Base64.fromIntN(tiers.indexOf(val), 1);
|
hash += Base64.fromIntN(i, 2) + Base64.fromIntN(tiers.indexOf(val), 1);
|
||||||
} else if (id === "atkSpd") {
|
} else if (id === "atkSpd") {
|
||||||
|
@ -147,7 +147,7 @@ function getCustomFromHash(hash) {
|
||||||
val = tiers[Base64.toInt(tag.charAt(2))];
|
val = tiers[Base64.toInt(tag.charAt(2))];
|
||||||
len = -1;
|
len = -1;
|
||||||
} else if (id === "type") {
|
} else if (id === "type") {
|
||||||
val = types[Base64.toInt(tag.charAt(2))];
|
val = all_types[Base64.toInt(tag.charAt(2))];
|
||||||
len = -1;
|
len = -1;
|
||||||
} else if (id === "atkSpd") {
|
} else if (id === "atkSpd") {
|
||||||
val = attackSpeeds[Base64.toInt(tag.charAt(2))];
|
val = attackSpeeds[Base64.toInt(tag.charAt(2))];
|
||||||
|
@ -179,7 +179,8 @@ function getCustomFromHash(hash) {
|
||||||
return new Custom(statMap);
|
return new Custom(statMap);
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
//console.log(statMap);
|
console.log(error);
|
||||||
|
console.log(statMap);
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -35,6 +35,22 @@ d3.select("#graph_body")
|
||||||
.classed("svg-content-responsive", true);
|
.classed("svg-content-responsive", true);
|
||||||
let graph = d3.select("svg");
|
let graph = d3.select("svg");
|
||||||
let svg = graph.append('g');
|
let svg = graph.append('g');
|
||||||
|
|
||||||
|
// triangle arrow head definition
|
||||||
|
graph.append('defs').append('marker')
|
||||||
|
.attr('id', 'arrowhead')
|
||||||
|
.attr('viewBox', '-0 -5 10 10')
|
||||||
|
.attr('refX', 23)
|
||||||
|
.attr('refY', 0)
|
||||||
|
.attr('orient', 'auto')
|
||||||
|
.attr('markerWidth', 13)
|
||||||
|
.attr('markerHeight', 13)
|
||||||
|
.attr('xoverflow', 'visible')
|
||||||
|
.append('svg:path')
|
||||||
|
.attr('d', 'M 0,-5 L 10 ,0 L 0,5')
|
||||||
|
.attr('fill', '#aaa')
|
||||||
|
.style('stroke','none');
|
||||||
|
|
||||||
let margin = {top: 20, right: 20, bottom: 35, left: 40};
|
let margin = {top: 20, right: 20, bottom: 35, left: 40};
|
||||||
|
|
||||||
function bbox() {
|
function bbox() {
|
||||||
|
@ -87,6 +103,7 @@ function create_svg(data, redraw_func) {
|
||||||
.enter()
|
.enter()
|
||||||
.append("line")
|
.append("line")
|
||||||
.style("stroke", "#aaa")
|
.style("stroke", "#aaa")
|
||||||
|
.attr('marker-end','url(#arrowhead)');
|
||||||
|
|
||||||
// Initialize the nodes
|
// Initialize the nodes
|
||||||
let node = svg
|
let node = svg
|
||||||
|
@ -197,7 +214,7 @@ d3.select(window)
|
||||||
});
|
});
|
||||||
redraw();
|
redraw();
|
||||||
|
|
||||||
const data = convert_data(all_nodes);
|
const data = convert_data(Array.from(all_nodes));
|
||||||
create_svg(data, redraw);
|
create_svg(data, redraw);
|
||||||
|
|
||||||
console.log("render");
|
console.log("render");
|
||||||
|
|
|
@ -866,7 +866,7 @@ function displayNextCosts(_stats, spell, spellIdx) {
|
||||||
let int_needed = document.createElement("b");
|
let int_needed = document.createElement("b");
|
||||||
if (init_cost.textContent === "1") {
|
if (init_cost.textContent === "1") {
|
||||||
int_needed.textContent = ": n/a (+0)";
|
int_needed.textContent = ": n/a (+0)";
|
||||||
}else { //do math
|
} else { //do math
|
||||||
let target = getSpellCost(stats, spellIdx, spell.cost) - 1;
|
let target = getSpellCost(stats, spellIdx, spell.cost) - 1;
|
||||||
let needed = intel;
|
let needed = intel;
|
||||||
let noUpdate = false;
|
let noUpdate = false;
|
||||||
|
@ -1386,21 +1386,21 @@ function getSpellCost(stats, spell) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function getBaseSpellCost(stats, spell) {
|
function getBaseSpellCost(stats, spell) {
|
||||||
// old intelligence:
|
let cost = spell.cost * (1 - skillPointsToPercentage(stats.get('int')) * skillpoint_final_mult[2]);
|
||||||
let cost = Math.ceil(spell.cost * (1 - skillPointsToPercentage(stats.get('int')) * skillpoint_final_mult[2]));
|
|
||||||
cost += stats.get("spRaw"+spell.base_spell);
|
cost += stats.get("spRaw"+spell.base_spell);
|
||||||
return Math.floor(cost * (1 + stats.get("spPct"+spell.base_spell) / 100));
|
return cost * (1 + stats.get("spPct"+spell.base_spell) / 100);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function displaySpellDamage(parent_elem, overallparent_elem, stats, spell, spellIdx, spell_results) {
|
function displaySpellDamage(parent_elem, _overallparent_elem, stats, spell, spellIdx, spell_results) {
|
||||||
// TODO: remove spellIdx (just used to flag melee and cost)
|
// TODO: remove spellIdx (just used to flag melee and cost)
|
||||||
// TODO: move cost calc out
|
// TODO: move cost calc out
|
||||||
parent_elem.textContent = "";
|
parent_elem.textContent = "";
|
||||||
|
|
||||||
let title_elem = make_elem("p");
|
let title_elem = make_elem("p");
|
||||||
|
|
||||||
overallparent_elem.textContent = "";
|
_overallparent_elem.textContent = "";
|
||||||
|
const overallparent_elem = make_elem("div", ['col'])
|
||||||
let title_elemavg = document.createElement("b");
|
let title_elemavg = document.createElement("b");
|
||||||
|
|
||||||
if ('cost' in spell) {
|
if ('cost' in spell) {
|
||||||
|
@ -1408,7 +1408,7 @@ function displaySpellDamage(parent_elem, overallparent_elem, stats, spell, spell
|
||||||
title_elem.appendChild(first.cloneNode(true)); //cloneNode is needed here.
|
title_elem.appendChild(first.cloneNode(true)); //cloneNode is needed here.
|
||||||
title_elemavg.appendChild(first);
|
title_elemavg.appendChild(first);
|
||||||
|
|
||||||
let second = make_elem("span", ["Mana"], { textContent: getSpellCost(stats, spell) });
|
let second = make_elem("span", ["Mana"], { textContent: getSpellCost(stats, spell).toFixed(2) });
|
||||||
title_elem.appendChild(second.cloneNode(true));
|
title_elem.appendChild(second.cloneNode(true));
|
||||||
title_elemavg.appendChild(second);
|
title_elemavg.appendChild(second);
|
||||||
|
|
||||||
|
@ -1425,7 +1425,6 @@ function displaySpellDamage(parent_elem, overallparent_elem, stats, spell, spell
|
||||||
overallparent_elem.append(title_elemavg);
|
overallparent_elem.append(title_elemavg);
|
||||||
|
|
||||||
// if ('cost' in spell) {
|
// if ('cost' in spell) {
|
||||||
// :( ...... ?
|
|
||||||
// overallparent_elem.append(displayNextCosts(stats, spell, spellIdx));
|
// overallparent_elem.append(displayNextCosts(stats, spell, spellIdx));
|
||||||
// }
|
// }
|
||||||
|
|
||||||
|
@ -1468,7 +1467,6 @@ function displaySpellDamage(parent_elem, overallparent_elem, stats, spell, spell
|
||||||
if (spellIdx === 0) {
|
if (spellIdx === 0) {
|
||||||
let display_attack_speeds = ["Super Slow", "Very Slow", "Slow", "Normal", "Fast", "Very Fast", "Super Fast"];
|
let display_attack_speeds = ["Super Slow", "Very Slow", "Slow", "Normal", "Fast", "Very Fast", "Super Fast"];
|
||||||
let adjAtkSpd = attackSpeeds.indexOf(stats.get("atkSpd")) + stats.get("atkTier");
|
let adjAtkSpd = attackSpeeds.indexOf(stats.get("atkSpd")) + stats.get("atkTier");
|
||||||
console.log(stats);
|
|
||||||
if(adjAtkSpd > 6) {
|
if(adjAtkSpd > 6) {
|
||||||
adjAtkSpd = 6;
|
adjAtkSpd = 6;
|
||||||
} else if(adjAtkSpd < 0) {
|
} else if(adjAtkSpd < 0) {
|
||||||
|
@ -1512,6 +1510,7 @@ function displaySpellDamage(parent_elem, overallparent_elem, stats, spell, spell
|
||||||
}
|
}
|
||||||
|
|
||||||
addClickableArrow(overallparent_elem, parent_elem);
|
addClickableArrow(overallparent_elem, parent_elem);
|
||||||
|
_overallparent_elem.append(overallparent_elem);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Displays the ID costs of an item
|
/** Displays the ID costs of an item
|
||||||
|
|
|
@ -20,8 +20,8 @@ function init_itempage() {
|
||||||
//displayExpandedItem(expandItem(itemMap.get(item_url_tag).statMap, []), "item-view");
|
//displayExpandedItem(expandItem(itemMap.get(item_url_tag).statMap, []), "item-view");
|
||||||
try{
|
try{
|
||||||
item = expandItem(itemMap.get(item_url_tag.replaceAll("%20"," ")), []);
|
item = expandItem(itemMap.get(item_url_tag.replaceAll("%20"," ")), []);
|
||||||
if (item.get('category') === 'weapon') {
|
|
||||||
item.set('powders', []);
|
item.set('powders', []);
|
||||||
|
if (item.get('category') === 'weapon') {
|
||||||
apply_weapon_powders(item);
|
apply_weapon_powders(item);
|
||||||
}
|
}
|
||||||
displayExpandedItem(item, "item-view");
|
displayExpandedItem(item, "item-view");
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
const DB_VERSION = 99;
|
const DB_VERSION = 101;
|
||||||
// @See https://github.com/mdn/learning-area/blob/master/javascript/apis/client-side-storage/indexeddb/video-store/index.jsA
|
// @See https://github.com/mdn/learning-area/blob/master/javascript/apis/client-side-storage/indexeddb/video-store/index.jsA
|
||||||
|
|
||||||
let db;
|
let db;
|
||||||
|
|
|
@ -830,12 +830,11 @@ function deepcopy(obj, refs=undefined) {
|
||||||
*/
|
*/
|
||||||
function gen_slider_labeled({label_name, label_classlist = [], min = 0, max = 100, step = 1, default_val = min, id = undefined, color = "#FFFFFF", classlist = []}) {
|
function gen_slider_labeled({label_name, label_classlist = [], min = 0, max = 100, step = 1, default_val = min, id = undefined, color = "#FFFFFF", classlist = []}) {
|
||||||
let slider_container = document.createElement("div");
|
let slider_container = document.createElement("div");
|
||||||
|
slider_container.classList.add("col");
|
||||||
|
|
||||||
let buf_col = document.createElement("div");
|
let buf_col = document.createElement("div");
|
||||||
buf_col.classList.add("col");
|
|
||||||
|
|
||||||
let label = document.createElement("div");
|
let label = document.createElement("div");
|
||||||
label.classList.add("col");
|
|
||||||
label.classList.add(...label_classlist);
|
label.classList.add(...label_classlist);
|
||||||
label.textContent = label_name + ": " + default_val;
|
label.textContent = label_name + ": " + default_val;
|
||||||
|
|
||||||
|
|
|
@ -83,6 +83,18 @@ for item in old_items:
|
||||||
#print(f'Unknown old item: {item["name"]}!!!')
|
#print(f'Unknown old item: {item["name"]}!!!')
|
||||||
#old_items_map[item["name"]] = item
|
#old_items_map[item["name"]] = item
|
||||||
|
|
||||||
|
for set_name, set_info in old_data['sets'].items():
|
||||||
|
for bonus in set_info['bonuses']:
|
||||||
|
for k, v in mul_keys.items():
|
||||||
|
if k in bonus:
|
||||||
|
# SUPER JANKY ROUNDING
|
||||||
|
tentimes = round(bonus[k] * v)
|
||||||
|
rem = tentimes % 10
|
||||||
|
val = math.floor(round_near(tentimes / 10))
|
||||||
|
if rem >= 5:
|
||||||
|
val += 1
|
||||||
|
bonus[k] = val
|
||||||
|
|
||||||
for item in items:
|
for item in items:
|
||||||
for key in delete_keys:
|
for key in delete_keys:
|
||||||
if key in item:
|
if key in item:
|
||||||
|
|
Loading…
Reference in a new issue