From 9118225319816588e948e53e0e872e90b0b9d274 Mon Sep 17 00:00:00 2001 From: fin444 Date: Mon, 11 Jul 2022 20:17:00 -0700 Subject: [PATCH 1/7] backup of current work --- css/sq2bs.css | 4 -- js/atree.js | 52 +++++++++++-------------- media/atree/connect_angle.png | Bin 1079 -> 177 bytes media/atree/connect_c.png | Bin 1316 -> 221 bytes media/atree/connect_line.png | Bin 1270 -> 182 bytes media/atree/connect_t.png | Bin 962 -> 205 bytes media/atree/highlight_angle.png | Bin 1042 -> 5439 bytes media/atree/highlight_c.png | Bin 1027 -> 5873 bytes media/atree/highlight_c_2_a.png | Bin 1099 -> 5779 bytes media/atree/highlight_c_2_l.png | Bin 1107 -> 5785 bytes media/atree/highlight_c_3.png | Bin 1090 -> 5819 bytes media/atree/highlight_line.png | Bin 974 -> 5554 bytes media/atree/highlight_t_2_a.png | Bin 708 -> 5635 bytes media/atree/highlight_t_2_l.png | Bin 666 -> 5709 bytes media/atree/highlight_t_3.png | Bin 654 -> 5742 bytes media/atree/node_0.png | Bin 5644 -> 5438 bytes media/atree/node_0_blocked.png | Bin 5163 -> 231 bytes media/atree/node_0_selected.png | Bin 0 -> 266 bytes media/atree/node_1.png | Bin 5384 -> 5835 bytes media/atree/node_1_blocked.png | Bin 5066 -> 254 bytes media/atree/node_1_selected.png | Bin 0 -> 313 bytes media/atree/node_2.png | Bin 5421 -> 6035 bytes media/atree/node_2_blocked.png | Bin 5111 -> 276 bytes media/atree/node_2_selected.png | Bin 0 -> 328 bytes media/atree/node_3.png | Bin 5218 -> 6284 bytes media/atree/node_3_blocked.png | Bin 4913 -> 309 bytes media/atree/node_3_selected.png | Bin 0 -> 385 bytes media/atree/node_archer.png | Bin 0 -> 5955 bytes media/atree/node_archer_blocked.png | Bin 0 -> 267 bytes media/atree/node_archer_selected.png | Bin 0 -> 297 bytes media/atree/node_assassin.png | Bin 0 -> 5845 bytes media/atree/node_assassin_blocked.png | Bin 0 -> 260 bytes media/atree/node_assassin_selected.png | Bin 0 -> 291 bytes media/atree/node_mage.png | Bin 0 -> 5836 bytes media/atree/node_mage_blocked.png | Bin 0 -> 263 bytes media/atree/node_mage_selected.png | Bin 0 -> 295 bytes media/atree/node_shaman.png | Bin 0 -> 5932 bytes media/atree/node_shaman_blocked.png | Bin 0 -> 264 bytes media/atree/node_shaman_selected.png | Bin 0 -> 297 bytes media/atree/node_warrior.png | Bin 0 -> 5801 bytes media/atree/node_warrior_blocked.png | Bin 0 -> 261 bytes media/atree/node_warrior_selected.png | Bin 0 -> 294 bytes 42 files changed, 22 insertions(+), 34 deletions(-) create mode 100644 media/atree/node_0_selected.png create mode 100644 media/atree/node_1_selected.png create mode 100644 media/atree/node_2_selected.png create mode 100644 media/atree/node_3_selected.png create mode 100644 media/atree/node_archer.png create mode 100644 media/atree/node_archer_blocked.png create mode 100644 media/atree/node_archer_selected.png create mode 100644 media/atree/node_assassin.png create mode 100644 media/atree/node_assassin_blocked.png create mode 100644 media/atree/node_assassin_selected.png create mode 100644 media/atree/node_mage.png create mode 100644 media/atree/node_mage_blocked.png create mode 100644 media/atree/node_mage_selected.png create mode 100644 media/atree/node_shaman.png create mode 100644 media/atree/node_shaman_blocked.png create mode 100644 media/atree/node_shaman_selected.png create mode 100644 media/atree/node_warrior.png create mode 100644 media/atree/node_warrior_blocked.png create mode 100644 media/atree/node_warrior_selected.png diff --git a/css/sq2bs.css b/css/sq2bs.css index c574126..7845a26 100644 --- a/css/sq2bs.css +++ b/css/sq2bs.css @@ -489,10 +489,6 @@ a:hover { display: none; /* Safari and Chrome */ } -.atree-selected { - outline: 5px solid rgba(95, 214, 223, 0.8); -} - .atree-circle { border-radius:50%; -moz-border-radius:50%; diff --git a/js/atree.js b/js/atree.js index d3d5456..c74f02e 100644 --- a/js/atree.js +++ b/js/atree.js @@ -735,6 +735,7 @@ function render_AT(UI_elem, list_elem, tree) { for (let k = 0; k < 9; k++) { col = document.createElement('div'); col.classList.add('col', 'px-0'); + col.style = "position: relative; aspect-ratio: 1/1;" row.appendChild(col); } UI_elem.appendChild(row); @@ -752,7 +753,7 @@ function render_AT(UI_elem, list_elem, tree) { const parent_id = parent_abil.id; let connect_elem = document.createElement("div"); - connect_elem.style = "background-size: cover; width: 100%; height: 100%;"; + connect_elem.style = "background-size: cover; width: 200%; height: 200%; position: absolute; top: -50%; left: -50%; image-rendering: pixelated;"; // connect up for (let i = ability.display.row - 1; i > parent_abil.display.row; i--) { const coord = i + "," + ability.display.col; @@ -791,29 +792,20 @@ function render_AT(UI_elem, list_elem, tree) { let icon = ability.display.icon; if (icon === undefined) { icon = "node"; + } else if (icon == "node_4") { + icon = "node_warrior" // temp fix } let node_img = document.createElement('img'); node_img.src = '../media/atree/'+icon+'.png'; - node_img.style = "width: 100%; height: 100%;"; + node_img.style = "width: 200%; height: 200%; position: absolute; top: -50%; left: -50%; image-rendering: pixelated; z-index: 1;"; node_elem.appendChild(node_img); node_elem.classList.add("atree-circle"); - // add tooltip - node_elem.addEventListener('mouseover', function(e) { - if (e.target !== this) {return;} - let tooltip = this.children[0]; - tooltip.style.top = this.getBoundingClientRect().bottom + window.scrollY * 1.02 + "px"; - tooltip.style.left = this.parentElement.parentElement.getBoundingClientRect().left + (elem.getBoundingClientRect().width * .2 / 2) + "px"; - tooltip.style.display = "block"; - }); - - node_elem.addEventListener('mouseout', function(e) { - if (e.target !== this) {return;} - let tooltip = this.children[0]; - tooltip.style.display = "none"; - }); - - node_elem.classList.add("fake-button"); + // create hitbox + // this is necessary since images exceed the size of their square, but should only be interactible within that square + let hitbox = document.createElement("div"); + hitbox.style = "position: absolute; cursor: pointer; left: 0; top: 0; width: 100%; height: 100%; z-index: 2;" + node_elem.appendChild(hitbox); let node_tooltip = document.createElement('div'); node_tooltip.classList.add("rounded-bottom", "dark-4", "border", "p-0", "mx-2", "my-4", "dark-shadow"); @@ -852,7 +844,7 @@ function render_AT(UI_elem, list_elem, tree) { node_wrap.elem = node_elem; node_wrap.all_connectors_ref = atree_connectors_map; - node_elem.addEventListener('click', function(e) { + hitbox.addEventListener('click', function(e) { if (e.target !== this && e.target!== this.children[0]) {return;} atree_set_state(node_wrap, !node_wrap.active); atree_state_node.mark_dirty().update(); @@ -860,18 +852,18 @@ function render_AT(UI_elem, list_elem, tree) { // add tooltip - node_elem.addEventListener('mouseover', function(e) { - if (e.target !== this && e.target!== this.children[0]) {return;} - let tooltip = this.children[this.children.length - 1]; - tooltip.style.top = this.getBoundingClientRect().bottom + window.scrollY * 1.02 + "px"; - tooltip.style.left = this.parentElement.parentElement.getBoundingClientRect().left + (elem.getBoundingClientRect().width * .2 / 2) + "px"; - tooltip.style.maxWidth = UI_elem.getBoundingClientRect().width * .95 + "px"; + hitbox.addEventListener('mouseover', function(e) { + if (e.target !== this && e.target!== this.parentElement.children[0]) {return;} + let tooltip = this.parentElement.children[this.parentElement.children.length - 1]; + tooltip.style.top = "50px"; + tooltip.style.left = (this.parentElement.parentElement.parentElement.getBoundingClientRect().left - this.getBoundingClientRect().left) + "px"; + tooltip.style.width = UI_elem.getBoundingClientRect().width * .95 + "px"; tooltip.style.display = "block"; }); - node_elem.addEventListener('mouseout', function(e) { - if (e.target !== this && e.target!== this.children[0]) {return;} - let tooltip = this.children[this.children.length - 1]; + hitbox.addEventListener('mouseout', function(e) { + if (e.target !== this && e.target!== this.parentElement.children[0]) {return;} + let tooltip = this.parentElement.children[this.parentElement.children.length - 1]; tooltip.style.display = "none"; }); @@ -948,11 +940,11 @@ function atree_render_connection(atree_connectors_map) { function atree_set_state(node_wrapper, new_state) { if (new_state) { node_wrapper.active = true; - node_wrapper.elem.classList.add("atree-selected"); + node_wrapper.elem.children[0].src = node_wrapper.elem.children[0].src.substring(0, node_wrapper.elem.children[0].src.length - 4) + "_selected.png"; } else { node_wrapper.active = false; - node_wrapper.elem.classList.remove("atree-selected"); + node_wrapper.elem.children[0].src = node_wrapper.elem.children[0].src.substring(0, node_wrapper.elem.children[0].src.length - 13) + ".png"; } let atree_connectors_map = node_wrapper.all_connectors_ref; for (const parent of node_wrapper.parents) { diff --git a/media/atree/connect_angle.png b/media/atree/connect_angle.png index b1b03fd5193027c1a6854b70ffbf65cbde6be8c4..75ca3bb47da681f88e770573d7a10f9b2a5554cc 100644 GIT binary patch literal 177 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvp#Yx{*Z=?j1DOs^US?(%x_Snx zs_GLiUK0cgF_i@Q1v4;|O+IS@I)Uc7ei=n&QJ40iW*tGzK05OLk#w!UqO)3X+a+bVN>UhH^nC$Gh;J^oVhH001 VBd`43UI8?h!PC{xWt~$(69BG7IHCXm literal 1079 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5893O0R7}x|G$5xX)7d$|)7e>}peR2rGbfdS zL1SX=L|c!;4l+mMgSRS)vRijpq-4z1>FBcZ675b{xJ5Lo)L`cq?pY=(ntFXr*#{5y zA6?bly?Gtqx+aAmjE`PCS@J?j^`E}xmX41PcF4bfXZ!9RqtoI;A)B*h0!&YP98FF# z+pfhHcd=RF&kRSGq-FCw^wS<#?tAy}@$1+r>6P<;7k|;NoXlu9v7+x~o9iA&o4uJY z=X~#UUZbLU?N9FJ%3Rg6rL&Yfk~uk56rJ37Q$rFIy;i$*b&9+_Zu94GpS`Ev z%$QVzBAo?XqLUu8|8Ks3cUJ33PIFBO=3VhQzm=I-${N$|Zrk6VyStL<$NWa^wQtv( zHQe;S^g36!hJ`1GS^Rpg?>%O{@`i=#u|_KHpDv4Vu|D|Qvrm(q=N?mSc3%G4+BtR% zlCQFUvRPQLxOGq2`|jhrd*|-`v%UQ4J^RYoqP;J+FVkaSV9N7!aSW-L^Y+F@UME8V z)`P~s{%+6VVrcQ$kdW@=t{*jbPh0#(dAVF+Amb7|Y~{Mie#(9_k=Wt~$(696G=M%@4a diff --git a/media/atree/connect_c.png b/media/atree/connect_c.png index cc5022b51b1765759c077dc8e6e4544742af501e..0b277031df5d23e407d586488ee8be6d8a984083 100644 GIT binary patch literal 221 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvp#Yx{*Z=?j1DOs^US?(%x_Snx zs_GLiUK0cgF_i@Q1v4;|O+IS@@W_ci7lIr=s)O^q+l zZr%Amw1tHyVUupXI%}nWwf{U@R`B_uEd%fU?=}rbxQc%<{hcVS@QOG8 Q1<(x)p00i_>zopr0Ay2Av;Y7A literal 1316 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5893O0R7}x|G$5xX)7d$|)7e>}peR2rGbfdS zL1SX=L|c!;0V1vb!CRF?S*<%PQda0i35XU>(Gol8l&QVtRl=uB_8FHZEZJefwT_j& zUTig=-nm^?JGh!2@OLbpJb6*~l#2ME48h0Er+-_#pL@9WJEPOyGa;LknF35tdmLMo zq_$g&E$(7#omPTR(lR-J-DMAV?tAy}@$cA{^ve6ci@$1FPG+>5Skd>g&2^8X&F0LP zbG~;vuhGyv^8CnSHdBv3CrWQVH9yDN&N@%h=+eo`M*wAJtE& zPF~I8*2fyMz^UlZgZdBE+tTW?F8Ok~HJ%f{{ZE3CX}81TwA=TOZ@X*3_~-nAsn)WuMyFld#FtCZfd$$D2s{?$Js}E-!31lv$9G`tF!(0+Op#Q^_Pqd#Vibm zMiChyAeX(iwuibu0ISc}7Fl1JpKi^a!mAS!yk+x__pO Bg>3); diff --git a/media/atree/connect_line.png b/media/atree/connect_line.png index 41ee50731e02a10dae99c90a20decc01234064cf..24b75d681a5893efdc17e2d0a9a01c4bf6d84069 100644 GIT binary patch literal 182 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvp#Yx{*Z=?j1DOs^US?(%x_Snx zs_GLiUK0cgF_i@Q1v4;|O+IS@NwvHyDPeq^;C|(U0bk(}o&}98 Z4AoJ5`^27n5d|8~;OXk;vd$@?2>`P_IiLUl literal 1270 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5893O0R7}x|G$5xX)7d$|)7e>}peR2rGbfdS zL1SX=L|c!;4l+mMgSRS)vRijpq-4z1>FBcZ675b{xJ5Lo)L`cq?pY=(ntFXr*#{5y zA6?bly?Gtqx+aAmjE`PCS@J?j^`E}xmX41PcF4bfXZ!9RqtoI;A)B*h0!&YP98FF# z+pfhHcd=RF&kRSGq-FCw^wS<#?tAy}@$1+r>6P<;7k|;NoXlu9v7+x~o9iA&o4uJY z=X~#UUZbLU?N9FJ%3Rg6rL&Yfk~uk56rJ37Q$rFIy;i$*b&9+_Zu94GpS`Ev z%$QVzBAo?XqLUu8|8Ks3cUJ33PIFBO=3VhQzm=I-${N$|Zrk6VyStL<$NWa^wQtv( zHQe;S^g36!hJ`1GS^Rpg?>%O{@`i=#u|_KHpDv4Vu|D|Qvrm(q=N?mSc3%G4+BtR% zlCQFUvRPQLxOGq2`|jhrd*|-`v%UQ4J^RYoqP;J+FVkaSVAl0?aSW-L^Y+R@!3GBb z7RSCn#dS;!%@4b09eDKUk&u)S zkYo@|;B9SUn9;CNYexPOhRcs~*04O1mOj8ET4Kh|(!k9jwVF+mn@fqaV+EV^ xBCZ*1){8heW?3!f+_8&e5ob#SD;p03!+9GK1D`L}AAxo%%%4}}{E6GgQnH=z0kQ;K#VCV_5Qt2!VO$l@r@XJq(*=~G hJYD@<);T3K(K>4BZhlJab^A0)(Qk)X*rp+S6aZ>!tVRF; diff --git a/media/atree/highlight_angle.png b/media/atree/highlight_angle.png index accb200b454435f89aae297ec862ec8b779e7f17..1df5c0f00589626255ef78807130b3c76d4d3664 100644 GIT binary patch literal 5439 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 literal 1042 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K58911MRQ8&P5Fn>1)7d$|)7e=epeR2rGbfdS zLF4??iQXD6filPH)An3CaY#p{d$&Z`6oF|{O0JnbpQ3hrKi52~+V^{3j?UDzn?Br- z(8*bIGwO!cQX8*nVPQwycKv&P?ut*=l;Gu`Ut2%_ZS~w*;6%F5>9z0JPM@>fxN(J< zwfXw1djq^X6qvWXUN(E~9J$`$!kT-5ORwG5n|k!WTe8y2SpiEq`DaF|tM5^{vwz-c zt$V_Jvrkt!{qWgwc_KHLy~bUQ533(-InOv%vh2~u#D^O;Ow&tV+;cYdxX?S{J{6tl zPt2QH{WR_csS#h^u)SWrwCDK}(uheI{gn5p~_ zbJ3l*gLMZl$lwFt-|xEXSiipXIya-8|L>dH^1IkxY<|xPHnC)PGsBmg-yt>ul`;H! zQw_1=?mGpB+HbZHv-8RY8ti`018Z^EZvEnizR~}S>ysPGuf64a)ttZjw(J%5`(fLy zSMcv!n^%6};qrTu4P|BwZ*v%K-DKFZnK2`s`NBE21#@{FtfdEyL@#qq?O(Rc#4M*N SH@bF%{O0NE=d#Wzp$P!rB&AFM diff --git a/media/atree/highlight_c.png b/media/atree/highlight_c.png index 1aa028df6daccfbde7f4c9662ab8550ccfbd9431..8b112b616a825f996633bffc54844688e6ea0630 100644 GIT binary patch literal 5873 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 literal 1027 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 f`SRs~{_$zWy>N=k}+Q literal 1099 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K58911MRQ8&P5Fn=|)7d$|)7e=epeR2rGbfdS zLF4??iMAex14LT=gSRS)vRZdoq^!`35)dt%q9JzBDN}pPtAtON>@zM+ShB-{YaJ_l zz1V6#y>q*)c5pR4;O|&GdGey}DHZWS8G>3r9(=MpSN*);er-d5w&B@VGZ;+nnh6Jb z`lN>)J)phof&J!tJ5H%WD+h zZah`ly*X^v2DkZtS`V(-H|dGhRf9zlPCSJj0RfJJsy8|=tec#q==eNH`u~L2{gb^F z!v%X}xHX)c-~2lG|H1d1wRf&8nJzM=;hgyKpAw8ryB+qvvbcY|FW8>(&-nvW?|qq` zec+Ay%d5-8?3jLSYwUi#Y}p&e>DC7xOjew|N&Dx@mKeSY`^EXE7?`&^oS$XB{g|bn ze1pi@te6j4F}J|V6^nn6kF|Ns9C z+S&|2l7V6U!aXa26kADEakt z5%>0%VV<&~fU9F>>fQgRvYGXl$<_)u?QJ_w(ZSfBW-uopv)r2_F;C zGzNy;N)9kxk}A+}&JoO9pvwTjQd%(URmLdFhe1#jH2J^`386TFrFL_C(S*T}Ut5SqpranN*Ch^Cqsq@HKTh`&f`7@p6MlLFQD|2-S@w}pJ3PC8Gfwgjmn3Xzk~l-87ULf zlw+cLOZ{#f+g+%e{@%;b%zS#Q;}XXLe53j_-)tfLJg*{9SrchRs8Npz8rrn${JRGH zhJ&bmVrhPPHu{~@;F&mKZc^XvBSS?U4Ew6AyC+S=vo%>a9@#Z0-IDRnZY?~#s#3Om zui4hk3YZc-jU9=p6_be@mUJyV5!7r=o>1Ljj47k<)g+v=7Lf*GQx3A=JZI`3ofGQ3 z2f@Z8=y&>BUH39pNZnxEJ+`zrEM?21$layvrEQ_AC)H0_#00z-FSg$XAOjV#2K;8l zNLA89OvAw`lg3(FfL1}3)b-x>?5RVwaGRUgsk*V_XHsv!`h6ws@H1%#m*{hK{^LHd zWDKDpC#M$Xzbl22;<};;yMQL;pm^5|91Viw_SeyFnrZNi27RAq>RvU)p0GK-{Kld+ zJad1+f<$%ZP+M~DAsOuHBi4AqUpMRbTt1zll4xNR6M7s=Va39N%bs~m8BwzKO zTF4bww#l5CNNTGd8P^CI?z!`D_tD}z4ivSu%b5qH?O*&h+4{1h)~mH9^#ip-%|7LH zd2ME{o_K2QH7ich`lfhflWLjQT4~q4n~{HEh`cob7b#s|92teKmDiq{Ql31)&8iEu zT^#9A`S<#ak}Z3pM}y9#&Rz=kYAb5Em9KuqvO1PCO}P4T(;MBFFC7`OWd@;Cdbaoux^g=OTrulp)JKCn#Krsy$m?;Vr4e33rKCZb^ zqnmiFS1tDlK_5I7AyF2G88=D=jk1&)m>^h)iM9IH{xy~6Cc|>y5 z%5H6BrVx8MgHBKPQGAwQf$quXy*1hCL3`AaQu=FC@>6fE+xP2X!}hL@%N3*hVjUu~ zm&LFh$eVWW&gqYP6l+zvEK5#&tZ({=?j2j!Rr!ZGjft5}=d?_cGSkntpO_lz^va~o z-n%Sw^z6|SPwn2oRx4#)RvEUldDm!g>1AB0`Iv>#V8B^;b(&{Cp`Bj%pwL9oTI`|G zr)-hiezQN*+~0nqRAsm9BAW*?+9jQ^hr{(JQcKfJjQ@Ol?^5W1v|Rp{f_q7~`+%B- z^i?L$%M@Om?7F2%eBAUfee;xfU~K~-u0#Lfs>n?S2I>wy={F5DHk5WD3&z&H%$Rbi zt9$K+8Lpl7zZ2iBGkaf)w(jzIqq>%ayD_=)LtTa9drg}MUTw7q?Mv)^`MY(}93mig)3b9h2b#c4T z%e8927lkwz)omG0jkY?15EH!d`-$=WuL>q0t z=oh6h+J~QEy{*<8Gz*E1r{)+o4&!7tFMuLO&uWRFVlP_`>HKJPta$w_~M1rOLCXGDp$Z?89e~ApIB$>X-2Ugw&ahb zG&Ir+cMYLfpwo(DEBBffxx8__4JJ%!vM;Y^k8k-~OIGQTd*aw7mwmNr88nBTyUFGS z^^UtE_oy%BkkhujcGcUF8h|S|4;u7et!!@GtnxvwW=n|XnU%e#gY=$lD;rP4!b_Dd z>0X)L7TQy?wD#ko0FM5S5{0(y8GX-!_Zh)2DF+0IETdJfJ(fz$72ZhKyW#bVsb<^^ z{%yW3MyMn{U%o9Q_o-N_#piq$H}(&wpekzjn8D=4*hEhaVf@1^jECaqFFVP332nEL z9B5nh_gF(_aKlgllS>CtQDHo2+l9ew?W1@ABLoz}=^&dEPC-mo)*#>$6>sR%1<~O`APN~SFp@ybV^Bc>gU{g!Ioxo#1QVchBZL$L0_ul<_AiX* z;qe7NT=0nnh!1oWz(ZqE7<5<|`dbTu&^ZzU`Q*@lv=I0~ZzpIUP{57gGeGA^FkEQ# zEd-PC#hw?z51k8#$v}glU>Kw-fJViBH>9hZhxZo?2?cCU7;nxBBKtc{A&2#qtnYl2 z^vs3xts{{67u@f(KgT|&3~70Ikf~fogv32JDg_}KpUmVkI85@~qa}`H%>)1vl8(c( zkd^=)M3Stmt&nspB8G`&S>Xvd!Z%QE;Q}EL&HyD)5IBkh;SgC?SUdxVK{5#h0@9L5 zutowb1_5bJz*$*hSvV__CH5N#FFps#N+9%GuOv{+IVb?MWDzZq7?KqZX-R^f0J;?& ziMPaI71aVKT@rTz(h;O(!P|V1sC0ID2jk3E^Z1Z#N18hr)c7c!vT)7Gwae z0ZurRD-wL|^5cYozCu94CzeRC!eNPck~KsN#tQdUX)VYXK)EPE#bQwS`5wu{kfCrO zY5_^6LI86XP&8yGJ_rc8d_OKXl!A~r1(#TU>GpsY6cZ2vR6qzqpcovEjIn|)KP-k! zz>~2=q@?+cK9|X1MgKQ#$?}2Q&QCgxBY?(_o)gWlDPQm(^R4-2C}(al!Qpeuf($U` zLl6LwAal-72y4EJ5e$U0L8yLwO4!eG&VNV-Jc|Tkuvh@e1nH6)WD=3q0LBVQz%hsz z0>Ho!t$^>*1zeU;1n@xzHpC;u6_lWJT)|C0O_kaA`l4V^G7k`C5J%AUnKEkx`ctrI zNyYdatu6ZB_^_Q*_@=}_cJnf*bU~F6{iPIs;!9F={*Rwe^YDKh0fPQH$Pe-Rldhk1 z{SX5`r2I3xe$w?r4E&Jt&+Pi2(WUtHFa?G~Z$KjGsFZlOM;|(7$@56cNh4G7C_mmY+wqL!`HnoNtWBrxES2WRd#>>Phl5Z-$NhPh8Fh4U z@s*txNlQNF?2PY2j7<&Ah>d4eqN1Yow51{d^!SLoJ8X4^agOH`+DFC01@xxc0c{vO z6JfJj4Wk_}9HuYTEmf#4R(*jmw-v8g)KePhrckJUBjHs3=@+9F+EVYUY!4q99KO;b zvu1*bW-#h`V!xgawAU?>@rCt|_j0Q2?4*t5LUCFfZ%f@?Rpw<#JZGq1SFtfte;~EM zr-f{ytCUQYCFmR`t!gfB*__ogC0}qhBu{;&bGrdvb_O@PD=J15Se2X+)zkU-+V&8` zW)uCbJ8r>X>=7-0q}HC~8xj3RTU21$j>`@tQj2zmPpw004JKX^nBCX^)#jp>6so(g kr_5ush^nHJwj;&@zM+ShB-{YaJ_l zz1V6#y>q*)c5pR4;O|&GdGey}DHZWS8G>3r9(=MpSN*);er-d5w&B@VGZ;+nnh6Jb z`lN>)J)phof&J!tJ5H%WD+h zZah`ly*X^v2DkZtS`V(-H|dGhRf9zlPCSJj0RfJJsy8|=tec#q==eNH`u~L2{gb^F z!v%X}xHX)c-~2lG|H1d1wRf&8nJzM=;hgyKpAw8ryB+qvvbcY|FW8>(&-nvW?|qq` zec+Ay%d5-8?3jLSYwUi#Y}p&e>DC7xOjew|N&Dx@mKeSY`^EXE7?`&^oS$XB{g|bn ze1pi@te6j4F}J|V6^nn6kF|Ns9C z+S&|2l7V6U!aXa26kAD(9hXXgvC+%!{7Bh9K)xq36hmS!;1AzTik+*Xohfh@$XU7w)J(VTXJDd)HD zf&IK7Js14LZI|yYf4cB{oz<(4g_R7qvY9W$NjH4E#jxc%+k(Aj3~#qGW~}FRsLsVF z^(!dliu@m!wAt&A0Bvok`(^*TnW5I$=Ed*(b=-9KATUJ840{8XioJG>XHrZWSD9Fd zfkM{P)z4*}Q$o`-1rQGyx9(ti0Wj!I;BkuxdP`W`3NkP_H(Y-$3^Hpo_kI(QE|^&W D_;rF+ diff --git a/media/atree/highlight_c_3.png b/media/atree/highlight_c_3.png index 546bd342fc7fff98613ba6a8ef8a45850c867973..cfd6bf289797eb1da14a7ca302fc7087ad25cdcd 100644 GIT binary patch literal 5819 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 ZrZAPlvri^{$8{_~0 literal 1090 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 YAANO5o_mvf87P1~UHx3vIVCg!0No2qo&W#< diff --git a/media/atree/highlight_t_2_a.png b/media/atree/highlight_t_2_a.png index e6cd87a670763959d4639d0911ee28777eb60db6..338c2e242216e310332659dd557795c36d9e3fca 100644 GIT binary patch literal 5635 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 diff --git a/media/atree/highlight_t_2_l.png b/media/atree/highlight_t_2_l.png index b52a8d75fb439a79eec3ba364b8883dd34a64eb4..39601ac62cb84391b6667ae177c94b20a42ab90f 100644 GIT binary patch literal 5709 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 vq$A3*H*;k{F$kxQF;sUEj;z#xOuM; literal 666 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K58911MRQ8&P5D>38$lZxy-8q?;Kn_c~qpu?a z!^VE@KZ&eBzEFTqh%1n0P*VE;|38DaHUp4kU|7F!&q^T0RubeF3={{7ZQj3RKTw3T zz$3Dlfr0N32s4Umcr^emxaaBO7*Y}U_LgCujH3XHW6+hq|4%nHY;oUoYo*8XInonk zztz^XZNXe#2W#nuGBbv^ISjXMGHlt*n2|n+BqnY9E%*NQ_X;xH_ABVgiuv*X z-z=XmcXhf`cy0O9#jopMnlZ%wLJSusH#2Nuhe)rhVF8O(6$vzaQvfqBOzj8L z4*q;h7vvz)yFLkm#a^6rWVqD~kq)zopr5}FtqZmynpUjEge!uU(3+iZ{}K?(pEYu?EK diff --git a/media/atree/highlight_t_3.png b/media/atree/highlight_t_3.png index 153c85e2010ac56c81901807f022c4b6a4ae3aca..c9ba3e4bfbeee0fba3658d207bfc12c6c5194ab5 100644 GIT binary patch literal 5742 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 literal 654 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K58911MRQ8&P5D>38$lZxy-8q?;Kn_c~qpu?a z!^VE@KZ&eBK7W8uh%1n0P*P&}|DQoy8^~PGSu%oyJ0Fx)omS>*_D%GVJ;!*kD%``d`xS#rxa;#22WuGiLBJ0Yj33A@(N+nEvuaf#EGM zLV#d_wmc~E7#iluuq?2JNS8cS1_?1-nB2^;g&iWju7(9HR#ha>@J#{CyfC#NOgs4V zF

@NCPbgi@iAM$Z)F}A{}lAvE9~^!=YLLB7MpoOrtxl!MWl5b9tAi*&Pe^J>CaW f;_2$=vd$@?X#;b`{{IX{nb{rAflEMX2rdHvtXkFf diff --git a/media/atree/node_0.png b/media/atree/node_0.png index 538b41afe28fec84f738fd98993d1ded17d05e4b..2bd8d3ca5f3aec078165eb185745d9760af9adfb 100644 GIT binary patch literal 5438 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

{^-mbjJcAG%8G-Nv&XW^)|};SEAc^=-qi=J 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 diff --git a/media/atree/node_0_blocked.png b/media/atree/node_0_blocked.png index e62898d6afbba094ba0c18a0e828e861b68624b6..4f423290c615cfdd7f9db2386be22945c368c7b4 100644 GIT binary patch literal 231 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 my7I`pR>1|G2lre$^_5{5fY0^cY5xMz`1tk! literal 5384 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 TdDC;+?IkeMGt;fmc8d8w)7HIR diff --git a/media/atree/node_1_blocked.png b/media/atree/node_1_blocked.png index f7b0e5ad463971b1895660ba297875f1a0b14f56..3bc9681e9f8e48cba381b0e8388dc47f284514e5 100644 GIT binary patch literal 254 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 HoD!M^}Db8e(q;B1_pTR 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 diff --git a/media/atree/node_2_blocked.png b/media/atree/node_2_blocked.png index 97bcb14caa107bf7d44c1cf332b2417cb369df0d..ca9586e307b7735366af921e8b41eb28c3e6af4a 100644 GIT binary patch literal 276 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 diff --git a/media/atree/node_2_selected.png b/media/atree/node_2_selected.png new file mode 100644 index 0000000000000000000000000000000000000000..9a01757890d56395e9aabaa75a31a8b94640afe8 GIT binary patch literal 328 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv^#Gp`S0EjK?f(C)kHL%gny=aV z-TjbVQ+t$qqJxu{mzlS-p0lo=fvT$d?{N7aK&6Z&L4Lsu4$p3+0XgSAT^vIyZmkVe zbz%z?P@8!1`bOpg<~!V|K=h(hUKZH~0K7xhy3f#&PjaC)X#2nFXp3`dC?W8$Q&n zkbA%D5bvR_XZJccglTH+`FQiZJr`FIFH??x4wK2|1t03qzkdDGc-y9er^Q+2Z+tp_ zu-V=>*(n_KW!m+_qB7-24;0Mou!~@s`!DcKaMNjqoy>lU%kqOf?9~JO4n;hf!+W%q Yx6duAC`mP{6X-PtPgg&ebxsLQ04|b+MgRZ+ literal 0 HcmV?d00001 diff --git a/media/atree/node_3.png b/media/atree/node_3.png index b55c8963146856bb2783d0b1cf7084c10b16ee62..09f7d8319d040016c51c7cb2eac95246bccb07bd 100644 GIT binary patch literal 6284 zcmeHLdo+~Y_a9QqEn?hb3?Ft$NqEw_%ywZh!&rrR!e&4lztF?aL|C+U)%h_k|&)NI4_c_lwlj`Q`peUy; z2Z2Boog8i5!6!^|$;<=q+dSD#5QuDRtf#NYogNM23wSI}H~E$k!3*-tI7s8u~x9Cfvb9o-XFrM9ftNPQt|xt`o`;Fm}J`crNN z+H$+R&*GnYoYTYygj64kYBR|ZTIk2>^}pZwsed|wzlzcNzNm{mGrTocr;^qH{SxHZ zG=4ljF6eoA*)av`D)#&4vX_izJzDO__6g09X#es|GW<6K`iseIgCE+B~V-vhFdvz1waT)a^do zqpT!vRqL?t^#fgy`=M%aTFVD?lWF;{q)b{#!A~hjygfN6n<^bFvZ|a-jixXj^VgOfEYDAolRRJv4_uuZQK|j3vxchX zp7!yk+*TEGH@_iw99y_8^OC;X2gqlNMSR|Ug#{1RPb#A!56e>9hBBP@F7DJ))q1wO z-e?>RNjZ;e$lYHL@m-ti;j%u(Xc^=T>~wu(%MOaBV=J!TC_8<{68ConZ#A6QE7401 z%RF+x%u`KIQRQ!6G0(36HDPF%pMNt~9_yp-P2l41yZ_m>^6#wRtkugFu7#>VvkLuo zUGRo_;UnyGGI0-zQ_tj9B;$2f6F*ncZNiSkjuZ$7E7soU)+jc!_t&3P(xQZ4a>A|~ z$nYz2K0V5fPh;O- z5zD(vjhz{qYKs8^eC0|HEDTp6c#tTyh|FYGle1cTb9u zepb2(sPO+3za`1**zKdahfUlSj2I(cXPQ<;xLuK7w78l)B~Yk~9eduaOslppn0RU0 zczaQ~y21I~N>ZkfjC&tn*bMI3f1FezPCi)vv}$a)8LHvP?t#|7y{x(EMNI1x(Qw0{ z#dVqXzS*|hmCMFOPM>Y_z`c~Xx3Pm~#vync*zhvB_l z3f=xCt}DaP*S7>kTit9ljDjg^)!*%(wmHf*Y^UFuFKwTg@%*8`VD*WeeP@PJD)l;^ z)h|AGs%N?SNXdf-w~bQeb)9WoLlm=_6E#b;gAV5zquQ5jW-v@I>%X$WB&4SK8>+e+ z5u>c}xvpMjN2Rm$(R-No zu1r+uA11oDa@*eV-Ft${(Zj4q`Q$6vj}>++F80SFdl3h9`lY;gwO+`K{`lz7q44t; zqWyH9v$lM>F>lKyzu|PV9vf|onD7_1J71sgC|=jqO3J8rGHB;=j$1JDSDMk}q;<^yd@&+0bnW5h$pYkS)PVVdkiE~+zN}Il@xN{AH-F#I#lJ07 zZfR9c`kl$xy!_Q^tDTcpxy|a^=k?ba$7(trKiM#$lC&+kc45icTXvzP??W5B)GF$o zv)60h35k(8T>{#JaCjGM`{W>##)sa`yARnPSNTAh10fO_J z_=^rbKKmzJqpziVU}C{d%+_6`l?yWoX<5ooHrI)B>>Tx$s^vR8C?dz4if^>>?u=zzeTCA3aULiew zGvuARTc#YFVq0FVoLy)7K-yh7y2v+Eiv6ZaJg`?NY7I&fhLAJw3v1@X6ewOv)STmg zzYcNBxVC*+{~yZDJ*L;P6M7ZrJU{Ca%^_Hp`KbUd3p)vNemetod|8(+1o@& zGu~mX_3V;N3Ti6!bo&fTb>ighc)Uf;0ixL;ifSSj9MsLJ10xvm2t_`s-^6*GCa(`ZzGjbRoA8KV8Lt{8;%_} zK3UW{;d;!`ThT?PcTb00h)(34mZJVcX|6WB#Pg@>0BYQmBgl7(i3SQsM)cifkwY`g z$1kK9&(q%1b&QZ_f3#e$lWMKiNx5q;_Z$L|+QFgG+?;5%Z{KzBYo7NS@PQ&DFyi>kix@^<5IC^yRdnILUXyKua&k~CL>?tZ5!VggNSejlEI%T2s z66`-rmVtcx+sMWGfuq6Zw?92Pb~4c9pu$*c<3(rU>Zg%Uhg{aatX`)Z3^*BB80%pN z6B{!E4s6`|EI{Dfmup~n_^6?h%B}*X9J7PjirL~cQt@f+=knwO&^G_Pzt`-p7`YXw zxjN*wR_R~qux)lmnTZRv@Zra$<00gTTIp0z>X;6GsBdT$q!H2;@#$0d<-^7aU$iRk_RNINJNUta!?kM!{^rMB z1Jpi&tmf9c%V+{4OP73Kncnun!|$$jAUdwRn(XRn8k)Dapfrb@u$>lk$@W2*-ss4i z*KeL+OJ=r0=xKuEQUkbha03>_0XJH{F3uDNFT#}0i;u z93B@Y!K4TCB1Kd<9PEdE^Dlz$;_@AyEBwj=$OlqP=OfXkC}czg@<$7y$Sw*5`RdSr zv=DlN`&FbnAml{~7=T?Az!e$(2*G50x93L+!e_%_GLS$x5CN(R!BNpa4e8+I;`ZG_ zLIIl-!JoAP$^J=G#9{qQ)=$1kdS=7<(Gk%6JMK@~-(sIt2DMyVD7HLCq{KZZTPj>K zK849+aF~?YS2BskB$6>G1dfPdB5=Vd27=5WvJgZD5lhFiFnBD3^#ha>S16)$8Gr-| z1UKb?ICv5fAkl-#2s8;tMBo@CCL$PM(h&fW$i$MFC_*p`{R6~00SBx~dialCNuZb@ z6p4vrqEK`^0!tvUKyS!61Q`uF7tFviu>c)M#^Q0aP)r8Jo+pT)gX!c%(AfZz&t=bc zNC>A`yE#$e7*o{061Q-=hy@yebAZET@}hMm zW)Zysfe@@k2`U<8ip9*DOAou-4e|(b1s3Qm zSFjadQ)TkAH_;)0Bo82E2owSF17&dJ*I<#772{j9=E(oWhxx3+4@(SaHzxy^E^sA8 zeqRc|@&)?(-~4^e!+&!K80_~Tzr^ovx_;C3OAP#y^6%>UP1i3m@Jq_StLy)bF1ddX zQves-0Y!sHC2FJjUhtS@?B?ugH+$fMe6h28fI_t!7;Lb1EY#7lvRShRiJ}>sAWTuq zmKhu9>)q-Kl&DIH++95&Rxi52f5RbC!D}6CAu02hI)aTwd`CYa1R}30xuhV6@-#uA ztjNj5PWHtDZIz|Ccopk3P&DpjYwfwB{YYkcXah<)8SB8KOS^p3)zTi_akprUkwA|#)*bf3!d(gzf1LeykU(_#-DF2D!u8ZScu`Esp*X?`zgARD*5wo7!broyW$v^(}lk{t{uPVgB%GVA9QT;Pjg)Z8Mh{ e46-!-9Wk{!rPS;6_zEz5h?AYGZK+LA;{O0Vc-SWZ literal 5218 zcmW+)c|26#8$PpO>{D4$2RjDzd!Ehp7-4Mea`c|=RN1#dmkAYXfZRKX8-^&>u6uU2>^uJga8CB^=9Mu z(&fbRzo~T%RP=EzQ4P2&Rv!yMWfJ3&0}a)t_tm!Y2Y}`C$p!i9^U?``GkZGMv8Exn zSH?qqZ5FJ)Znz5RR^REYcIuWJP4x1esihT3R6o5C>8?m$10AB5a3)Obn=cX-?r5|B6}Snt}u6`H@N;u`E9DckWo-@Uai9onGX`Q(e^Ufh<1LkKoos+-1+ zb;0h*2DDA8I&!i;m^jYhGT9U!B<7c!bZM6GRbcx$YkBSG(^zd^?=OTXuDlkF{3?DQ zQ^a)3z4ND7?$kor!_66*o)IEi6fW?yxcD-2Hj2^M84@s4N6fLXpYoFr3_pbqVNkw2 za>*?! zgqe%0JAuumpo5)p!hhOiyLVoIDUKVv^lw=iYA?y4R(wPYak(q)VoW-RMUrL@um$Tf zaj5k#^CD|yB=k|h)>(MpkBE4~+}29eU$V(~qS8 z3Y?Y6A_R3Rw^?T(0ep^T(W4f7twYKu;(M% zS$jNOB(673VK!hqSN=1W?qWez-(yO4NcmyB>u*Cb{s+5W-DOaBXtpn zDyaPd%f5dONsuZuq-kXVns^la?yz2_1Wh|@wD{jLU;~Kb7zpu;$jzxI9reXW{L9&^f%Ah0QJKp8@)&2H~+g52Qr<$L63M0tvddyA1 zyW&`+(ST&ZFnRm=%wn_qkZ?VXTGhImTjKb8m+zBaniLwBrsX)HKXs}D!$L|U#Eh}+ zDkcNH4$B)O3fU_OS>|TzxyM!+`7DHQYJ#2_;wk;h6B243d$xOmWrtg7uAEg(ZzCflY{PNCwJ518rsfWsOQ7wmCtb@T@4(+gmV2w8 z=;oj0PC9eeG{`E7+Nt_Qd$*Ko)&r>%K|t~OQpc{GOLP(GUudgd5}8yO<8(Y&yek)* znjw?=tr=^5)V$HO*GVUz6@KB4=Mz^}-lzW^AMeV&EWO5wtcBTc`y_KvO7*%8H{?oO zJ#I9)wVI6RS#r8rjvu_qKqiox2XgK|n|!ZzRX)I7>IN|}soRcQxkClULt26IAL?N& zmV}z5)OOFd^YS+;ZSDoHJvEEx7@cg1$+pG30R_i8~z1L*6d*&jILJCGAiF4m=KU`TDUm1`%0YR1!vZY9&&aP zz>T6ZNYmV(Gh^6Qx>buQg*As#j%~OR5eqDYUA(FagyPuGW2Le2)w@Pvm-lzw6XeSl z!#9^{+>AC9DVpYoIhvE|>xK1e)uAto94+k7RKR}&Gb2hz0jhC-4)(8jI_2y~)ine` zo+*M~l)8y#oJufB==#X_v@nmupt|k_&U||g6Og}c8_ql4FuKY|e^637UlX)E)rAS) z`gpiWl}p6lqNrWoBG)z%U=zn7p5@A)@3(N>R^0o@4OS?j0iWD2_$=waF1;T*ziL*# z%+p}cFqJZ~yv0~<@modk+vTCG@R?_!nGD~rmUfE(<$)iRAy(z&tp26`ccHhe=LCLN zkE(n(IS;n}P^u{JpN+kZFx=8f(Xx0w^@?Cde7FSu4t%4WQ$0{NGtV(tvFJ4gJEuV4 zVn)#G7dwV|T1raJhrd1qu{y5?9Ktco2b%f$E@lep0gZn$YVK5qzAQNldMIL~58O&l zR;|s67lu_D+)|b;nAo zZ)!V1StwVDg6G#p41sBZ7)7nl@xi!yw!~H27AdbWw>={R7-1iuRjU8HL*&TmYek>I z{;999Mr(a4_S?>aLl9L#>OB%ya)4%29h)rSa5cax{KeOIQW;)_keLf0mK981JV?0>2@YqTwbmU^%ejL z-jd7;&Tp1>uLcE~!j!TV8w{ z>f6o)F=}CJ$?WMr#F;vAakq#=TQcXIeES6LfC-hve`AQbT%FrnP-x59tlX+wzU}b; zlT)9a4Pun6{a_!_pe*mUH+EG7?5_NFtr@#4t>{rR71_PA;C~DbpR} z(s)Hxl9Q_m_I7Z}fLefuklPEVja_yo8{BJ*u7fm%>+zX77S^}sC;M_MLof1!uA{Yd zu?J6RM*V!9u1gL=delMMH}{q%&yi)GclIyd=r;wf=8mgB;({1`k~7RrHs*lI%nrP{ z<(D9)%m(kje`ucX&xcd9Xfk`Qm5XNA21c7$ZEJE$xEVF{oF9X>TO4i6VSe6;y z@J}Eqz0bY`!m}t*($6E0lCxxW%Pw+hqU?W;shci^60dY4IS9AC5Aveu_Fblh2Ws}o zONHtULsF=I2!_*Wv@-&-zfz>-9EptWrIFb=c#XzY>{*x>n=b_JzOn|UN8K-%SHvvl z*81~nLSs`WQjcRwNd4=_xI%jdWGY2I)V#?fk`M}iUer#ZbLk4a?>j)I#SWie5|b=n z9j_npF0|?E(Ot8Bula1U$(Cch$qOGZy~v(nn3Iw}L+mv?Bzgn_Jy_VFuCb48lX$bc z!S|f7hZr}5Ott*5I8=W+jYn?z9gd%koYc`d%Mb_g0v{zu@1;n|d(l z;=jMCh7-a0W8KW^%=hjFn350P)YN`oNSWNV8&;CZqJ#8pa)H3EGWwl-a3Si46r$kjHE#As^b=Zod2 zZ^qg_X2)Njh|JFt8_hF^990`r{^mb?I49%ML>wWZ$sr*U-X96cuU8k7S?~Nr@m|K? zuQj#w?O{92=T#9c)t}zN;V2$s#TRbS6)ZxpJ?9nO+@V(D?BQPb9yk6>ck;O%ii3T@ z+b&{_smW2{rs;beLyjcM>EqS6t~(z0JZ3dZE7%stQ>B<#y3}&qQzX*{SLGx-7KulR z%Uie6P*m-ec+T!Ko9>W8G*mn*iIHd(~(_HLKC zj7mtudlQb*fXel3^bw^lNdLBcut8t*p`-w=;hTiaR7)zx}6U1u9Q5l zTIE+9Q1zknmvi@=NKgLoC63&_rKC*n>r&&)*{8^de@bzhGhVBnu^N^|&6_(?nUXEJ zcm)X@6vY>iT`>MBN=0RG;+JUr@88akX|K7K-nr^fDc+J7^Q$jk4o};=i0e%FJEEU5 zd7099tgi0Y$)UUwe&o?}9KW+Uw_M5A6b<>>AqKRqb9y8 zxwQ9Xg_>&*@9{nR5X*|p{f6qTgBXp5KaBp{7FZ~zmk|O5u?Cj@l;;CJYUL?L02=$e zIx+~vl>ubs+glX=U~dfFJCSw3qX|sIka{!(-|JSo4uK#VAc@i?YkClZVEla~vyjG( zwMfj6wd4IF9|0jj#hy z3eTAc7wZ{O{xdwsW`dC9{)NyLmv%Y>PS7))Fk^A|@!)GZU?y8mV$Xm?2zvy{aajOq zc5w8lSSiVq!Klp?yv-gx;B4on&In;E)#ym{k|)rkn~HnE*6cxL9iAEu-buPIgvgWt z4faxK+!A>A(qKcbm?P)hNywR0%cEDLkOBn6$@*rzoe&>j<0I(Z@Y^VV0jE+;M(ar7 z(q90hXmFX2xt*BGK@GyZDlR6Ooj$2*?P6K><{KX1;x$l~T0LW-!vZuADE2|iBhe*D z!K;S^e#F2XcL`kj!xMp4=ZP5EwshlWQw}N!iXg(nXy;sU`yJQGxcZWb2gUDrz$Vqn}80KTcdeRcO7=}j>_Ci=7 z8c4zT{#J|JLt47R%Zia{1?y4M_Llo$s;+6AsMjm4(@DElW7&zw;h^^e~^ZE3=;= zjKTvpshCXmf~k10pQ#&_V!=MU0TW4Z*6 v!!!ES8qD~qUrb|sAmaIsd~{QLjsi(bf4{kc{;N;@F9>ur46avPvyc2Aq^-LE diff --git a/media/atree/node_3_blocked.png b/media/atree/node_3_blocked.png index 26f82cd074326890caadb16f51eb1cf8cc9390b8..544241d16e7015dc3aed3dcf85841809147b3392 100644 GIT binary patch literal 309 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 literal 0 HcmV?d00001 diff --git a/media/atree/node_archer.png b/media/atree/node_archer.png new file mode 100644 index 0000000000000000000000000000000000000000..fd2c33fb33d4a6fb0b0690e8838848412b7b8aef GIT binary patch literal 5955 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 Iby(`Z0b&U)asU7T literal 0 HcmV?d00001 diff --git a/media/atree/node_archer_blocked.png b/media/atree/node_archer_blocked.png new file mode 100644 index 0000000000000000000000000000000000000000..30651d6a6ce026ce6469614fdc88c13b525af051 GIT binary patch literal 267 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv(Ey(iS0L@+3aLFs&(54Y|c&N3_9ZWnO!Xr#;W05-M2grCOZXLcID zU}8Ly&wu^Uj-_0DHBmM#Ru9U>)|jbl1lj*l`t_eBPUtcP`%R1xq z=47Ejlm8#unKBuE^Lb2TioIu(9=rdy5c}jA&o49y=uViLA=%3CH%n!v>d}qYf$nAS MboFyt=akR{000+aSO5S3 literal 0 HcmV?d00001 diff --git a/media/atree/node_archer_selected.png b/media/atree/node_archer_selected.png new file mode 100644 index 0000000000000000000000000000000000000000..e48bb682675a6ecf255e114de3eea3079140df6a GIT binary patch literal 297 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvxd5LKS0EjK?Y{Y%t*Qr&RaY6> zHMMKS8#*|7>FOD%s;c*VmBc!NX4zB1xgG7w#O|5njA#h zwD}u2*$cGZ@`@`gyw)V_&~q;#o4Y(ix8wab?~M%8-k+8~6!H7sTmf(Ew_Yl_OGCfh zKd+F&StT{oUuv3+0Q&>RlRU|{3a!sE2^Z|Vd571<{xwr9zs1@+jfp22=iC&T7yM7r zW$$n1n1=P0!Dk+x`(QD-iRoqFdLHJV7pGM0Eq3_KpU!lE_sCz~DPcmBzW(9d@%rcf qMkbDo)&&}F0*hFU+)M)a85kDL^_*3zxN#}a6AYfNelF{r5}E*aDQ!jo literal 0 HcmV?d00001 diff --git a/media/atree/node_assassin.png b/media/atree/node_assassin.png new file mode 100644 index 0000000000000000000000000000000000000000..7b00ea8e3f53f57a8014bf0ec123e912ca93cbde GIT binary patch literal 5845 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 literal 0 HcmV?d00001 diff --git a/media/atree/node_assassin_blocked.png b/media/atree/node_assassin_blocked.png new file mode 100644 index 0000000000000000000000000000000000000000..b9dc9a91195c2c31d8d5575e964fc8339021178b GIT binary patch literal 260 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv(Ey(iS0L@+3sUpG65AtI4E>z>cX`^j?UtKhdtTx4{=7+?+!Zs`Q*KQ4zI|C%;`Qdq zDQ5pauze8?n8xIL&n7)~|IgqC$9KkC6kNDdRHNJ!8Gd*wUC&52X$Cr!!PC{xWt~$( F69DB=U?czl literal 0 HcmV?d00001 diff --git a/media/atree/node_assassin_selected.png b/media/atree/node_assassin_selected.png new file mode 100644 index 0000000000000000000000000000000000000000..7d88a0f319ca9fab906f2fb3cf65217c49ff4a26 GIT binary patch literal 291 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvxd5LKS0EjK?Y{Y%t*Qr&RaY6> zHMMKS8#*|7>FOD%s;c*VmpY-4mpUl zX|owjVt=6ZLRqZCg|}7Rpz9FZO3gXNuMd5?Z5Do{UGx6(_-Qrg?v|&Yx#hQAFtYq& z+OPNN24T(f+@4Kto0W4!P(vX)af)t%mJh?{*B-i4K7_oeV)*d8G4ZOx^GZj{xAIDR zSQ1$Kej6Dd4_R1H;i0ggzsjEZYoO;Rp?iWt8YfuH8;aN`sXBf8^^Zm6XI-(v0?P~e j9~4};Q+hHM$T2V&xA{)$o9R*kbUuTptDnm{r-UW|di-oI literal 0 HcmV?d00001 diff --git a/media/atree/node_mage.png b/media/atree/node_mage.png new file mode 100644 index 0000000000000000000000000000000000000000..a2d59417f6fe57b79ac5578428ecf68dc9bc3e29 GIT binary patch literal 5836 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 literal 0 HcmV?d00001 diff --git a/media/atree/node_mage_blocked.png b/media/atree/node_mage_blocked.png new file mode 100644 index 0000000000000000000000000000000000000000..15d26fca4d874e09d5067656110b63df2d929ebd GIT binary patch literal 263 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv(Ey(iS0L@+3 zHMMKS8#*|7>FOD%s;c*VmjzonjAzN zwD}u2*$cGRUaw#@zZO-%#B)(PC-))WTGog6%a%t7oc{l5ra|%<<8ZIDsV3YL&CGRI z{i~B&TD)-Cw4V#qLdBB!T_*Tl@Z#fhZ{tg_eizR9@Gd{+Dk&y?^Mx~u88?)5wEt^n zpTGFFC3E$fzsLT03H*Gco-$!!L_4pC^HL$T%7#bsWuF@x2&pV!Jc0=>ZC>FVdQ&MBb@0LLtAx&QzG literal 0 HcmV?d00001 diff --git a/media/atree/node_shaman.png b/media/atree/node_shaman.png new file mode 100644 index 0000000000000000000000000000000000000000..bed3c3da8f56d8892e36a71b8e562b53229d8ede GIT binary patch literal 5932 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 literal 0 HcmV?d00001 diff --git a/media/atree/node_shaman_blocked.png b/media/atree/node_shaman_blocked.png new file mode 100644 index 0000000000000000000000000000000000000000..49ae36619f8f987872b68eff7895a6e94d742154 GIT binary patch literal 264 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 A1poj5 literal 0 HcmV?d00001 diff --git a/media/atree/node_warrior_blocked.png b/media/atree/node_warrior_blocked.png new file mode 100644 index 0000000000000000000000000000000000000000..cd44a938167fd5e98434dd5d237c69b731a4e737 GIT binary patch literal 261 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv(Ey(iS0L@+3I=SCI1ic zz2)_}arDSPoKVR{jcYZ?`wQk>MB2sb1&n{oD$Qu)8NE`;!JZ1-VZx? z1YN#!ss2c-O5tGGbN zHMMKS8#*|7>FOD%s;c*Vm80`b2ZyVUwh6ivJ5Tvng7mVKJcoq z;uZggphPAM=5GbooA(QK?2%Mp*5ti>&OvMH2`zn_RrMB+8P_@7c;9e@Q!)0Oe53cd o^=wQj3*HM)o7lZ3civ@bMKj-SS^nB$pbr>4UHx3vIVCg!06v~>IRF3v literal 0 HcmV?d00001 From e6106ec8280dfa84b5a191f6edf6123a5dc974ae Mon Sep 17 00:00:00 2001 From: aspiepuppy Date: Tue, 12 Jul 2022 12:37:52 -0500 Subject: [PATCH 2/7] fixed stronger meteor and windsweeper w/ thunstom --- js/atree_constants.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/js/atree_constants.js b/js/atree_constants.js index 330c27e..73f4e9d 100644 --- a/js/atree_constants.js +++ b/js/atree_constants.js @@ -4512,6 +4512,13 @@ const atrees = { "target_part": "Meteor Damage", "behavior": "modify", "multipliers": [30, 90, 0, 0, 0, 0] + }, + { + "type": "add_spell_prop", + "base_spell": 3, + "target_part": "Lightning Damage", + "behavior": "modify", + "multipliers": [30, 90, 0, 0, 0, 0] } ] }, @@ -4785,6 +4792,14 @@ const atrees = { { "type": "stat", "name": "eConvBase:3.Per Orb" + }, + { + "type": "stat", + "name": "nConvBase:3.Lightning Damage" + }, + { + "type": "stat", + "name": "eConvBase:3.Lightning Damage" } ], "scaling": [15] From 2aee7ca589d7af3928bc3e32868de322f29e123f Mon Sep 17 00:00:00 2001 From: fin444 Date: Tue, 12 Jul 2022 13:48:55 -0700 Subject: [PATCH 3/7] connections no longer work by rotating since rotations had issues with the pixel art --- js/atree.js | 99 ++++-------------- .../{connect_line.png => connect_0011.png} | Bin ...{highlight_line.png => connect_0011_1.png} | Bin 5554 -> 5555 bytes media/atree/connect_0101.png | Bin 0 -> 183 bytes media/atree/connect_0101_1.png | Bin 0 -> 5471 bytes media/atree/connect_0110.png | Bin 0 -> 178 bytes media/atree/connect_0110_1.png | Bin 0 -> 5506 bytes media/atree/connect_0111.png | Bin 0 -> 202 bytes media/atree/connect_0111_0011.png | Bin 0 -> 5713 bytes media/atree/connect_0111_0101.png | Bin 0 -> 5633 bytes media/atree/connect_0111_0110.png | Bin 0 -> 5699 bytes media/atree/connect_0111_0111.png | Bin 0 -> 5698 bytes media/atree/connect_1001.png | Bin 0 -> 184 bytes media/atree/connect_1001_1.png | Bin 0 -> 5526 bytes .../{connect_angle.png => connect_1010.png} | Bin ...highlight_angle.png => connect_1010_1.png} | Bin 5439 -> 5439 bytes media/atree/connect_1011.png | Bin 0 -> 202 bytes media/atree/connect_1011_0011.png | Bin 0 -> 5739 bytes media/atree/connect_1011_1001.png | Bin 0 -> 5694 bytes media/atree/connect_1011_1010.png | Bin 0 -> 5654 bytes media/atree/connect_1011_1011.png | Bin 0 -> 5697 bytes media/atree/connect_1100.png | Bin 0 -> 184 bytes media/atree/connect_1100_1.png | Bin 0 -> 5458 bytes .../atree/{connect_t.png => connect_1101.png} | Bin ...hlight_t_2_a.png => connect_1101_0101.png} | Bin 5635 -> 5634 bytes media/atree/connect_1101_1001.png | Bin 0 -> 5722 bytes ...hlight_t_2_l.png => connect_1101_1100.png} | Bin 5709 -> 5708 bytes ...ighlight_t_3.png => connect_1101_1101.png} | Bin 5742 -> 5742 bytes media/atree/connect_1110.png | Bin 0 -> 203 bytes media/atree/connect_1110_0110.png | Bin 0 -> 5645 bytes media/atree/connect_1110_1010.png | Bin 0 -> 5585 bytes media/atree/connect_1110_1100.png | Bin 0 -> 5637 bytes media/atree/connect_1110_1110.png | Bin 0 -> 5646 bytes .../atree/{connect_c.png => connect_1111.png} | Bin media/atree/connect_1111_0011.png | Bin 0 -> 5898 bytes media/atree/connect_1111_0101.png | Bin 0 -> 5754 bytes media/atree/connect_1111_0110.png | Bin 0 -> 5811 bytes media/atree/connect_1111_0111.png | Bin 0 -> 5833 bytes media/atree/connect_1111_1001.png | Bin 0 -> 5853 bytes ...hlight_c_2_a.png => connect_1111_1010.png} | Bin 5779 -> 5778 bytes media/atree/connect_1111_1011.png | Bin 0 -> 5937 bytes ...hlight_c_2_l.png => connect_1111_1100.png} | Bin 5785 -> 5786 bytes media/atree/connect_1111_1101.png | Bin 0 -> 5865 bytes ...ighlight_c_3.png => connect_1111_1110.png} | Bin 5819 -> 5816 bytes ...{highlight_c.png => connect_1111_1111.png} | Bin 5873 -> 5872 bytes 45 files changed, 23 insertions(+), 76 deletions(-) rename media/atree/{connect_line.png => connect_0011.png} (100%) rename media/atree/{highlight_line.png => connect_0011_1.png} (56%) create mode 100644 media/atree/connect_0101.png create mode 100644 media/atree/connect_0101_1.png create mode 100644 media/atree/connect_0110.png create mode 100644 media/atree/connect_0110_1.png create mode 100644 media/atree/connect_0111.png create mode 100644 media/atree/connect_0111_0011.png create mode 100644 media/atree/connect_0111_0101.png create mode 100644 media/atree/connect_0111_0110.png create mode 100644 media/atree/connect_0111_0111.png create mode 100644 media/atree/connect_1001.png create mode 100644 media/atree/connect_1001_1.png rename media/atree/{connect_angle.png => connect_1010.png} (100%) rename media/atree/{highlight_angle.png => connect_1010_1.png} (67%) create mode 100644 media/atree/connect_1011.png create mode 100644 media/atree/connect_1011_0011.png create mode 100644 media/atree/connect_1011_1001.png create mode 100644 media/atree/connect_1011_1010.png create mode 100644 media/atree/connect_1011_1011.png create mode 100644 media/atree/connect_1100.png create mode 100644 media/atree/connect_1100_1.png rename media/atree/{connect_t.png => connect_1101.png} (100%) rename media/atree/{highlight_t_2_a.png => connect_1101_0101.png} (56%) create mode 100644 media/atree/connect_1101_1001.png rename media/atree/{highlight_t_2_l.png => connect_1101_1100.png} (56%) rename media/atree/{highlight_t_3.png => connect_1101_1101.png} (63%) create mode 100644 media/atree/connect_1110.png create mode 100644 media/atree/connect_1110_0110.png create mode 100644 media/atree/connect_1110_1010.png create mode 100644 media/atree/connect_1110_1100.png create mode 100644 media/atree/connect_1110_1110.png rename media/atree/{connect_c.png => connect_1111.png} (100%) create mode 100644 media/atree/connect_1111_0011.png create mode 100644 media/atree/connect_1111_0101.png create mode 100644 media/atree/connect_1111_0110.png create mode 100644 media/atree/connect_1111_0111.png create mode 100644 media/atree/connect_1111_1001.png rename media/atree/{highlight_c_2_a.png => connect_1111_1010.png} (56%) create mode 100644 media/atree/connect_1111_1011.png rename media/atree/{highlight_c_2_l.png => connect_1111_1100.png} (56%) create mode 100644 media/atree/connect_1111_1101.png rename media/atree/{highlight_c_3.png => connect_1111_1110.png} (55%) rename media/atree/{highlight_c.png => connect_1111_1111.png} (55%) diff --git a/js/atree.js b/js/atree.js index c74f02e..c53a7b2 100644 --- a/js/atree.js +++ b/js/atree.js @@ -888,32 +888,10 @@ function resolve_connector(atree_connectors_map, pos, new_connector) { } function set_connector_type(connector_info) { // left right up down - const connections = connector_info.connections; - const connector_elem = connector_info.connector; - if (connections[2]) { - if (connections[0]) { - connector_info.type = 'c'; // cross - return; - } - connector_info.type = 'line'; // vert line - return; + connector_info.type = ""; + for (let i = 0; i < 4; i++) { + connector_info.type += connector_info.connections[i] == 0 ? "0" : "1"; } - if (connections[3]) { // if down: - if (connections[0] && connections[1]) { - connector_info.type = 't'; // all 3 t - return; - } - connector_info.type = 'angle'; // elbow - if (connections[1]) { - connector_elem.classList.add("rotate-180"); - } - else { - connector_elem.classList.add("rotate-270"); - } - return; - } - connector_info.type = 'line'; // horiz line - connector_elem.classList.add("rotate-90"); } // draw the connector onto the screen @@ -991,8 +969,13 @@ function atree_set_edge(atree_connectors_map, parent, child, state) { let connector_img_elem = document.createElement("img"); connector_img_elem.style = "width: 100%; height: 100%;"; const ctype = connector_info.type; - if (ctype === 't' || ctype === 'c') { - // c, t + let num_1s = 0; + for (let i = 0; i < 4; i++) { + if (ctype.charAt(i) == "1") { + num_1s++; + } + } + if (num_1s > 2) { // t branch or 4-way const [connector_row, connector_col] = connector_label.split(',').map(x => parseInt(x)); if (connector_row === parent_row) { @@ -1008,67 +991,31 @@ function atree_set_edge(atree_connectors_map, parent, child, state) { highlight_state[child_side_idx] += state_delta; } - let render_state = highlight_state.map(x => (x > 0 ? 1 : 0)); + // let render_state = highlight_state.map(x => (x > 0 ? 1 : 0)); - let connector_img = atree_parse_connector(render_state, ctype); - connector_img_elem.src = connector_img.img - connector_elem.className = ""; - connector_elem.classList.add("rotate-" + connector_img.rotate); + // let connector_img = atree_parse_connector(render_state, ctype); + // connector_img_elem.src = connector_img.img + // connector_elem.className = ""; + // connector_elem.classList.add("rotate-" + connector_img.rotate); + let render = ""; + for (let i = 0; i < 4; i++) { + render += highlight_state[i] === 0 ? "0" : "1"; + } + connector_img_elem.src = "../media/atree/connect_" + ctype + "_" + render + ".png" connector_elem.replaceChildren(connector_img_elem); + console.log(connector_img_elem.src) continue; } // lol bad overloading, [0] is just the whole state highlight_state[0] += state_delta; if (highlight_state[0] > 0) { - connector_img_elem.src = '../media/atree/highlight_'+ctype+'.png'; + connector_img_elem.src = '../media/atree/connect_' + ctype + '_1.png'; connector_elem.replaceChildren(connector_img_elem); } else { connector_img_elem.src = '../media/atree/connect_'+ctype+'.png'; connector_elem.replaceChildren(connector_img_elem); } + console.log(connector_img_elem.src) } } - -// parse a sequence of left, right, up, down to appropriate connector image -function atree_parse_connector(orient, type) { - // left, right, up, down - - let c_connector_dict = { - "1100": {attrib: "_2_l", rotate: 0}, - "1010": {attrib: "_2_a", rotate: 0}, - "1001": {attrib: "_2_a", rotate: 270}, - "0110": {attrib: "_2_a", rotate: 90}, - "0101": {attrib: "_2_a", rotate: 180}, - "0011": {attrib: "_2_l", rotate: 90}, - "1110": {attrib: "_3", rotate: 0}, - "1101": {attrib: "_3", rotate: 180}, - "1011": {attrib: "_3", rotate: 270}, - "0111": {attrib: "_3", rotate: 90}, - "1111": {attrib: "", rotate: 0} - }; - - let t_connector_dict = { - "1100": {attrib: "_2_l", rotate: 0}, - "1001": {attrib: "_2_a", rotate: "flip"}, - "0101": {attrib: "_2_a", rotate: 0}, - "1101": {attrib: "_3", rotate: 0} - }; - - let res = ""; - for (let i of orient) { - res += i; - } - if (res === "0000") { - return {img: "../media/atree/connect_" + type + ".png", rotate: 0}; - } - - let ret; - if (type == "c") { - ret = c_connector_dict[res]; - } else { - ret = t_connector_dict[res]; - }; - ret.img = "../media/atree/highlight_" + type + ret.attrib + ".png"; - return ret; -}; diff --git a/media/atree/connect_line.png b/media/atree/connect_0011.png similarity index 100% rename from media/atree/connect_line.png rename to media/atree/connect_0011.png diff --git a/media/atree/highlight_line.png b/media/atree/connect_0011_1.png similarity index 56% rename from media/atree/highlight_line.png rename to media/atree/connect_0011_1.png index 43dfd7bcc8d77a1d3019185708ff17c84118203f..07918d42ac91c620f0c6d41d4075e5d239836058 100644 GIT binary patch delta 1764 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 F6#SUxB{Tp4 diff --git a/media/atree/connect_0101.png b/media/atree/connect_0101.png new file mode 100644 index 0000000000000000000000000000000000000000..46c28e71140dd3f19cb5b850637cac6a976c9410 GIT binary patch literal 183 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvp#Yx{*Z=?j1DOs^US?(%x_Snx zs_GLiUK0cgF_i@Q1v4;|O+IS@uoGu_=0ijEGO0D8S6jDxYnLeoc`p6 cNc;}QgfqNP>FVdQ&MBb@0HCBkH2?qr literal 0 HcmV?d00001 diff --git a/media/atree/connect_0101_1.png b/media/atree/connect_0101_1.png new file mode 100644 index 0000000000000000000000000000000000000000..eeb0dfba436c33bdb002c96b3833e18ce90d0f99 GIT binary patch literal 5471 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 Kx-+ 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 NSnl4;qPe`d{{TNu&WQj3 literal 0 HcmV?d00001 diff --git a/media/atree/connect_0111_0101.png b/media/atree/connect_0111_0101.png new file mode 100644 index 0000000000000000000000000000000000000000..3dd0db9fb798ad1b75cd90c3324335ef9c917809 GIT binary patch literal 5633 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 literal 0 HcmV?d00001 diff --git a/media/atree/connect_0111_0110.png b/media/atree/connect_0111_0110.png new file mode 100644 index 0000000000000000000000000000000000000000..671ad6ed3d5e36b647d16b26404012cc2ced876b GIT binary patch literal 5699 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 xY-XJ~_oUDrB#u?aY;b zUZ?os{+2BC`wz&0)s%Y2hdG&f(aOuj>a8xe7T2iDR!YqC%d2u`x{Pg%(_8iE*!XZ@ zPtzZMMw+FwZf?Q-PStUq@Nk|nW9c01^AW9~Q!eh&%3EpHqc>w#hOo-kO$a*ly@!21 z)!8%_?0uec#sx3R;9D z#i9o#^x_WZ1ATKKk;nl%aPkN+cqw4 zjT#tQJmApZo-j8#J9EFHeL@Ckbk#b?Ge4RXh(2AE=S(|jG!lNNd|xHn7uBWj28jGlPjf#X{wo?g=7$c2SX&+eL6MPs)2U#75~et)5|$oP-su3gEqHQE+y`ELx;8?e8X z`VrL~*H5auQI6D`*MLU8onO1h<6ut0MaLK2@x!+afwzFW;ROTX?T^%r<|DU1#4eqT zM|j!f7lLOi4CU|5pGE>${nQBc>Zi+xxSWW?h5t z(cQ0G@2eJcx@-1v|E-&g zUfx1}>AY?tyzDL?2l ze*v!~eQyJ9bbdD>AzfZhE?sRDKU(rZ?D4&}rO&K$qcNB=<3(Z?Q|Q-_|^$tP}}X1m_G zH6XR(?ZxdDn$Pgl_)P|qyP169&{S*OW%gNb#_dum2->j?1V>0mN}RrhY-Cf`P5Y!I$;?;OXA`?d_r!Y z>+i4$=}0N8Bde4tD8=d?S2t^Kpw_9x^~_8&7G%-1@PD(|Sk>#V!e<&hdRbt3_4M#{Y~Cza#dr3- zk|X-MuM}UsI8r2fXrx|svQQ&ed--hf(q5;st7gq%W|So(Z563*m$tXGGD>znF=Kk$JLiN<#n(>&>`=#1v zC)ENtzr~g+x5cDA90*A@3=-(q)eVP?&KJ~AQ?q%Vwt$kByU$~Z+{@rGHwi+lI#ymE zvp%?=FR$5S_eb?apm&1d@_nV1B6XP&vPvJhEZdW1nfQ{fl4^lrjS1Oaw zH3L|D251(=6+jPK7|hZpN&qm|gJJ{&4Ce5xkS|X+BM}^y71EdJhH(?nzz~jev=H=) zcK2pRuV+$NNE>Sv%P1-Yzy-wsB8nTz6H%kAkTP5lt;|oCq z!Hi&rK{-TmB5+7+6@;ab#in}NJAQ_MMpnoWu~E5P3uIBWO=h#19uTL5B#CCpP>Zg2nu5F9;Wg z%FniI+}x=4d}g>bJi5IVQtF?|;xjocs_Yg^VNfu5qB)9!$C#rCL_7;cCW1t0 z$ig!yc!0?wlfHwZ^F(5R#{{KN5V#o!!XaVVL-*70mC9QF;KWN zC>E3I$QN<}XgN7tAQ(goc)_v>DdE(m9&{@t&TPu7OyUs=h}n<pdscv zeLjoBmi#Ym>GnZbPA$4KM+Eto$V5|n$_ose8chvDIkL@!K*+WQ6<|)KAOa#lmMl&P zYif!a0`P)CsDFGe*e`OZLAPLLBGx1X-eMJ}X z+2Tk*2rdnVc!aou3RK1w!ua!2nfw?{WC$o-2Z%C=Bh)v_C`k0@WYN-&@g-YJ^ndYT zDO32a#XxpbGN^Syoe=%C6@KOmiuK?8d|rot(**+Y%gImi`-`q$bo~?qKc)Pux_;61 zQw;o+@~`UpztN@g?Jx!Mpf{jM=%_Re{dhNY%u-~yIN8G{rQf`!qv?=DS>U`%1cRw+ zOD{MqD|2ad~=p7+eo z{v>yHZFh`BxhmX}BqU{as&8AAIKAsiB@z>XcxaG^tkA5kSkdgBCP9X5 zvpuoB7}g4#j@a3&N!I&QPZhoprl!NFPB=bxYm;ww?cy$nM>`UjdOIgDMuD`y5g)S! zPd6iPZ&x@xEHAdOHPYKvpeY9%G0oi~QZjA7UovQ^Z@&&@i}^4FFHMp^Y?JO!%Fk&! z8KVWK9=P&=70rYP;%+`KHT1Yp<+^9$PJ2sV>?^qN0h`3if4l~w2u62sw=c5`iu(_H CSif}u literal 0 HcmV?d00001 diff --git a/media/atree/connect_1001.png b/media/atree/connect_1001.png new file mode 100644 index 0000000000000000000000000000000000000000..257b7ca9ce15183f64ac4b051bb0defb07d24594 GIT binary patch literal 184 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvp#Yx{*Z=?j1DOs^US?(%x_Snx zs_GLiUK0cgF_i@Q1v4;|O+IS@<$vnT)QsghH>k~Dh~Zb1_7=`ufiLeHB5yo_?(4R_^g+0RDWm|82Cb` dPhnmG)3iLE@4hN>=0M{aJYD@<);T3K0RZFLI_3ZX literal 0 HcmV?d00001 diff --git a/media/atree/connect_1001_1.png b/media/atree/connect_1001_1.png new file mode 100644 index 0000000000000000000000000000000000000000..592af8952700c7cd760a8f5ec54ae3bf67754d74 GIT binary patch literal 5526 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 diff --git a/media/atree/connect_1011.png b/media/atree/connect_1011.png new file mode 100644 index 0000000000000000000000000000000000000000..8202ddec7b2bbdefeb768465169ded51e7bf19a4 GIT binary patch literal 202 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvp#Yx{*Z=?j1DOs^US?(%x_Snx zs_GLiUK0cgF_i@Q1v4;|O+IS@uP~nSk^Qyc0ZA#2E~!6XTe~G+6tX(>U)DVkIiF|c wDyIDki^^Lr*-2*2kI~9y-N149^TuL%ks6VMyk0UdfEF@%y85}Sb4q9e04+I1>;M1& literal 0 HcmV?d00001 diff --git a/media/atree/connect_1011_0011.png b/media/atree/connect_1011_0011.png new file mode 100644 index 0000000000000000000000000000000000000000..7e61395e0bf8ec53f9245013d014a07a67a459e8 GIT binary patch literal 5739 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 literal 0 HcmV?d00001 diff --git a/media/atree/connect_1011_1001.png b/media/atree/connect_1011_1001.png new file mode 100644 index 0000000000000000000000000000000000000000..413a32348b73de20fb162273d8c85a18322e5bee GIT binary patch literal 5694 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 Bzjput literal 0 HcmV?d00001 diff --git a/media/atree/connect_1011_1010.png b/media/atree/connect_1011_1010.png new file mode 100644 index 0000000000000000000000000000000000000000..07b5afb9d3c4c224b068bc38ef5e41245c62c6ad GIT binary patch literal 5654 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 KT8(RX%6|ZJpRd;d literal 0 HcmV?d00001 diff --git a/media/atree/connect_1011_1011.png b/media/atree/connect_1011_1011.png new file mode 100644 index 0000000000000000000000000000000000000000..4d351c76a3b7cb80fbf79a173c7007811ad56088 GIT binary patch literal 5697 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 literal 0 HcmV?d00001 diff --git a/media/atree/connect_1100.png b/media/atree/connect_1100.png new file mode 100644 index 0000000000000000000000000000000000000000..779aa18c14eeabd9d78dd4d5899bded4d453e607 GIT binary patch literal 184 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvp#Yx{*Z=?j1DOs^US?(%x_Snx zs_GLiUK0cgF_i@Q1v4;|O+IS@J~7zQa)CBsb!8A&1uP|G9;Qf3_Lh^P!z zK~WJdK09({A}q;yD|48Cl2LGZM30V`&5?~x^(wNyrBm8=cpL$l7uvtM~4?5!o-n$&a;4T53z0 z>23BZQc-FtKasDCH)56)W?bqkOC3s}?Q15GM%*&2<-+T@YrIZUkDE4vvn9>g?oor( z@T9e~z4^q$D&Dz-rd9JoGxJ_LPNpBxh!43zkt zx;I}IZ|s~{tz2jP-Hkf8E{l83lQFvGT6#{jOiLc5a_jP%jzzoI`WEW$+V%3fTSc@D z#C=~#-<;Xj5dPBj$#W^uFsb=!wL1-v(&sz!4tf|?mD>9ETO9M>y?e25_OX2l zvv(&RJedPPS93ikg3D4DZ@PKv2M_8={5WjceE5mrw8DYqCD}zmt*1h;<#btB$PZm1 zo5z2q(r_1cb52+Ob_ZSDRMF4hnHc*RK~_*}<-->)j%fE`pWoP+l0oWzcFlkJP_ttv z=aBGqVKOZwdeEUI=xgC$o+Uz`FT{TUJ!O}KaTQUWucP9UoNB)6ν!U%}7bPu@Vw zw=iy7YhAn{>`r20iJ;;3##P+8j}p%vLszU@;2R;qud>!oiZ&ZA(pRJ*J(H^Ae%f3y zk>>oSxb;NA$br_{7cb}Wv6V+7F;M^`KE|NJgw!@K?$*h>Ju0qtuP|=Tr1fi8o9^*@ zbua5K{dr@5X6@Dp*+|{x=2E}e&7n)iTX8AZaJ@#Q!!=ez4NJe44P{>w7C1-(d%XX; z#@o|EN3Jw!ZtR=2y|wpfyiW5`W=L=CXtx!9rRDK7t=~-sS&`M3-46GgZaiG(JIcpp zHZf^0jmZrz4dV~hiaq^H$7up)~`+u zweO&L`utLIeBIrycxwAjld(fx3F+x}W!B*`?gFD>l9$Uhfz7zgPZ_wE8AjZ*=0(l; zBS_fg^jT+^#S5QkQBDm_R2^=#?09^Cx%+90jlb6fD#H@|L)!VG@;>-r@FV-$Q<0bB z&JPAkF4pKCXk<5Jb_VMAJi}UtAB|aJtCy%_YablU z(04eZ0I_ytMP~L2zCra)+c1UB!|?`qmSwz&HN~J@kQ#8Jw(|56de~!zPi(z7*t_r*TE!Z06?!nq_EFMT zrt>26gB%l+JA%Ty8Xk1GhIeEiuOb+h>FUQ>ot%qkt07exCf+kiJ(ibOn4bUYYkIg@ zzg;u=@}IRxMenS2=dK5wN(JIBN33~WF9Gz$$q zV|0FD<>Yoj&uNP*Z|8*a?BY((Zrz@HcOX1xNtnc@s%j+sxxJ)Xdyea1?qXu@kv%j= ztx>Lu8V!{jsmiOj^N;kaW?iM1?-9o*QNk{}-yXIf9T^_!sdsw%W)k8}m+lc+-98SU zQBgebEDEM>AhENRI!eH?MIg|--c_K1w^in+x%43sZo1Ca9 zs)PcB^SooEfPai{04s*iBC=twYYbhKBoIId$Qe+jP#}_#lw_C&mjphm#Yh-bVY_P#gk>K*2qfyeJH8jUm)U%I1*h?w->S;D`(hm&+w2BvPSJAQV`HSjt7B zi9{k2g+XF4aL@uSix$ZlO1Mb2L=7>8;SR`HQl3Q46N{i~Oa@cDO-_cvKt1$bd_oD8 z`W{{+n`Qyz1F2+4kZ1%7DHI}SddTD+Q6R{4K>z3=3jmLFBpr~6w@F!mM-(8EFPRC! zX1({9Y?BH!>9AQyKmZ6qQyDlb`lBhme5kbd9%>4>JfTG61(N-drJTq4K-NdGsWqB( zW(ESfzsLQ^`d#iCW6+99CAo`P+tlItxRYV(`AKXsi^nEu9$9ES27@QC-~hv!1;-Hy zPH-XtM})J9L==aJWw2OS;tVJskxb4Iu>ds`2#(-^ICv)x6XQg{!7(@v7LMbvad0LU zjf3NG90HTWViP%N<_riwDG#hlhG1q?YA7}cg(b29lrs|rXJhdo0LvK-C!(CNa2A7r z!Jsezn+>ouP;3^-Q!EuSz~$r#8C(D<5pgvNHQ^*TnhzO&4lBa3?`g_#Sq~HXCem0 zLSs-^0`_BcnV2J2Fr;FcV;fI$gKm`5+Qh={Y8RxZLfUjA4%rCv%A#c^+g4*Id zP%>NM{gn&?F|tr!vmpBqT7yD;xewJt|B?P23p?{iyU;_R=%$amTR?Er(|ojHBg!)6 zZQ>2N%4%7d#PEXn{0q9wJh0#a&doV`oMq0noI-h=y3a-Nsz^^fw%XvVSx-Y=Y*5yYHLDV#2Cx*9h(5Pv3vLMG!Q>!5 M9=`5n>%tQM1Lq7>p8x;= literal 0 HcmV?d00001 diff --git a/media/atree/connect_t.png b/media/atree/connect_1101.png similarity index 100% rename from media/atree/connect_t.png rename to media/atree/connect_1101.png diff --git a/media/atree/highlight_t_2_a.png b/media/atree/connect_1101_0101.png similarity index 56% rename from media/atree/highlight_t_2_a.png rename to media/atree/connect_1101_0101.png index 338c2e242216e310332659dd557795c36d9e3fca..5d9e9927fe93c38d2c6c41141555c4ab1f660e5c 100644 GIT binary patch delta 1857 zcmV-H2fp}&EP^bMBmq{DB`F1w5E9D)ky9amVxm+;t+rYZJf)RJ9Su9Kr=Mj$%2}Qd z-Bakl8Bfm%!Vsh8t84XM{}|6t0aw-0k{3ZX?}_ntqLo{|y%Tir%%M@V{T9@2K}^>~ zz6JEltfMy5R};p%YJXT_*Dpm;?5)}#`U>y4U>|sOapnUhGhGUB{3vlpLs4cdI-*2> zo7hk?=UW&Y@|mBWPlHA~R4tz_dV|Wdl|LU(@6jrBFX4AiuFv|@@s#D=1V8to*PV;q zEqXgX%b}M>@4O$sz1{X{Gpy*P!qxRQ>S4;+!n%PiVrxrKtwLr6hYWSR4X=UK6IAeH z9s}>pEfe6{xn$2h@4U`><_Q%Gtwf4{2GJxw2aS~)O%D7@ym^yyV+W4J^Mt)HJ$1?F zw(Xed+|97FXDp=*VL^d!zv;Ul>>WoT=fj@9f?hcNfkO^Aa+FvGMDo6!DyM@V@B1fk zWgsZwcoWx5Xd6rP?8FB1vW;pH9paNE+ruhCyXPQ0SV!XGiN}k1FTX6{Ly0IP#2aWB2`pO zn)J%GRH?OUjiA_-wImg-s%qM_8(T54YHDW9dZWe&n$l|1X05f}v1fYd{c@EigMQmqLMDV0JXZ zsStva5}0`o#DHK~nPle&c8M-T1G)c%Thj6dH~P28rGW06$bH1^Gt@kPuAzA%cAdg- z>cKdDSkuYyhr8-yoxYm*Zv9KpFG2rvLE9o7M{#5L-oC*k8Dz2dxAsjkz>j^@xD%9OjMrFuo+ zn{L-3dO{DGpF7EbJRsMYF7bG>$$BOs$Sf!i&`9 z_|mWoCg6lI{i>zo>y^_~^|o7seb^yPRBf9{adCvbHvp%tO-F%+gI6D`hVDl|3J*df zV(+^n_tdcu9v}v?&yz{PlfiB7X1+|0jmyXp-7k9fW7#*D9W)*w@!kAuiaWH*!MvcV zBZ-jNJ3vK_bEsZ_2rf`JYR3)J+a{>F?6Mm6#w-$6vDq6gU|e@zAUq+zz&Z>J(80mv zq8psCL$3YAvg2FO-u%H-Q2Ybe)7PZ`gzEvehoNWl&60GlaU2KYsBpge0ki`sl!}vh z8t9jSrXZ>W#S6M7s{=adp8Qr@+k{ykY51bSd4RuSX8K!y%Dy<{Yi{S|E+e&D*<}u% z=^T|t&lsERCyY2}fmg@+iho2Q)o4UAYkeMTKlqSdI5YM-LtZq#9dFYM>#i6XGykkt zR|K7i126(d#B69`@N%?@!-P}`G}1jY{u%1y4jp8z5`i| zOWEaz`dn)nKQl1>gq!G>pr0g&k>|GbCtfOR2MhA4T9bqYBn=|%AmWgrI$01EagPeENGD=qF25=UUJ*bLA(}%HGxcOS}bq^ok@1i`*yYA01pcG67_(bA) zrW+RV2J!5srE}gV4zseP5T6rI7<576N3P2*zi}=(Ebz>*kxj>m!^C2#i{&n6WkV&N zA(L4KC?}M5jT94UI*)nyM;w2OTr#;TVB}ap4JstZ5B>+gdutY_r`)7q43nq^93_2{ z-sotNBVceFxVY|U@*Z%x0}Mauk|8;gpO#Q80`F(^O?e=b=>{YSNK$f^ZWh_3vlRzR z0)J#SW@I&EIAtw3IA&rkG-PHqEn+uiGc9B@VrDR8Vlrf7VP+xMU`L~mntZIj;#4|I3) delta 1904 zcmV-$2aouIEQ2hNBmq~EB`F0F2#Mtgky9amDnzNWXzQ&Vcxtbm3=KW5$Idbz^(@ba z?kV)&jHl-WVW^-kS6AD;{xP1P0RYux^ab8?#y;@sD!CjeOQB1F59BwR8Vi^$0`*tdy4t~7v zpTM;MK@Km+5$SO3xI_%je?@|F0$s3>QD0{;i{Ap^B5ci2CKn(8)NlBKIJ+o0MmY1hrW zZP~i}wkK*gtRLQQpq6jc=tL?O$`dt=iabQ*2qzqv0WjPm8Hh_j076q>c4)4Z0=dBK z=!8?j1SL5z^Bjl)!MZZ>&JXMoU5Ey9{|UDw^$l+HZ;?v@-8Yf@h}&m>sCisN^F-`A zh2hkr;PhdQk>U?`)yF!0HSyj0m!MyQ{^x?WMmkv5#(|0S&6XSbY0Vx3rP(?C?Afk} zlubP&=m_UGJyx8^J*b6T$MJV$BjUJ2SY~sc6`7&<-qA-k$*(=eq4mfy`J8xPr>`ci ztz#E72oe~&8bWbJdV-yQ`80thbYw)O$k@VsXiCFFRiCzoaUJ4yBa7)e2ja~bz6}X3 zv@?WTwmr%&MP&_MRk|n6ymauyUTf|-%Q@4K{P5`Y9+ZtQk-o065S}-3=Phij&03o` z1im>EL3Ulu%aCQ4UC4))DW4sf^rKoPg6vN4u}pS=(qN%&Toqk^v(PwfRG8WvmxNbt z%kiaR7fiqjWBOII;p>&t6!E@$hke)~Ocd$6kl^A7dv5?vTf2-33rATtRtw#afD|5t zMpWFkA@`KAk1{|EWS=LKf+wT&xx4yOJ~l2RM|8jFX~)uUFgs{GK;pak*HkfRm4kUf zRYwxR(+r>@$2mlQE(8~-8@1zxvAzjvF1@UVy)lb~m33Oj1&r&?D}*QH7g&dZ0XjIC zTxEkZdhoR$Yj%7K+N(d93W|T=dit95pKv|E_AvBpzFCs)HICyzB`TaRJAifog;H=5 zPXqljPz6Ngpm;@Bc^ROC?#XYprB9gkk%liCoCo+TW~RS?rRSjN~ae!_@z7I+!fH~b?CsY)Y~S+#kr{oq4-;mp|U40+M`cDzk5th-`l%>1)n zTM=|34!{T;5!E5JfS02;944enppopE@z0QrJ9LotMg-bWZ`{{hdu>@cfH-PslJv5~ zmK5h7>T|6c{mj7h6Kqf;_jUKLPd`YY>%Qhp*po7D&ixXuvF(pB zAg~Lx8n*p?Y}>69!2b+fX&ry93CwXNc zWiw%9H7zt{Gc_$VG%ztOVP!KnEipG?G&wnAV>4l5VIm43ARu^ca7|4*Np5p=VQyn( zNkly&cx`YlX=!9SH8*B7Ffle^EjTq|Wi2!`H!>|bVq#$}G&nM4HDfk0Vq!IAA_^cN zAb4$XO-(vaa%pF2ZeeUhZ)0_BlimprBsOGZFf%bSI4w9ZVK6N;VPrKeIX7lvEn+lc zHeq9CW-wwiVUrOGUkoxaHZd?bG&VCgHaU}g3UCWBH&ih&Iy5*sGB=a=3L^_JH&ih& zIy5*sGB=YY3yLH)W;SGHWnwZdH#IpkEi^JUGA&{>Wn?X6W-&81Ibk+2G&D4m(+f-s qFgH{&Fgi3iIx;x3Dhy}{1e*REzLS;|G6)9|FdX%r6>YQ76fyxm1zH9G diff --git a/media/atree/connect_1101_1001.png b/media/atree/connect_1101_1001.png new file mode 100644 index 0000000000000000000000000000000000000000..ef0802373c22aad007cee77bccfbbe297b3000f3 GIT binary patch literal 5722 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 N6_r|?h_eh8Kmk_!cRv6C diff --git a/media/atree/highlight_t_3.png b/media/atree/connect_1101_1101.png similarity index 63% rename from media/atree/highlight_t_3.png rename to media/atree/connect_1101_1101.png index c9ba3e4bfbeee0fba3658d207bfc12c6c5194ab5..6e03f4942af5f017a64859e4de7245677af453da 100644 GIT binary patch delta 1393 zcmV-%1&;deEbc6j?F|Ut5sMCgqfbdUoi1jP`DH!0R?Klki!09E_Sm6frWr`kA?lPi zQIk-mo*cjIcU&Z?rU4u&^$mMYbn6ng*n0G^r70wjh@}+4%tPSYvz!4J0e`P-j@h9x zXL95mv!fESf(c5pV>Y5A1_bkr#4A3q3v?pt$o&y+LGlxB^t;Ffhwhumy~ph%)P`?E zeIs^ep*!_R$UdwwQv6}Bdf$f6CcfMLF#2KiKWDVmkArD0B#a;5Y!1UX%wC<4itXup zWGkam79EjS5{`_#jw_+c%zrl47^s5_=L;}Kt~ZrnT082*n98zH1(5CK!LJ~(69mgK z8Rd+T(PN=n=xUpV4zQ@$GwfKQt$C@7v|snAx$1tVwLS6cHe8)kJalcHteKx*+UN@v zD_NU;Rmsjes$?z`mJX=BI##UNc;*st%HdWs$4yTs)rnKvgUX9hynhl(Dm8PXIaOF| z?SQ``jI1?>GRw$tEw;I-sO_wB@gNTPHvE-PWBs!RehS(wrJVu}xMPG4+cp_q z9a5n?udG9qSsEzV?kSZPrxjFv8L0E64zM_5qSd}QqZhvB%k8-_%68>c6n2-c8UlBk2E6W2BQO1hbXzqp z9KSiPxnypy;Y=Q|UZf5j0B~kx|JetV7k1yPvwu2qyrw>H!!toTPA}M-hj%{uLU=I3 z0}Y&jxIub(E`PKdU?TF*q_=`ZIvi3YILu7HN{IYIxEk^-=oHa6}#U3JCZTlI&gH zO&9)J{(^p|4(?)qmQj?`T~;5X@H~7Od0j`wBJJG{ol8Umm5IzI*NN)xffQZ8BZqaE z^MXnUMj1{PeENGD=qF25=UUJ*bLA(}%HGxcO< zF$>S}bq^ok@1i`*yYA01pcG67_(bA)rW+RV2J!5srE}gV4zseP5T6rI7<576N3P2* zzi}=(Ebz>*kxj>m!^C2#i{&n6WkV&NA(PDpC<&ByjT94UI*)mi{stKZr`)7q43iuO z93_2{-sotNBVceFxVY|U@*Z%x0}Mauk|8;gpO#Q80`F(^O?e=bT?ZrxNK$f^ZWh_3 zvxx^w0wiKGGdX5BH8w3}WM*P5G%_?WEnze_I4vrH#A~pWjT}h2_GakIAUcn zG&M6VGBPK-|V`VWkF=A#oWjJJ$I|?TxI5smiVmV_rEn_)0H!UmfClSm9q3o$ZOF)}(bI65#hv!4uT2n0|*zkHJm6*3466C4ATAs|_^MHMLliP>J< delta 1393 zcmV-%1&;deEbc6j?F`8I#zHJYpV1nghe?t8Wj-WU%yC4EE6&~a*r8&k83h3?cNA^Wh#Nb!fg>U|qNoA_?~!{~?6|D4fMKMtn3kT8CHvpEdoFne`EDz>NZ zk*$nMS#(5RNjNg{IEP7o}| zWRx>TMvsMRp{s2cI>4f0&#+^Kw&tZS(th2e=BoRd*7n4&+i-PG@zAw(vSxmMX`?Sx ztYmHWRV6#?sFJx%SURBg>R7R66$LiB|jKj9&PfFSqB$DBG1&QP^EZx87%! zh5|lW?-JU{4&X=A%kke@f*MB|b?vOnb?@roe(0>Y+Teo#fd%AhIKL97EfUh6g=3yC8Svh+bJRd@q{3ANRR2;eL0MC8}PbAjlA?1(rwka zaQx=D=90O+hBJAWKB;s)vExqr}VfQiUIlimsv>2OGqlp9!72b`M#K3s&O@2NFh1GDH&IGk;`M#cUgUm!t?NDMBCN)abEXf2;WGpSC}YzRU;*b^njczdJds z*&7dO0F(FyBn?IEAmWgrI<+7w;wV*S}bq^ok?_xa5yYA01pcG67_(bA4rW+RV2Jy_MrE}gV4zseP5T6rA4Z0xlBiCh@ z-#C{X7IwuC<%;qjT94UI*)sk{stKZCf%f99FrUe z93_5|-sotNBOtU5TwHfFc@MbU0fwJ+$&eh$PfI8kf%h}|raUl{T?Zrxa4vGD8=`6O zvxx^w0wgdqW@TbHVKyycGdM9VG&eUjEjTqfWGy&lH#uWwWn(ijF)@?)2_Gb8Fga#o zW;ih|Hf1$qEi^GPFfC$YW@9a5HZe71GiEYoWjQmGI|?TxH8U_`V`64yEnzfbW-T-~ zVPh>}VKg)?V=-knGBh`3V=-YelZFak3^Fk`GB-3gHZnOgGL!KNa0@UuR536*H8DCd zGm~r!BMUG$R536*H8DCdGn1MNj3Qw;Gh{R{Eiz_dGc7bTGdL|cG%;o^GBz?}W@0uq zWH>oylSm9q3otiSF)%tcF*-3cv!4uT2m}sCxuTN`6*3415i<@g2{-1mMHMLlZ1-?u diff --git a/media/atree/connect_1110.png b/media/atree/connect_1110.png new file mode 100644 index 0000000000000000000000000000000000000000..44d035201b1eea20d41bee90b1c15528fc23cf56 GIT binary patch literal 203 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvp#Yx{*Z=?j1DOs^US?(%x_Snx zs_GLiUK0cgF_i@Q1v4;|O+IS@x|ys-li$N uQy)f2xX$VA^_{~TIOp9Prm~kGm>8bV5#=fAXA%M0$l&Sf=d#Wzp$PzZ96k;J literal 0 HcmV?d00001 diff --git a/media/atree/connect_1110_0110.png b/media/atree/connect_1110_0110.png new file mode 100644 index 0000000000000000000000000000000000000000..bd964ed18a57b820c11d2a23e3a0700bea82fbe9 GIT binary patch literal 5645 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 literal 0 HcmV?d00001 diff --git a/media/atree/connect_1110_1010.png b/media/atree/connect_1110_1010.png new file mode 100644 index 0000000000000000000000000000000000000000..e994f4688946c5854f860c2ee510f205b6b03ded GIT binary patch literal 5585 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 lVPm=}3n(ntcKh!i`h2#8M+rC1O} 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 literal 0 HcmV?d00001 diff --git a/media/atree/connect_1110_1110.png b/media/atree/connect_1110_1110.png new file mode 100644 index 0000000000000000000000000000000000000000..5bba3dfeabdb79572a165524afbb258a15bb88fd GIT binary patch literal 5646 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 DU}~ey literal 0 HcmV?d00001 diff --git a/media/atree/connect_c.png b/media/atree/connect_1111.png similarity index 100% rename from media/atree/connect_c.png rename to media/atree/connect_1111.png diff --git a/media/atree/connect_1111_0011.png b/media/atree/connect_1111_0011.png new file mode 100644 index 0000000000000000000000000000000000000000..99da072068f50eab01e0dd39ade5ddc857d27fe2 GIT binary patch literal 5898 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 AF#rGn literal 0 HcmV?d00001 diff --git a/media/atree/connect_1111_0101.png b/media/atree/connect_1111_0101.png new file mode 100644 index 0000000000000000000000000000000000000000..14bb6b72506de5d80af76076768a8e05ef289e2a GIT binary patch literal 5754 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 literal 0 HcmV?d00001 diff --git a/media/atree/connect_1111_0110.png b/media/atree/connect_1111_0110.png new file mode 100644 index 0000000000000000000000000000000000000000..0b5efd79b58fd088a3c103e67a21e7084be2b919 GIT binary patch literal 5811 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 literal 0 HcmV?d00001 diff --git a/media/atree/connect_1111_1001.png b/media/atree/connect_1111_1001.png new file mode 100644 index 0000000000000000000000000000000000000000..992f522faa22b349c47263f5d152921aee6cb8eb GIT binary patch literal 5853 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 literal 0 HcmV?d00001 diff --git a/media/atree/highlight_c_2_a.png b/media/atree/connect_1111_1010.png similarity index 56% rename from media/atree/highlight_c_2_a.png rename to media/atree/connect_1111_1010.png index e7b98e80f6485e35505ff7b2fb7afdb66b6ee98c..b9a7e457e59a5f78002d30827d4fbbd845ff07cd 100644 GIT binary patch delta 1922 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 J9J4bOUjgJeU^f5& diff --git a/media/atree/connect_1111_1011.png b/media/atree/connect_1111_1011.png new file mode 100644 index 0000000000000000000000000000000000000000..38cf144798dc49e41419b930196c96e6c152d10e GIT binary patch literal 5937 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 literal 0 HcmV?d00001 diff --git a/media/atree/highlight_c_2_l.png b/media/atree/connect_1111_1100.png similarity index 56% rename from media/atree/highlight_c_2_l.png rename to media/atree/connect_1111_1100.png index b2d3f33c7275b8bdf7b1a090808d8a0596849251..399fa219c50792af9cc43800fc04c2359f546a0f 100644 GIT binary patch delta 1926 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 LQp_*2H5Fw6(xG{M diff --git a/media/atree/connect_1111_1101.png b/media/atree/connect_1111_1101.png new file mode 100644 index 0000000000000000000000000000000000000000..d40464e91ea5bb16adeac8d064f256d3de67d0ef GIT binary patch literal 5865 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 literal 0 HcmV?d00001 diff --git a/media/atree/highlight_c_3.png b/media/atree/connect_1111_1110.png similarity index 55% rename from media/atree/highlight_c_3.png rename to media/atree/connect_1111_1110.png index cfd6bf289797eb1da14a7ca302fc7087ad25cdcd..d17c4445ff5c04479b359a98fee85d2a1c728922 100644 GIT binary patch delta 1963 zcmV;c2UPgGEx0X^Bmwu4B_MxxBqt30XBAlj2!voc0>L@iL6)B@s@$>LJrB?1bE<5f zDk16WL5KCv-#h$;hYHtFSX%A1Mm(jLPKrT`*Q2LRv7GiibZ=q)VLd!H2um4#zNW3- z^l$6w!Qko?BYwxI&3j{f-00=z-<}xVCuf()$96O7H=|6~M!Fg3rB;8ey~%qO#=3fY z)1+Ph!JE=Piv4LWu%0o_$wVus9MR@XmjK!SDP+Y!&?XQ?Z!xC3ePafLyt32d>5yo< zsO2Tm2UH%T^m;u!qgCi8$xlYEkN)L)Nc^;sALr2flS{it^t7&**M<0GegEIv+CDl% z3oR9s$3psDc+u+p`u3&M-fp?~!2ypFGk|j+$t<%pm zA!4BwNH8Fpl+R+zLY-!I{EEM6ljNQ)H=sBV>?PAfmUNEoafWkR!^xIFN(s!;f&Ytd z`059Hdnlw7+rw6ni^z=)F&sH>K?X$9zKzPqz;EyKClh%J)Z`!G6Bu(zMOK-h*Rh+5dtoT|%pgL&eQ3i)mhm1D*&y6H*_uC&VHRhO)``qB+o+d1sAdDktw?Y{Ma+70Wc_Y0_{8#Ove zIiWmI!>Y&|i{$Bq9Www%p(G$K4uNMj$1Ju~3ORC)S?qs=s9=JS?3h_{#DHK~iFl_s z>;hegI&!~-TafYrH~LlNfT@5ywei*d z52N2tF$8V$S&WZf%unZi58rRyefadvCms`-2ytdUcu7!= zX9_$E@z(ykNABM0Z@~z3=!v-r2wF!}G#(e`3cS{se~loy`wM zmd<}V*4$mnVIDL&9KZ^CXKYLm?KOB6KnOE*Snn+7vv`cjC=CRI@^QX-7V+yS;v!<@ zTE@5=U*A_g4A3YLewFb915Z znIU|zhnvBy9=oiD%H(HEg;-q%Dv-%Qkh_0N#9dH*L0PJ8PJ4wdD~h->44-!YsG}ei zZCri1&6#X;@swo#ttX>}s%S2BPcv_3coKXDs4e!LvPwqPgckMWnx`>{JeTPlhl9!C z0L48&fKYLLro&gc(t8YjMlW_$Wf5kBD z@5RTr*eSlUN2nWfD*|%Sb0;VlKZb23`?B5FwgF5;OH=W-$xT z@pTU$-|wP4%e(H+F`yJo2KYqcd8Qi{@dokirloV2OK4R zlHTZOkt1Mm8@RacX!0I#xdRM8>5?HilAo4PECTOm^i6pnlZ*!>2uMx9xW;HS`GGjS5Ei`5{I4wD1FgPt`FfcP=Wn(olW?^BICkh`VH8W&0VPP~d zEjBbcH7ztTIAtwjVq`WgGB;x}Wi&ZvW;JDDlWGblBr-HPFk&(?WGyjdWHK!@G&DCY zIALOCEj2Y_WHdQ3V_`5eIg_;tUko-iGdDCbHZV6cFgTMS3vdfDGE^}#Ix;dkGBA^y z3nL3LGE^}#Ix;dkGBA_L3yLE%Wic@`IWjmcWidEqEi^VTVJ$diW@Ig7GGsV7WjSPJ xIAN1^3{49$GE^}#Ix;dkGBLBx3}^@h$D3(5lR6bL2n-Vz6`LA;g0plLM*;9Fj6eVY delta 2033 zcmVL@iL6)B@?5=cI*F1VApJP{< zmnS9{9!&k780g1+I$UL zz3JcP>A~P?6g_^&sLgv}d|c?|=HH$e-8*NO$oqCP>NlgDt_8Xo=%s&Fti8#56~?++ zd()&{|KN|(K8pQmEU=z2_Q@%&OgZA2bGih`{!bw*I&wWh2qN?uWSYw%rOP0%?DV)g zB-$=&c}esEl}C?W&xdEUO1eq%lacGAeK{Y9pBD0CpY(p`((Yb*n%B$gLVU8m|M#}G zkIv9SONFWHt<;+;rw4z!0am_s3lObF!JolG&fRf0c=d!USe$X-p42G;iA{x!ls2u? zPMQ$0q!kjdN-52h&twC3JI z`05?L`oi8G3PiCzYz4Vea$`dbN6w!h10u9hwt{Hy_vRm0hq{Fb|VlkNh z%LMrVok7TGuNWk;n*mIOtr@~l1_D5hGE=1}DG3n_*#MA2^pr~)K!BK&LC92cuE3@x z-x{w79n!=J(*g5HW7oT!T4nL7OIBNb>4vNA9Cq2f>z3Vi-}*r9hV|3^1=Q$9 zEghtsP#&mZR^*KZc{*Xo41lFj2#AYA0EbSFS!`5Fa^!y;v)B`&f)j*f$IQqP1A=8y z;!SVZg>)h6$o&>>LCOc*(yt;H9J((e_ZhcWsF|0cc@Vpz(2W{1q7O8h8h)r%pWE=Q zg|D`M82t{T-TWky*9KO8a?tOO!edyM+SJt=B79rfNp)3ObJ<#Z<$coc76$E1I^t@* z(lSFd!NGr5u(aP3q8#4B=#p&wlM?NLL&UGx#J3vDH@{5~!zb?O1nt3FJyWq98CKZL(r0sVtlk>zB})``+n(e!>4yX@tDX&h%@uf zOM+@VOE9!0l1;9QD;b`GqO!H`WYDtFLklD*3>$whmALV)T`cUV5x$|vLyL2q`=QuW z!jJX1M8?jX=JUtI&&2f|HVwNFC6DUYXeo(ilGO zN#d&6OtH1~z`G2aNa9!<)d`U4=1TQ=!Dt;_E2l zAY$d3M!y?h?^iwy@K7N9*ssXQ8-m@FFikUQ99RaXa9&Bd4q94Kw!~1VYPYfZ3Z2pC z=90c=hVa22ZU(b@?6MjvlkYJVVs#m)Kqh|!LGCUQcR}?9WvRBA_6l286mex3KJETd zM?osuIQnv%lWcVHlw|&{C!>X`XfAZ8nKv^$2|feV7W+zBC8KIWi+Xa+Qy)a0%XE&z z!Q^m&;+`KsD8Y1hBs%0o*~518s1r*W=YxSx&)nydIqQav1jTuIRX(A>QOfT}KZKJw z1q~@dtR=|=U?#{^DE4YPMV0AR! z@5RTr>%Qhp*po7D&iuW32OK4SlHTZOks~0q4P0DzGIO z`ldWElZgi;2yiZPrW>MZ@UyiCO9Fp1VK!l6H8M3VW;r=GEi^M^IW0LeFg7hPGc{#3 zIAk+4HDP8V3LqdLcx`Y^O*%<#b97;DV`WK1JtBB*a4uTiRARr)kZE#IZI!|(GXK8L>Y(#Hkb#0S>3J)YR zFk@sjHZ(LXWo2bKEi_{_I4w9gV`VKlWH2^nG-hTnGGb(tvI<`eGBGwZGBhwXGBGnX zlN}3i3otiSF)%tcGdeUflb8!53otiSF)%tcGdeUflg0~*BQP>JFf%e?H!U?YGBhnT zF*9K;VmCK6EoCz}F*!IfGB-74lXDDB3otiSF)%tcGdeUhv&#%<2n6^1)?Je~6*341 P5j8BXGtq>zaTP}az)Yv| diff --git a/media/atree/highlight_c.png b/media/atree/connect_1111_1111.png similarity index 55% rename from media/atree/highlight_c.png rename to media/atree/connect_1111_1111.png index 8b112b616a825f996633bffc54844688e6ea0630..e35fd6c738890cdd9cf79b1a2c514ca33c3201d9 100644 GIT binary patch delta 2013 zcmV<32O{|KE$}UnBmqK^B|`y_k!d)83!GiYh~6wD^LjAeKWODzU!E4acFwMmkM&xp zT?^%OK8V)>{WR;SP57+|!_HnGmdN=ZyeaZt?GN`1?Halnv|QElQs^Bj_b9%e56@_obcy6AC)c}wIUgc_Jw3?x zKI!ewMXphLKaVhxQ==#E`~O-hYugMfdZ}=Ay^MO8vPX~`*uuA#0M+Wj_$MsE`)arZ zQ9Tg~ddy?snz6+MxK=DtV~;D^?q{4(u_OzLF-U2qyeB1dYH4Q2ulN;L;@q-k0hV*a zUUIs1iF@02%&>P8?5q)@DPl2y4}ouA;kz%a<*5+kA-AufS4!?|sNu+Y3o#%P*X2~& z4t`wEKgTr#L2@s9iZnQOoJ$OfKbRnIpfdys{h5Q2^;!Tf!qx<3Vg>?0EoSgiJUAte z5snl9)S-IHB@G}DiIPIeRC2DsMv`xhS2%9bLCe1o|%51Z1(yZVQt;#Cev|BWUk`*JX#wOORFNE64 zVUNjc^tRJp#pcXIG(niV!`9=-1%#S6a(+N3d04#+PfjBz^&TNj^A+eO? z$T?<5OU`f!N|Ixy(GdfJ#bTm=6(87zbRz1={Sj_~%RAiC?;;l*x^E))5w};Ush6R- z5j(TcoqA+sA7pwG{GnET?89ddzT5v@=uZ|};wO=83t0Kdq5u3Y+_%-b&Tb;e@TFy? z-mS7tQ?q4xZTekIke#WI!=%+{s>mh;xCKq?tsu(brA#-@N?+7y4ICnWe#a-i)iB@u za={T^$(nW_nWZ7TJMN^#j>)WTwKf_F)7dIf?h%#NBKKxsdWtxhw#ka5jed6=chBm( z)4GOlA6j zl)-JpC4>Kr`nWpEGH3RhGzKspVtiQ5YCRGbYP8DG2_DC@QPDJz-LzD9APi~Xy0=l| zL!a_^x%==u@uJ`9<1xQ;qx-SVHwIDXK5VYW#a387IvxNEhG$HFPlzlVWCa+)4-M|y z(|J$2(+EKa=8tWT^9GI!4@XB#Vkx*3V`Eew?nzO{sPV{fX@9voF9P@H!@@9Bw}np+ zPi(8Rl&bJwnIj<;i&f2o;mtGfGirvs41(}7R)vU1M+_+H5KKo&G&HS&D=G}?9wD0{ zqDd!%WDp(J^HRfq*>I;P=%#OYwKgJMCCi9SpjTQ0v4Tnt!?uO4GVBtpFapR6zKC@C zje48)G{e8R2tK+-`%SpZ-y9iln#&Cw!U19t?IpK!EoVJ!c(e9f6o58BnZ$Y2f6sS~2c$jCLf}AX!xK z3StrOX{ZA!37^4-CZy?)Tiwcw!?HoRzC1>q&#})RAN+u?BJlBQ)d}M0-~-gLfG&01&jj*tss~PRig}9S z9MsE;9Dc=r1L3E6|8b4W4SVoTAY2ls5JoR61hnwueMmyky>I!UM?{ZgZcc>G%V`m_&!y1?Ise%j;X zUR(GdRqN8!uNe{ylW+zk4I=Fz;*g;_Sr8R*lvb0W20woiP&La)Ct_kQzbXb^5kL?j znnMyZ^<-u-3(xU&4$HEScU<~Me zvF(pBAg~Lx8n*p?Y}>69!2b+fX&ry93Cw+x-sotNBVceFxVY|U@*Z%x0}Mauk|8;g zpO#Q80`F(^O?e=63-qtKeQTfN^a03Hua<9sgF|4vMA?(<2Mq{FQgW7V7TKh;0SHS1 zBsDoVGB_|eGc7nZGcqkSHZm|RVPrOAEiyGTGBIRgF=IA0Ws`6UA0#p{GBz|hW??Nk zFl93>G&D0~En#IfIW06bHf1(rWHL8lH#n2C3MV8nWHc~2H)UomI5A;0Ei^JTIW1u_ zF=Z`gVmCH6FfwK{Wo2cP{t90VHZ?OgGc_|dI5jdklW7ZZ3o$ZOF)}(bFgi0eljI8{ z3o$ZOF)}(bFgi0elM)PyBxX4{G+{M2H7#OcHZUzTVlX%@I51%|Ei+^>G&D6cG-ftp vWs|@RObanGR53C-GB7$bHM18DX$S-SxxSNw6*3466BHw6mWr9Py%jV87*&T% delta 2013 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 From 4ae9655a3fde683f641d051d21e64f85be6357aa Mon Sep 17 00:00:00 2001 From: fin444 Date: Tue, 12 Jul 2022 14:09:09 -0700 Subject: [PATCH 4/7] final style touches --- css/sq2bs.css | 36 ------------------------------------ js/atree.js | 9 +++++++-- 2 files changed, 7 insertions(+), 38 deletions(-) diff --git a/css/sq2bs.css b/css/sq2bs.css index 7845a26..291a216 100644 --- a/css/sq2bs.css +++ b/css/sq2bs.css @@ -449,36 +449,6 @@ a:hover { border-color: #fff; } -/* atree connector rotations */ -.rotate-90 { - -webkit-transform: rotate(90deg); - -moz-transform: rotate(90deg); - -ms-transform: rotate(90deg); - -o-transform: rotate(90deg); - transform: rotate(90deg); -} - -.rotate-180 { - -webkit-transform: rotate(180deg); - -moz-transform: rotate(180deg); - -ms-transform: rotate(180deg); - -o-transform: rotate(180deg); - transform: rotate(180deg); -} - -.rotate-270 { - -webkit-transform: rotate(270deg); - -moz-transform: rotate(270deg); - -ms-transform: rotate(270deg); - -o-transform: rotate(270deg); - transform: rotate(270deg); -} - -.rotate-flip { - -webkit-transform: scaleX(-1); - transform: scaleX(-1); -} - .hide-scroll { @@ -489,12 +459,6 @@ a:hover { display: none; /* Safari and Chrome */ } -.atree-circle { - border-radius:50%; - -moz-border-radius:50%; - -webkit-border-radius:50%; -} - .hppeng{ color: #20c2b6; } diff --git a/js/atree.js b/js/atree.js index c53a7b2..d584f19 100644 --- a/js/atree.js +++ b/js/atree.js @@ -665,6 +665,12 @@ class AbilityTreeEnsureNodesNode extends ComputeNode { */ function render_AT(UI_elem, list_elem, tree) { console.log("constructing ability tree UI"); + + // increase padding, since images are larger than the space provided + UI_elem.style.paddingRight = "calc(var(--bs-gutter-x) * 1)"; + UI_elem.style.paddingLeft = "calc(var(--bs-gutter-x) * 1)"; + UI_elem.style.paddingTop = "calc(var(--bs-gutter-x) * .5)"; + // add in the "Active" title to atree let active_row = document.createElement("div"); active_row.classList.add("row", "item-title", "mx-auto", "justify-content-center"); @@ -799,7 +805,6 @@ function render_AT(UI_elem, list_elem, tree) { node_img.src = '../media/atree/'+icon+'.png'; node_img.style = "width: 200%; height: 200%; position: absolute; top: -50%; left: -50%; image-rendering: pixelated; z-index: 1;"; node_elem.appendChild(node_img); - node_elem.classList.add("atree-circle"); // create hitbox // this is necessary since images exceed the size of their square, but should only be interactible within that square @@ -857,7 +862,7 @@ function render_AT(UI_elem, list_elem, tree) { let tooltip = this.parentElement.children[this.parentElement.children.length - 1]; tooltip.style.top = "50px"; tooltip.style.left = (this.parentElement.parentElement.parentElement.getBoundingClientRect().left - this.getBoundingClientRect().left) + "px"; - tooltip.style.width = UI_elem.getBoundingClientRect().width * .95 + "px"; + tooltip.style.width = UI_elem.getBoundingClientRect().width * .9 + "px"; tooltip.style.display = "block"; }); From 89f699df74d8815c56693f6dba6d5a2997f8eeb6 Mon Sep 17 00:00:00 2001 From: fin444 Date: Tue, 12 Jul 2022 15:06:40 -0700 Subject: [PATCH 5/7] fix merge issues & update atree constants --- js/atree.js | 24 +++++++++++++----------- js/atree_constants.js | 24 ++++++++++++------------ js/atree_constants_min.js | 2 +- media/atree/highlight_t_2_a_f.png | Bin 5881 -> 0 bytes media/atree/node_4.png | Bin 5415 -> 0 bytes media/atree/node_4_blocked.png | Bin 5031 -> 0 bytes media/atree/node_highlight.png | Bin 23515 -> 0 bytes 7 files changed, 26 insertions(+), 24 deletions(-) delete mode 100644 media/atree/highlight_t_2_a_f.png delete mode 100644 media/atree/node_4.png delete mode 100644 media/atree/node_4_blocked.png delete mode 100644 media/atree/node_highlight.png diff --git a/js/atree.js b/js/atree.js index 98a0d19..11621d4 100644 --- a/js/atree.js +++ b/js/atree.js @@ -384,11 +384,11 @@ const atree_validate = new (class extends ComputeNode { const abil = node.ability; if (atree_state.get(abil.id).active) { atree_to_add.push([node, 'not reachable', false]); - atree_state.get(abil.id).img.src = '../media/atree/'+abil.display.icon+'.png'; + atree_state.get(abil.id).img.src = '../media/atree/' + abil.display.icon + '_selected.png'; } else { atree_not_present.push(abil.id); - atree_state.get(abil.id).img.src = '../media/atree/'+abil.display.icon+'_blocked.png'; + atree_state.get(abil.id).img.src = '../media/atree/' + abil.display.icon + '_blocked.png'; } } @@ -995,6 +995,8 @@ function render_AT(UI_elem, list_elem, tree) { node_img.style = "width: 200%; height: 200%; position: absolute; top: -50%; left: -50%; image-rendering: pixelated; z-index: 1;"; node_elem.appendChild(node_img); + node_wrap.img = node_img; + // create hitbox // this is necessary since images exceed the size of their square, but should only be interactible within that square let hitbox = document.createElement("div"); @@ -1109,11 +1111,15 @@ function atree_render_connection(atree_connectors_map) { // toggle the state of a node. function atree_set_state(node_wrapper, new_state) { + console.log(node_wrapper.elem.children[0]) if (new_state) { + console.log("on") node_wrapper.active = true; node_wrapper.elem.children[0].src = node_wrapper.elem.children[0].src.substring(0, node_wrapper.elem.children[0].src.length - 4) + "_selected.png"; + console.log(node_wrapper.elem.children[0].src) } else { + console.log("off") node_wrapper.active = false; node_wrapper.elem.children[0].src = node_wrapper.elem.children[0].src.substring(0, node_wrapper.elem.children[0].src.length - 13) + ".png"; } @@ -1184,19 +1190,16 @@ function atree_set_edge(atree_connectors_map, parent, child, state) { highlight_state[child_side_idx] += state_delta; } - // let render_state = highlight_state.map(x => (x > 0 ? 1 : 0)); - - // let connector_img = atree_parse_connector(render_state, ctype); - // connector_img_elem.src = connector_img.img - // connector_elem.className = ""; - // connector_elem.classList.add("rotate-" + connector_img.rotate); let render = ""; for (let i = 0; i < 4; i++) { render += highlight_state[i] === 0 ? "0" : "1"; } - connector_img_elem.src = "../media/atree/connect_" + ctype + "_" + render + ".png" + if (render == "0000") { + connector_img_elem.src = "../media/atree/connect_" + ctype + ".png"; + } else { + connector_img_elem.src = "../media/atree/connect_" + ctype + "_" + render + ".png"; + } connector_elem.replaceChildren(connector_img_elem); - console.log(connector_img_elem.src) continue; } // lol bad overloading, [0] is just the whole state @@ -1209,6 +1212,5 @@ function atree_set_edge(atree_connectors_map, parent, child, state) { connector_img_elem.src = '../media/atree/connect_'+ctype+'.png'; connector_elem.replaceChildren(connector_img_elem); } - console.log(connector_img_elem.src) } } diff --git a/js/atree_constants.js b/js/atree_constants.js index 330c27e..591d6b4 100644 --- a/js/atree_constants.js +++ b/js/atree_constants.js @@ -10,7 +10,7 @@ const atrees = { "display": { "row": 9, "col": 6, - "icon": "node_4" + "icon": "node_archer" }, "properties": { "charges": 2, @@ -51,7 +51,7 @@ const atrees = { "display": { "row": 7, "col": 4, - "icon": "node_4" + "icon": "node_archer" }, "properties": { "aoe": 0, @@ -76,7 +76,7 @@ const atrees = { "display": { "row": 0, "col": 4, - "icon": "node_4" + "icon": "node_archer" }, "properties": { "aoe": 4.5, @@ -227,7 +227,7 @@ const atrees = { "dependencies": [], "blockers": [], "cost": 1, - "display": { "row": 9, "col": 2, "icon": "node_4"}, + "display": { "row": 9, "col": 2, "icon": "node_archer"}, "properties": { "range": 16 }, "effects": [ { @@ -1990,7 +1990,7 @@ const atrees = { "display": { "row": 0, "col": 4, - "icon": "node_4" + "icon": "node_warrior" }, "properties": { "aoe": 4, @@ -2122,7 +2122,7 @@ const atrees = { "display": { "row": 6, "col": 4, - "icon": "node_4" + "icon": "node_warrior" }, "properties": {}, "effects": [{ @@ -2271,7 +2271,7 @@ const atrees = { "display": { "row": 8, "col": 2, - "icon": "node_4" + "icon": "node_warrior" }, "properties": { "aoe": 3, @@ -2334,7 +2334,7 @@ const atrees = { "display": { "row": 8, "col": 6, - "icon": "node_4" + "icon": "node_warrior" }, "properties": { "duration": 30, @@ -3998,7 +3998,7 @@ const atrees = { "display": { "row": 0, "col": 4, - "icon": "node_4" + "icon": "node_mage" }, "properties": { "aoe": 5, @@ -4032,7 +4032,7 @@ const atrees = { "display": { "row": 6, "col": 4, - "icon": "node_4" + "icon": "node_mage" }, "properties": { "range": 12 @@ -4053,7 +4053,7 @@ const atrees = { "dependencies": [], "blockers": [], "cost": 1, - "display": { "row": 8, "col": 2, "icon": "node_4"}, + "display": { "row": 8, "col": 2, "icon": "node_mage"}, "properties": { "aoe": 5 }, "effects": [ { @@ -4081,7 +4081,7 @@ const atrees = { "display": { "row": 8, "col": 6, - "icon": "node_4" + "icon": "node_mage" }, "properties": { "range": 18, diff --git a/js/atree_constants_min.js b/js/atree_constants_min.js index d12928a..8ebdbb7 100644 --- a/js/atree_constants_min.js +++ b/js/atree_constants_min.js @@ -1 +1 @@ -const atrees={"Archer":[{"display_name":"Arrow Shield","desc":"Create a shield around you that deal damage and knockback mobs when triggered. (2 Charges)","parents":[60,34],"dependencies":[],"blockers":[],"cost":1,"display":{"row":9,"col":6,"icon":"node_4"},"properties":{"charges":2,"duration":60,"aoe":5000},"effects":[{"type":"replace_spell","name":"Arrow Shield","cost":30,"base_spell":4,"display":"Total Damage","parts":[{"name":"Shield Damage","type":"damage","multipliers":[90,0,0,0,0,10]},{"name":"Total Damage","type":"total","hits":{"Shield Damage":2}}]}],"id":0},{"display_name":"Escape","desc":"Throw yourself backward to avoid danger. (Hold shift while escaping to cancel)","parents":[3],"dependencies":[],"blockers":[],"cost":1,"display":{"row":7,"col":4,"icon":"node_4"},"properties":{"aoe":0,"range":0},"effects":[{"type":"replace_spell","name":"Escape","cost":25,"base_spell":2,"display":"","parts":[]}],"id":1},{"display_name":"Arrow Bomb","desc":"Throw a long-range arrow that explodes and deal high damage in a large area. (Self-damage for 25% of your DPS)","parents":[],"dependencies":[],"blockers":[],"cost":1,"display":{"row":0,"col":4,"icon":"node_4"},"properties":{"aoe":4.5,"range":26},"effects":[{"type":"replace_spell","name":"Arrow Bomb","cost":50,"base_spell":3,"spell_type":"damage","display":"Total Damage","parts":[{"name":"Arrow Bomb","type":"damage","multipliers":[160,0,0,0,20,0]},{"name":"Total Damage","type":"total","hits":{"Arrow Bomb":1}}]}],"id":2},{"display_name":"Heart Shatter","desc":"If you hit a mob directly with Arrow Bomb, shatter its heart and deal bonus damage.","base_abil":2,"parents":[31],"dependencies":[],"blockers":[],"cost":1,"display":{"row":4,"col":4,"icon":"node_1"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":3,"target_part":"Heart Shatter","multipliers":[100,0,0,0,0,0]},{"type":"add_spell_prop","base_spell":3,"target_part":"Total Damage","hits":{"Heart Shatter":1}}],"id":3},{"display_name":"Fire Creep","desc":"Arrow Bomb will leak a trail of fire for 6s, Damaging enemies that walk into it every 0.4s.","base_abil":2,"parents":[68,39,5],"dependencies":[],"blockers":[],"cost":2,"display":{"row":16,"col":6,"icon":"node_1"},"properties":{"aoe":0.8,"duration":6},"effects":[{"type":"add_spell_prop","base_spell":3,"target_part":"Fire Creep","multipliers":[30,0,0,0,20,0]},{"type":"add_spell_prop","base_spell":3,"target_part":"Total Burn Damage","hits":{"Fire Creep":15}}],"id":4},{"display_name":"Bryophyte Roots","desc":"When you hit an enemy with Arrow Storm, create an area that slows them down and deals damage every 0.4s.","base_abil":7,"archetype":"Trapper","archetype_req":1,"parents":[4,35],"dependencies":[7],"blockers":[],"cost":2,"display":{"row":16,"col":8,"icon":"node_1"},"properties":{"aoe":2,"duration":5},"effects":[{"type":"add_spell_prop","base_spell":1,"target_part":"Bryophyte Roots","cost":0,"multipliers":[40,20,0,0,0,0]},{"type":"add_spell_prop","base_spell":1,"target_part":"Total Roots Damage","hits":{"Bryophyte Roots":12}}],"id":5},{"display_name":"Nimble String","desc":"Arrow Storm throw out +6 arrows per stream and shoot twice as fast.","base_abil":7,"parents":[36,69],"dependencies":[7],"blockers":[68],"cost":2,"display":{"row":15,"col":2,"icon":"node_1"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":1,"target_part":"Single Arrow","multipliers":[-15,0,0,0,0,0]},{"type":"add_spell_prop","base_spell":1,"target_part":"Single Stream","hits":{"Single Arrow":6}}],"id":6},{"display_name":"Arrow Storm","desc":"Shoot a stream of 8 arrows, dealing significant damage to close mobs and pushing them back.","parents":[58,34],"dependencies":[],"blockers":[],"cost":1,"display":{"row":9,"col":2,"icon":"node_4"},"properties":{"range":16},"effects":[{"type":"replace_spell","name":"Arrow Storm","cost":40,"base_spell":1,"spell_type":"damage","display":"Total Damage","parts":[{"name":"Single Arrow","multipliers":[30,0,10,0,0,0]},{"name":"Single Stream","hits":{"Single Arrow":8}},{"name":"Total Damage","hits":{"Single Stream":1}}]}],"id":7},{"display_name":"Guardian Angels","desc":"Your protective arrows from Arrow Shield will become sentient bows, dealing damage up to 8 times each to nearby enemies. (Arrow Shield will no longer push nearby enemies)","archetype":"Boltslinger","archetype_req":3,"base_abil":0,"parents":[59,67],"dependencies":[0],"blockers":[],"cost":2,"display":{"row":19,"col":1,"icon":"node_3"},"properties":{"range":4,"duration":60,"shots":8,"charges":2},"effects":[{"type":"replace_spell","name":"Guardian Angels","base_spell":4,"display":"Total Damage","parts":[{"name":"Single Arrow","type":"damage","multipliers":[30,0,0,0,0,10]},{"name":"Single Bow","type":"total","hits":{"Single Arrow":8}},{"name":"Total Damage","type":"total","hits":{"Single Bow":2}}]}],"id":8},{"display_name":"Windy Feet","desc":"When casting Escape, give speed to yourself and nearby allies.","base_abil":1,"parents":[7],"dependencies":[],"blockers":[],"cost":1,"display":{"row":10,"col":1,"icon":"node_0"},"properties":{"aoe":8,"duration":120},"effects":[{"type":"stat_bonus","toggle":"Windy Feet","bonuses":[{"type":"stat","name":"spd","value":20}]}],"id":9},{"display_name":"Basaltic Trap","desc":"When you hit the ground with Arrow Bomb, leave a Trap that damages enemies. (Max 2 Traps)","archetype":"Trapper","archetype_req":2,"parents":[5],"dependencies":[],"blockers":[],"cost":2,"display":{"row":19,"col":8,"icon":"node_3"},"properties":{"aoe":7,"traps":2},"effects":[{"type":"replace_spell","name":"Basaltic Trap","base_spell":7,"display":"Trap Damage","parts":[{"name":"Trap Damage","type":"damage","multipliers":[140,30,0,0,30,0]}]}],"id":10},{"display_name":"Windstorm","desc":"Arrow Storm shoot +1 stream of arrows, and each stream shoots +2 arrows, effectively doubling its damage.","base_abil":7,"parents":[8,33],"dependencies":[],"blockers":[68],"cost":2,"display":{"row":21,"col":1,"icon":"node_1"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":1,"target_part":"Single Arrow","multipliers":[-10,0,-2,0,0,2]},{"type":"add_spell_prop","base_spell":1,"target_part":"Total Damage","hits":{"Single Stream":1}},{"type":"add_spell_prop","base_spell":1,"target_part":"Single Stream","cost":0,"hits":{"Single Arrow":2}}],"id":11},{"display_name":"Grappling Hook","base_abil":1,"desc":"When casting Escape, throw a hook that pulls you when hitting a block. If you hit an enemy, pull them towards you instead. (Escape will not throw you backward anymore)","archetype":"Trapper","archetype_req":0,"parents":[61,40,33],"dependencies":[],"blockers":[20],"cost":2,"display":{"row":21,"col":5,"icon":"node_2"},"properties":{"range":26},"effects":[],"id":12},{"display_name":"Implosion","desc":"Arrow bomb will pull enemies towards you. If a trap is nearby, it will pull them towards it instead. Increase Heart Shatter's damage.","archetype":"Trapper","archetype_req":0,"base_abil":2,"parents":[12,40],"dependencies":[],"blockers":[],"cost":2,"display":{"row":22,"col":6,"icon":"node_1"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":3,"target_part":"Heart Shatter","multipliers":[40,0,0,0,0,0]}],"id":13},{"display_name":"Twain's Arc","desc":"When you have 2+ Focus, holding shift will summon the Twain's Arc. Charge it up to shoot a destructive long-range beam. (Damage is dealt as Main Attack Damage)","archetype":"Sharpshooter","archetype_req":4,"parents":[62,64],"dependencies":[61],"blockers":[],"cost":2,"display":{"row":25,"col":4,"icon":"node_2"},"properties":{"range":64,"focusReq":2},"effects":[{"type":"replace_spell","name":"Twain's Arc","base_spell":5,"scaling":"melee","use_atkspd":false,"display":"Single Shot","parts":[{"name":"Single Shot","type":"damage","multipliers":[200,0,0,0,0,0]}]}],"id":14},{"display_name":"Fierce Stomp","desc":"When using Escape, hold shift to quickly drop down and deal damage.","archetype":"Boltslinger","archetype_req":0,"base_abil":1,"parents":[42,64],"dependencies":[],"blockers":[],"cost":2,"display":{"row":26,"col":1,"icon":"node_1"},"properties":{"aoe":4},"effects":[{"type":"add_spell_prop","base_spell":2,"target_part":"Fierce Stomp","cost":0,"multipliers":[100,0,0,0,0,0]},{"type":"add_spell_prop","base_spell":2,"target_part":"Stomp Damage","cost":0,"hits":{"Fierce Stomp":1},"display":"Stomp Damage"}],"id":15},{"display_name":"Scorched Earth","desc":"Fire Creep become much stronger.","archetype":"Sharpshooter","archetype_req":0,"parents":[14],"dependencies":[4],"blockers":[],"cost":1,"display":{"row":26,"col":5,"icon":"node_1"},"properties":{"duration":2,"aoe":0.4},"effects":[{"type":"add_spell_prop","base_spell":3,"target_part":"Fire Creep","multipliers":[10,0,0,0,5,0]}],"id":16},{"display_name":"Leap","desc":"When you double tap jump, leap foward. (2s Cooldown)","archetype":"Boltslinger","archetype_req":5,"parents":[42,55],"dependencies":[],"blockers":[],"cost":2,"display":{"row":28,"col":0,"icon":"node_1"},"properties":{"cooldown":2},"effects":[],"id":17},{"display_name":"Shocking Bomb","desc":"Arrow Bomb will not be affected by gravity, and all damage conversions become Thunder.","archetype":"Sharpshooter","archetype_req":5,"base_abil":2,"parents":[14,44,55],"dependencies":[2],"blockers":[],"cost":2,"display":{"row":28,"col":4,"icon":"node_1"},"properties":{"gravity":0},"effects":[{"type":"convert_spell_conv","target_part":"all","base_spell":3,"conversion":"Thunder"}],"id":18},{"display_name":"Mana Trap","desc":"Your Traps will give you 2.85 Mana per second when you stay close to them.","archetype":"Trapper","archetype_req":5,"base_abil":10,"parents":[43,44],"dependencies":[],"blockers":[],"cost":2,"display":{"row":28,"col":8,"icon":"node_3"},"properties":{"range":16,"manaRegen":2.85},"effects":[{"type":"add_spell_prop","base_spell":3,"cost":10}],"id":19},{"display_name":"Escape Artist","desc":"When casting Escape, release 120 arrows towards the ground.","archetype":"Boltslinger","archetype_req":0,"base_abil":1,"parents":[46,17],"dependencies":[],"blockers":[12],"cost":2,"display":{"row":31,"col":0,"icon":"node_1"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":2,"target_part":"Per Arrow","multipliers":[20,0,10,0,0,0]},{"type":"add_spell_prop","base_spell":2,"target_part":"Max Damage (Escape Artist)","hits":{"Per Arrow":120},"display":"Max Damage (Escape Artist)"}],"id":20},{"display_name":"Initiator","desc":"If you do not damage an enemy for 5s or more, your next sucessful hit will deal +50% damage and add +1 Focus.","archetype":"Sharpshooter","archetype_req":5,"parents":[18,44,47],"dependencies":[61],"blockers":[],"cost":2,"display":{"row":31,"col":5,"icon":"node_2"},"properties":{},"effects":[],"id":21},{"display_name":"Call of the Hound","desc":"Arrow Shield summon a Hound that will attack and drag aggressive enemies towards your traps.","archetype":"Trapper","archetype_req":0,"base_abil":0,"parents":[21,47],"dependencies":[0],"blockers":[],"cost":2,"display":{"row":32,"col":7,"icon":"node_2"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":4,"target_part":"Hound Damage","multipliers":[40,0,0,0,0,0]}],"id":22},{"display_name":"Arrow Hurricane","desc":"Arrow Storm will shoot +2 stream of arrows.","archetype":"Boltslinger","archetype_req":8,"base_abil":7,"parents":[48,20],"dependencies":[],"blockers":[68],"cost":2,"display":{"row":33,"col":0,"icon":"node_3"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":1,"target_part":"Total Damage","hits":{"Single Stream":2}}],"id":23},{"display_name":"Geyser Stomp","desc":"Fierce Stomp will create geysers, dealing more damage and vertical knockback.","base_abil":1,"parents":[56],"dependencies":[15],"blockers":[],"cost":2,"display":{"row":37,"col":1,"icon":"node_1"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":2,"target_part":"Geyser Stomp","multipliers":[0,0,0,50,0,0]},{"type":"add_spell_prop","base_spell":2,"target_part":"Stomp Damage","hits":{"Geyser Stomp":1}},{"type":"raw_stat","bonuses":[{"type":"prop","abil":15,"name":"aoe","value":1}]}],"id":24},{"display_name":"Crepuscular Ray","desc":"If you have 5 Focus, casting Arrow Storm will make you levitate and shoot 20 homing arrows per second until you run out of Focus. While in that state, you will lose 1 Focus per second.","archetype":"Sharpshooter","archetype_req":10,"parents":[49],"dependencies":[7],"blockers":[],"cost":2,"display":{"row":37,"col":4,"icon":"node_3"},"properties":{},"effects":[{"type":"replace_spell","name":"Crepuscular Ray","base_spell":6,"display":"DPS","parts":[{"name":"Single Arrow","multipliers":[20,0,0,5,0,0]},{"name":"DPS","hits":{"Single Arrow":20}},{"name":"Total Damage","hits":{"DPS":7}}]}],"id":25},{"display_name":"Grape Bomb","desc":"Arrow bomb will throw 3 additional smaller bombs when exploding.","base_abil":2,"parents":[51],"dependencies":[],"blockers":[],"cost":2,"display":{"row":37,"col":7,"icon":"node_2"},"properties":{"aoe":2},"effects":[{"type":"add_spell_prop","base_spell":3,"target_part":"Grape Bomb","multipliers":[30,0,0,0,10,0]},{"type":"add_spell_prop","base_spell":3,"target_part":"Total Damage","hits":{"Grape Bomb":3}}],"id":26},{"display_name":"Tangled Traps","desc":"Your Traps will be connected by a rope that deals damage to enemies every 0.2s.","archetype":"Trapper","archetype_req":0,"base_abil":10,"parents":[26],"dependencies":[10],"blockers":[],"cost":2,"display":{"row":38,"col":6,"icon":"node_1"},"properties":{"attackSpeed":0.2},"effects":[{"type":"add_spell_prop","base_spell":7,"target_part":"Line Damage Tick","multipliers":[20,0,0,0,0,20]},{"type":"add_spell_prop","base_spell":7,"target_part":"DPS","hits":{"Line Damage Tick":5}}],"id":27},{"display_name":"Snow Storm","desc":"Enemies near you will be slowed down.","parents":[24,63],"dependencies":[],"blockers":[],"cost":2,"display":{"row":39,"col":2,"icon":"node_2"},"properties":{"range":2.5,"slowness":0.3},"effects":[],"id":28},{"display_name":"All-Seeing Panoptes","desc":"Your bows from Guardian Angels become all-seeing, increasing their range, damage and letting them shoot up to +5 times each.","archetype":"Boltslinger","archetype_req":11,"base_abil":0,"parents":[28],"dependencies":[8],"blockers":[],"cost":2,"display":{"row":40,"col":1,"icon":"node_3"},"properties":{"range":8,"shots":5},"effects":[{"type":"add_spell_prop","base_spell":4,"target_part":"Single Arrow","multipliers":[0,0,0,0,10,0]},{"type":"add_spell_prop","base_spell":4,"target_part":"Single Bow","hits":{"Single Arrow":5}}],"id":29},{"display_name":"Minefield","desc":"Allow you to place +6 Traps, but with reduced damage and range.","archetype":"Trapper","archetype_req":10,"base_abil":10,"parents":[26,53],"dependencies":[10],"blockers":[],"cost":2,"display":{"row":40,"col":7,"icon":"node_3"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":8,"target_part":"Trap Damage","cost":0,"multipliers":[-80,0,0,0,0,0]},{"type":"raw_stat","bonuses":[{"type":"prop","abil":10,"name":"aoe","value":-2},{"type":"prop","abil":10,"name":"traps","value":6}]}],"id":30},{"display_name":"Bow Proficiency I","desc":"Improve your Main Attack's damage and range when using a bow.","base_abil":999,"parents":[2],"dependencies":[],"blockers":[],"cost":1,"display":{"row":2,"col":4,"icon":"node_0"},"properties":{},"effects":[{"type":"raw_stat","bonuses":[{"type":"stat","name":"mdPct","value":5}]}],"id":31},{"display_name":"Cheaper Arrow Bomb","desc":"Reduce the Mana cost of Arrow Bomb.","base_abil":2,"parents":[31],"dependencies":[],"blockers":[],"cost":1,"display":{"row":2,"col":6,"icon":"node_0"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":3,"cost":-10}],"id":32},{"display_name":"Cheaper Arrow Storm","desc":"Reduce the Mana cost of Arrow Storm.","base_abil":7,"parents":[12,11,61],"dependencies":[],"blockers":[],"cost":1,"display":{"row":21,"col":3,"icon":"node_0"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":1,"cost":-5}],"id":33},{"display_name":"Cheaper Escape","desc":"Reduce the Mana cost of Escape.","base_abil":1,"parents":[7,0],"dependencies":[],"blockers":[],"cost":1,"display":{"row":9,"col":4,"icon":"node_0"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":2,"cost":-5}],"id":34},{"display_name":"Earth Mastery","base_abil":998,"desc":"Increases your base damage from all Earth attacks","archetype":"Trapper","archetype_req":0,"parents":[0],"dependencies":[],"blockers":[],"cost":1,"display":{"row":13,"col":8,"icon":"node_0"},"properties":{},"effects":[{"type":"raw_stat","bonuses":[{"type":"stat","name":"eDamPct","value":20},{"type":"stat","name":"eDamAddMin","value":2},{"type":"stat","name":"eDamAddMax","value":4}]}],"id":35},{"display_name":"Thunder Mastery","base_abil":998,"desc":"Increases your base damage from all Thunder attacks","archetype":"Boltslinger","archetype_req":0,"parents":[7,39,34],"dependencies":[],"blockers":[],"cost":1,"display":{"row":13,"col":2,"icon":"node_0"},"properties":{},"effects":[{"type":"raw_stat","bonuses":[{"type":"stat","name":"tDamPct","value":10},{"type":"stat","name":"tDamAddMin","value":1},{"type":"stat","name":"tDamAddMax","value":8}]}],"id":36},{"display_name":"Water Mastery","base_abil":998,"desc":"Increases your base damage from all Water attacks","archetype":"Sharpshooter","archetype_req":0,"parents":[34,36,39],"dependencies":[],"blockers":[],"cost":1,"display":{"row":14,"col":4,"icon":"node_0"},"properties":{},"effects":[{"type":"raw_stat","bonuses":[{"type":"stat","name":"wDamPct","value":15},{"type":"stat","name":"wDamAddMin","value":2},{"type":"stat","name":"wDamAddMax","value":4}]}],"id":37},{"display_name":"Air Mastery","base_abil":998,"desc":"Increases base damage from all Air attacks","archetype":"Boltslinger","archetype_req":0,"parents":[7],"dependencies":[],"blockers":[],"cost":1,"display":{"row":13,"col":0,"icon":"node_0"},"properties":{},"effects":[{"type":"raw_stat","bonuses":[{"type":"stat","name":"aDamPct","value":15},{"type":"stat","name":"aDamAddMin","value":3},{"type":"stat","name":"aDamAddMax","value":4}]}],"id":38},{"display_name":"Fire Mastery","base_abil":998,"desc":"Increases base damage from all Fire attacks","archetype":"Sharpshooter","archetype_req":0,"parents":[36,0,34],"dependencies":[],"blockers":[],"cost":1,"display":{"row":13,"col":6,"icon":"node_0"},"properties":{},"effects":[{"type":"raw_stat","bonuses":[{"type":"stat","name":"fDamPct","value":15},{"type":"stat","name":"fDamAddMin","value":3},{"type":"stat","name":"fDamAddMax","value":5}]}],"id":39},{"display_name":"More Shields","desc":"Give +2 charges to Arrow Shield.","base_abil":0,"parents":[12,10],"dependencies":[0],"blockers":[],"cost":1,"display":{"row":21,"col":7,"icon":"node_0"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":4,"target_part":"Total Damage","hits":{"Shield Damage":2,"Single Bow":2}},{"type":"raw_stat","bonuses":[{"type":"prop","abil":0,"name":"charges","value":2}]}],"id":40},{"display_name":"Stormy Feet","desc":"Windy Feet will last longer and add more speed.","archetype":"Boltslinger","base_abil":1,"parents":[11],"dependencies":[9],"blockers":[],"cost":1,"display":{"row":23,"col":1,"icon":"node_0"},"properties":{"duration":60},"effects":[{"type":"stat_bonus","toggle":"Windy Feet","bonuses":[{"type":"stat","name":"spdPct","value":20}]}],"id":41},{"display_name":"Refined Gunpowder","desc":"Increase the damage of Arrow Bomb.","base_abil":2,"parents":[11,64],"dependencies":[],"blockers":[],"cost":1,"display":{"row":25,"col":0,"icon":"node_0"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":3,"target_part":"Arrow Bomb","multipliers":[50,0,0,0,0,0]}],"id":42},{"display_name":"More Traps","desc":"Increase the maximum amount of active Traps you can have by +2.","archetype":"Trapper","archetype_req":0,"base_abil":10,"parents":[54],"dependencies":[10],"blockers":[],"cost":1,"display":{"row":26,"col":8,"icon":"node_0"},"properties":{},"effects":[{"type":"raw_stat","bonuses":[{"type":"prop","abil":10,"name":"traps","value":2}]}],"id":43},{"display_name":"Better Arrow Shield","desc":"Arrow Shield will gain additional area of effect, knockback and damage.","archetype":"Sharpshooter","archetype_req":0,"base_abil":0,"parents":[19,18,14],"dependencies":[0],"blockers":[],"cost":1,"display":{"row":28,"col":6,"icon":"node_0"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":3,"target_part":"Arrow Shield","behavior":"modify","multipliers":[40,0,0,0,0,0]},{"type":"raw_stat","bonuses":[{"type":"prop","abil":0,"behavior":"modify","name":"aoe","value":1}]}],"id":44},{"display_name":"Better Leap","desc":"Reduce leap's cooldown by 1s.","archetype":"Boltslinger","archetype_req":0,"base_abil":17,"parents":[17,55],"dependencies":[17],"blockers":[],"cost":1,"display":{"row":29,"col":1,"icon":"node_0"},"properties":{},"effects":[{"type":"raw_stat","bonuses":[{"type":"prop","abil":17,"name":"cooldown","value":-1}]}],"id":45},{"display_name":"Better Guardian Angels","desc":"Your Guardian Angels can shoot +4 arrows before disappearing.","archetype":"Boltslinger","archetype_req":0,"base_abil":0,"parents":[20,55],"dependencies":[8],"blockers":[],"cost":1,"display":{"row":31,"col":2,"icon":"node_0"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":4,"target_part":"Single Bow","hits":{"Single Arrow":4}}],"id":46},{"display_name":"Cheaper Arrow Storm (2)","desc":"Reduce the Mana cost of Arrow Storm.","base_abil":7,"parents":[21,19],"dependencies":[],"blockers":[],"cost":1,"display":{"row":31,"col":8,"icon":"node_0"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":1,"cost":-5}],"id":47},{"display_name":"Precise Shot","desc":"+30% Critical Hit Damage","parents":[46,49,23],"dependencies":[],"blockers":[],"cost":1,"display":{"row":33,"col":2,"icon":"node_0"},"properties":{},"effects":[{"type":"raw_stat","bonuses":[{"type":"stat","name":"critDamPct","value":30}]}],"id":48},{"display_name":"Cheaper Arrow Shield","desc":"Reduce the Mana cost of Arrow Shield.","base_abil":0,"parents":[48,21],"dependencies":[],"blockers":[],"cost":1,"display":{"row":33,"col":4,"icon":"node_0"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":4,"cost":-5}],"id":49},{"display_name":"Rocket Jump","desc":"Arrow Bomb's self-damage will knockback you farther away.","base_abil":2,"parents":[47,21],"dependencies":[2],"blockers":[],"cost":1,"display":{"row":33,"col":6,"icon":"node_0"},"properties":{},"effects":[],"id":50},{"display_name":"Cheaper Escape (2)","desc":"Reduce the Mana cost of Escape.","base_abil":1,"parents":[22,70],"dependencies":[],"blockers":[],"cost":1,"display":{"row":34,"col":7,"icon":"node_0"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":2,"cost":-5}],"id":51},{"display_name":"Stronger Hook","desc":"Increase your Grappling Hook's range, speed and strength.","archetype":"Trapper","archetype_req":5,"base_abil":1,"parents":[51],"dependencies":[12],"blockers":[],"cost":1,"display":{"row":35,"col":8,"icon":"node_0"},"properties":{},"effects":[{"type":"raw_stat","bonuses":[{"type":"prop","abil":12,"name":"range","value":8}]}],"id":52},{"display_name":"Cheaper Arrow Bomb (2)","desc":"Reduce the Mana cost of Arrow Bomb.","base_abil":2,"parents":[63,30],"dependencies":[],"blockers":[],"cost":1,"display":{"row":40,"col":5,"icon":"node_0"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":3,"cost":-5}],"id":53},{"display_name":"Bouncing Bomb","desc":"Arrow Bomb will bounce once when hitting a block or enemy","base_abil":2,"parents":[40],"dependencies":[],"blockers":[],"cost":2,"display":{"row":25,"col":7,"icon":"node_2"},"properties":{},"effects":[],"id":54},{"display_name":"Homing Shots","desc":"Your Main Attack arrows will follow nearby enemies and not be affected by gravity","archetype":"Sharpshooter","base_abil":999,"parents":[17,18],"dependencies":[],"blockers":[],"cost":2,"display":{"row":28,"col":2,"icon":"node_2"},"properties":{},"effects":[],"id":55},{"display_name":"Shrapnel Bomb","desc":"Arrow Bomb's explosion will fling 15 shrapnel, dealing damage in a large area","archetype":"Boltslinger","archetype_req":8,"base_abil":2,"parents":[23,48],"dependencies":[],"blockers":[],"cost":2,"display":{"row":34,"col":1,"icon":"node_1"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":3,"target_part":"Shrapnel Bomblet","multipliers":[40,0,0,0,20,0]}],"id":56},{"display_name":"Elusive","desc":"If you do not get hit for 8+ seconds, become immune to self-damage and remove Arrow Storm's recoil. (Dodging counts as not getting hit)","archetype":"Boltslinger","archetype_req":0,"parents":[24],"dependencies":[],"blockers":[],"cost":2,"display":{"row":38,"col":0,"icon":"node_1"},"properties":{},"effects":[],"id":57},{"display_name":"Double Shots","desc":"Double Main Attack arrows, but they deal -30% damage per arrow (harder to hit far enemies)","archetype":"Boltslinger","archetype_req":0,"base_abil":999,"parents":[1],"dependencies":[],"blockers":[60],"cost":1,"display":{"row":7,"col":2,"icon":"node_0"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":0,"target_part":"Single Shot","multipliers":[-30,0,0,0,0,0]},{"type":"add_spell_prop","base_spell":0,"target_part":"Total Damage","hits":{"Single Shot":2},"display":"Total Damage"}],"id":58},{"display_name":"Triple Shots","desc":"Triple Main Attack arrows, but they deal -20% damage per arrow","archetype":"Boltslinger","archetype_req":0,"base_abil":999,"parents":[69,67],"dependencies":[58],"blockers":[],"cost":1,"display":{"row":17,"col":0,"icon":"node_0"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":0,"target_part":"Single Shot","multipliers":[-20,0,0,0,0,0]},{"type":"add_spell_prop","base_spell":0,"target_part":"Total Damage","hits":{"Single Shot":1},"display":"Total Damage"}],"id":59},{"display_name":"Power Shots","desc":"Main Attack arrows have increased speed and knockback","archetype":"Sharpshooter","archetype_req":0,"base_abil":999,"parents":[1],"dependencies":[],"blockers":[58],"cost":1,"display":{"row":7,"col":6,"icon":"node_0"},"properties":{},"effects":[],"id":60},{"display_name":"Focus","desc":"When hitting an aggressive mob 5+ blocks away, gain +1 Focus (Max 3). Resets if you miss once","archetype":"Sharpshooter","archetype_req":2,"parents":[68],"dependencies":[],"blockers":[],"cost":2,"display":{"row":19,"col":4,"icon":"node_3"},"properties":{},"effects":[{"type":"stat_scaling","slider":true,"slider_name":"Focus","output":{"type":"stat","name":"damMult.Focus"},"scaling":[40],"slider_max":3}],"id":61},{"display_name":"More Focus","desc":"Add +2 max Focus","archetype":"Sharpshooter","archetype_req":0,"base_abil":61,"parents":[33,12],"dependencies":[61],"blockers":[],"cost":1,"display":{"row":22,"col":4,"icon":"node_0"},"properties":{},"effects":[{"type":"stat_scaling","slider":true,"slider_name":"Focus","slider_max":2,"output":{"type":"stat","name":"damMult.Focus"},"scaling":[-5]}],"id":62},{"display_name":"More Focus (2)","desc":"Add +2 max Focus","archetype":"Sharpshooter","archetype_req":0,"base_abil":61,"parents":[25,28],"dependencies":[61],"blockers":[],"cost":1,"display":{"row":39,"col":4,"icon":"node_0"},"properties":{},"effects":[{"type":"stat_scaling","slider":true,"slider_name":"Focus","slider_max":2,"output":{"type":"stat","name":"damMult.Focus"},"scaling":[-5]}],"id":63},{"display_name":"Traveler","desc":"For every 1% Walk Speed you have from items, gain +1 Raw Spell Damage (Max 100)","parents":[42,14],"dependencies":[],"blockers":[],"cost":1,"display":{"row":25,"col":2,"icon":"node_0"},"properties":{},"effects":[{"type":"stat_scaling","slider":false,"inputs":[{"type":"stat","name":"spd"}],"output":{"type":"stat","name":"sdRaw"},"scaling":[1],"max":100}],"id":64},{"display_name":"Patient Hunter","desc":"Your Traps will deal +20% more damage for every second they are active (Max +80%)","archetype":"Trapper","archetype_req":0,"base_abil":10,"parents":[40],"dependencies":[10],"blockers":[],"cost":2,"display":{"row":22,"col":8,"icon":"node_1"},"properties":{"max":80},"effects":[{"type":"stat_scaling","slider":true,"slider_name":"Trap Wait Time","slider_max":4,"output":{"type":"stat","name":"damMult.Basaltic:7.Trap Damage"},"slider_step":1,"scaling":[20]}],"id":65},{"display_name":"Stronger Patient Hunter","desc":"Add +80% Max Damage to Patient Hunter","archetype":"Trapper","archetype_req":0,"base_abil":10,"parents":[26],"dependencies":[65],"blockers":[],"cost":1,"display":{"row":38,"col":8,"icon":"node_0"},"properties":{},"effects":[{"type":"stat_scaling","slider":true,"slider_name":"Trap Wait Time","slider_max":4},{"type":"raw_stat","bonuses":[{"type":"prop","abil":65,"name":"max","value":80}]}],"id":66},{"display_name":"Frenzy","desc":"Every time you hit an enemy, briefly gain +6% Walk Speed (Max 200%). Decay -40% of the bonus every second","archetype":"Boltslinger","archetype_req":0,"parents":[59,6],"dependencies":[],"blockers":[],"cost":2,"display":{"row":17,"col":2,"icon":"node_1"},"properties":{},"effects":[{"type":"stat_scaling","slider":true,"slider_name":"Hits dealt","output":{"type":"stat","name":"spd"},"scaling":[6],"max":160}],"id":67},{"display_name":"Phantom Ray","desc":"Condense Arrow Storm into a single ray that damages enemies 10 times per second","base_abil":7,"parents":[37,4],"dependencies":[7],"blockers":[11,6,23],"cost":2,"display":{"row":16,"col":4,"icon":"node_2"},"properties":{},"effects":[{"type":"replace_spell","name":"Phantom Ray","base_spell":1,"spell_type":"damage","scaling":"spell","display":"Total Damage","parts":[{"name":"Single Arrow","type":"damage","multipliers":[25,0,5,0,0,0]},{"name":"Total Damage","type":"total","hits":{"Single Arrow":16}}]},{"type":"add_spell_prop","base_spell":1,"cost":-10}],"id":68},{"display_name":"Arrow Rain","desc":"When Arrow Shield loses its last charge, unleash 150 arrows raining down on enemies","base_abil":0,"parents":[6,38],"dependencies":[0],"blockers":[],"cost":2,"display":{"row":15,"col":0,"icon":"node_1"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":4,"target_part":"Arrow Rain (Per Arrow)","multipliers":[80,0,0,0,0,60]},{"type":"add_spell_prop","base_spell":4,"target_part":"Arrow Rain (Total)","hits":{"Arrow Rain (Per Arrow)":150}}],"id":69},{"display_name":"Decimator","desc":"Phantom Ray will increase its damage by 10% everytime you do not miss with it (Max 70%)","archetype":"Sharpshooter","archetype_req":0,"base_abil":7,"parents":[49,51],"dependencies":[68],"blockers":[],"cost":1,"display":{"row":34,"col":5,"icon":"node_1"},"properties":{},"effects":[{"type":"stat_scaling","slider":true,"slider_name":"Phantom Ray hits","slider_max":7,"output":{"type":"stat","name":"damMult.Decimator:1.Single Arrow"},"scaling":[10]}],"id":70}],"Warrior":[{"display_name":"Bash","desc":"Violently bash the ground, dealing high damage in a large area","parents":[],"dependencies":[],"blockers":[],"cost":1,"display":{"row":0,"col":4,"icon":"node_4"},"properties":{"aoe":4,"range":3},"effects":[{"type":"replace_spell","name":"Bash","cost":45,"base_spell":1,"spell_type":"damage","scaling":"spell","display":"Total Damage","parts":[{"name":"Single Hit","type":"damage","multipliers":[130,20,0,0,0,0]},{"name":"Total Damage","type":"total","hits":{"Single Hit":1}}]}],"id":0},{"display_name":"Spear Proficiency 1","desc":"Improve your Main Attack's damage and range w/ spear","base_abil":999,"parents":[0],"dependencies":[],"blockers":[],"cost":1,"display":{"row":2,"col":4,"icon":"node_0"},"properties":{"melee_range":1},"effects":[{"type":"raw_stat","bonuses":[{"type":"stat","name":"mdPct","value":5}]}],"id":1},{"display_name":"Cheaper Bash","desc":"Reduce the Mana cost of Bash","base_abil":0,"parents":[1],"dependencies":[],"blockers":[],"cost":1,"display":{"row":2,"col":2,"icon":"node_0"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":1,"cost":-10}],"id":2},{"display_name":"Double Bash","desc":"Bash will hit a second time at a farther range","parents":[1],"base_abil":0,"dependencies":[],"blockers":[],"cost":1,"display":{"row":4,"col":4,"icon":"node_1"},"properties":{"range":3},"effects":[{"type":"add_spell_prop","base_spell":1,"target_part":"Total Damage","cost":0,"hits":{"Single Hit":1}},{"type":"add_spell_prop","base_spell":1,"target_part":"Single Hit","cost":0,"multipliers":[-50,0,0,0,0,0]}],"id":3},{"display_name":"Charge","desc":"Charge forward at high speed (hold shift to cancel)","parents":[3],"dependencies":[],"blockers":[],"cost":1,"display":{"row":6,"col":4,"icon":"node_4"},"properties":{},"effects":[{"type":"replace_spell","name":"Charge","cost":25,"base_spell":2,"spell_type":"damage","scaling":"spell","display":"","parts":[]}],"id":4},{"display_name":"Heavy Impact","desc":"After using Charge, violently crash down into the ground and deal damage","base_abil":4,"parents":[8],"dependencies":[],"blockers":[],"cost":1,"display":{"row":9,"col":1,"icon":"node_1"},"properties":{"aoe":4},"effects":[{"type":"add_spell_prop","base_spell":2,"target_part":"Heavy Impact","cost":0,"multipliers":[100,0,0,0,0,0]},{"type":"add_spell_prop","base_spell":2,"target_part":"Contact Damage","display":"Contact Damage","hits":{"Heavy Impact":1}}],"id":5},{"display_name":"Vehement","desc":"For every 1% or 1 Raw Main Attack Damage you have from items, gain +2% Walk Speed (Max 20%)","archetype":"Fallen","archetype_req":0,"parents":[4],"dependencies":[],"blockers":[7],"cost":1,"display":{"row":6,"col":2,"icon":"node_0"},"properties":{},"effects":[{"type":"stat_scaling","slider":false,"inputs":[{"type":"stat","name":"mdPct"},{"type":"stat","name":"mdRaw"}],"output":{"type":"stat","name":"spd"},"scaling":[2,2],"max":20}],"id":6},{"display_name":"Tougher Skin","desc":"Harden your skin and become permanently +5% more resistant. For every 1% or 1 Raw Heath Regen you have from items, gain +10 Health (Max 100)","archetype":"Paladin","archetype_req":0,"parents":[4],"dependencies":[],"blockers":[6],"cost":1,"display":{"row":6,"col":6,"icon":"node_0"},"properties":{},"effects":[{"type":"raw_stat","bonuses":[{"type":"stat","name":"defMult.Base","value":5}]},{"type":"stat_scaling","slider":false,"inputs":[{"type":"stat","name":"hprRaw"},{"type":"stat","name":"hprPct"}],"output":{"type":"stat","name":"hpBonus"},"scaling":[10,10],"max":100}],"id":7},{"display_name":"Uppercut","desc":"Rocket enemies in the air and deal massive damage","parents":[6,9],"dependencies":[],"blockers":[],"cost":1,"display":{"row":8,"col":2,"icon":"node_4"},"properties":{"aoe":3,"range":5},"effects":[{"type":"replace_spell","name":"Uppercut","cost":45,"base_spell":3,"spell_type":"damage","scaling":"spell","display":"Total Damage","parts":[{"name":"Uppercut","multipliers":[200,40,40,0,0,0]},{"name":"Total Damage","hits":{"Uppercut":1}}]}],"id":8},{"display_name":"Cheaper Charge","desc":"Reduce the Mana cost of Charge","base_abil":4,"parents":[8,10],"dependencies":[],"blockers":[],"cost":1,"display":{"row":8,"col":4,"icon":"node_0"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":2,"cost":-5}],"id":9},{"display_name":"War Scream","desc":"Emit a terrorizing roar that deals damage, pull nearby enemies, and add damage resistance to yourself and allies","parents":[7,9],"dependencies":[],"blockers":[],"cost":1,"display":{"row":8,"col":6,"icon":"node_4"},"properties":{"duration":30,"aoe":12,"defense_bonus":10},"effects":[{"type":"replace_spell","name":"War Scream","cost":35,"base_spell":4,"spell_type":"damage","scaling":"spell","display":"Total Damage","parts":[{"name":"War Scream","multipliers":[50,0,0,0,50,0]},{"name":"Total Damage","hits":{"War Scream":1}}]}],"id":10},{"display_name":"Earth Mastery","base_abil":998,"desc":"Increases base damage from all Earth attacks","archetype":"Fallen","archetype_req":0,"parents":[8],"dependencies":[],"blockers":[],"cost":1,"display":{"row":10,"col":0,"icon":"node_0"},"properties":{},"effects":[{"type":"raw_stat","bonuses":[{"type":"stat","name":"eDamPct","value":20},{"type":"stat","name":"eDamAddMin","value":2},{"type":"stat","name":"eDamAddMax","value":4}]}],"id":11},{"display_name":"Thunder Mastery","base_abil":998,"desc":"Increases base damage from all Thunder attacks","archetype":"Fallen","archetype_req":0,"parents":[8,14,9],"dependencies":[],"blockers":[],"cost":1,"display":{"row":10,"col":2,"icon":"node_0"},"properties":{},"effects":[{"type":"raw_stat","bonuses":[{"type":"stat","name":"tDamPct","value":10},{"type":"stat","name":"tDamAddMin","value":1},{"type":"stat","name":"tDamAddMax","value":8}]}],"id":12},{"display_name":"Water Mastery","base_abil":998,"desc":"Increases base damage from all Water attacks","archetype":"Battle Monk","archetype_req":0,"parents":[9,12,14],"dependencies":[],"blockers":[],"cost":1,"display":{"row":11,"col":4,"icon":"node_0"},"properties":{},"effects":[{"type":"raw_stat","bonuses":[{"type":"stat","name":"wDamPct","value":15},{"type":"stat","name":"wDamAddMin","value":2},{"type":"stat","name":"wDamAddMax","value":4}]}],"id":13},{"display_name":"Air Mastery","base_abil":998,"desc":"Increases base damage from all Air attacks","archetype":"Battle Monk","archetype_req":0,"parents":[10,12,9],"dependencies":[],"blockers":[],"cost":1,"display":{"row":10,"col":6,"icon":"node_0"},"properties":{},"effects":[{"type":"raw_stat","bonuses":[{"type":"stat","name":"aDamPct","value":15},{"type":"stat","name":"aDamAddMin","value":3},{"type":"stat","name":"aDamAddMax","value":4}]}],"id":14},{"display_name":"Fire Mastery","base_abil":998,"desc":"Increases base damage from all Fire attacks","archetype":"Paladin","archetype_req":0,"parents":[10],"dependencies":[],"blockers":[],"cost":1,"display":{"row":10,"col":8,"icon":"node_0"},"properties":{},"effects":[{"type":"raw_stat","bonuses":[{"type":"stat","name":"fDamPct","value":15},{"type":"stat","name":"fDamAddMin","value":3},{"type":"stat","name":"fDamAddMax","value":5}]}],"id":15},{"display_name":"Quadruple Bash","desc":"Bash will hit 4 times at an even larger range","archetype":"Fallen","archetype_req":0,"base_abil":0,"parents":[11,17],"dependencies":[],"blockers":[],"cost":2,"display":{"row":12,"col":0,"icon":"node_1"},"properties":{"range":6},"effects":[{"type":"add_spell_prop","base_spell":1,"target_part":"Total Damage","hits":{"Single Hit":2}},{"type":"add_spell_prop","base_spell":1,"target_part":"Single Hit","multipliers":[-20,0,0,0,0,0]}],"id":16},{"display_name":"Fireworks","desc":"Mobs hit by Uppercut will explode mid-air and receive additional damage","archetype":"Fallen","archetype_req":0,"base_abil":8,"parents":[12,16],"dependencies":[],"blockers":[],"cost":2,"display":{"row":12,"col":2,"icon":"node_1"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":3,"target_part":"Fireworks","multipliers":[80,0,20,0,0,0]},{"type":"add_spell_prop","base_spell":3,"target_part":"Total Damage","hits":{"Fireworks":1}}],"id":17},{"display_name":"Half-Moon Swipe","desc":"Uppercut will deal a footsweep attack at a longer and wider angle. All elemental conversions become Water","archetype":"Battle Monk","archetype_req":1,"base_abil":8,"parents":[13],"dependencies":[8],"blockers":[],"cost":2,"display":{"row":13,"col":4,"icon":"node_1"},"properties":{"range":4},"effects":[{"type":"add_spell_prop","base_spell":3,"target_part":"Uppercut","cost":-10,"multipliers":[-70,0,0,30,0,0]}],"id":18},{"display_name":"Flyby Jab","desc":"Damage enemies in your way when using Charge","base_abil":4,"parents":[14,20],"dependencies":[],"blockers":[],"cost":2,"display":{"row":12,"col":6,"icon":"node_1"},"properties":{"aoe":2},"effects":[{"type":"add_spell_prop","base_spell":2,"target_part":"Flyby Jab","multipliers":[20,0,0,0,0,40]},{"type":"add_spell_prop","base_spell":2,"target_part":"Contact Damage","display":"Contact Damage","hits":{"Flyby Jab":1}}],"id":19},{"display_name":"Flaming Uppercut","desc":"Uppercut will light mobs on fire, dealing damage every 0.6 seconds","archetype":"Paladin","archetype_req":0,"base_abil":8,"parents":[15,19],"dependencies":[8],"blockers":[],"cost":2,"display":{"row":12,"col":8,"icon":"node_1"},"properties":{"duration":3,"tick":0.6},"effects":[{"type":"replace_spell","name":"Flaming Uppercut","base_spell":8,"display":"DPS","parts":[{"name":"Damage Tick","multipliers":[0,0,0,0,50,0]},{"name":"DPS","hits":{"Damage Tick":1.6666666666666667}},{"name":"Total Damage","hits":{"Damage Tick":5}}]}],"id":20},{"display_name":"Iron Lungs","desc":"War Scream deals more damage","archetype":"Paladin","archetype_req":0,"base_abil":10,"parents":[19,20],"dependencies":[],"blockers":[],"cost":1,"display":{"row":13,"col":7,"icon":"node_0"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":4,"target_part":"War Scream","cost":0,"multipliers":[30,0,0,0,0,30]}],"id":21},{"display_name":"Generalist","desc":"After casting 3 different spells in a row, your next spell will cost 5 mana","archetype":"Battle Monk","archetype_req":3,"parents":[23],"dependencies":[],"blockers":[],"cost":2,"display":{"row":15,"col":2,"icon":"node_3"},"properties":{},"effects":[],"id":22},{"display_name":"Counter","desc":"When dodging a nearby enemy attack, get 30% chance to instantly attack back","archetype":"Battle Monk","archetype_req":0,"parents":[18],"dependencies":[],"blockers":[],"cost":2,"display":{"row":15,"col":4,"icon":"node_1"},"properties":{"chance":30},"effects":[{"type":"replace_spell","name":"Counter","base_spell":5,"display":"Counter Damage","parts":[{"name":"Counter Damage","multipliers":[60,0,20,0,0,20]}]}],"id":23},{"display_name":"Mantle of the Bovemists","desc":"When casting War Scream, create a holy shield around you that reduces all incoming damage by 70% for 3 hits (20s cooldown)","archetype":"Paladin","archetype_req":3,"parents":[21],"dependencies":[10],"blockers":[],"cost":2,"display":{"row":15,"col":7,"icon":"node_3"},"properties":{"mantle_charge":3},"effects":[{"type":"raw_stat","toggle":true,"bonuses":[{"type":"stat","name":"defMult.Mantle","value":70}]}],"id":24},{"display_name":"Bak'al's Grasp","desc":"After casting War Scream, become Corrupted (15s Cooldown). You cannot heal while in that state. While Corrupted, every 2% of Health you lose will add +4 Raw Damage to your attacks (Max 120)","archetype":"Fallen","archetype_req":2,"parents":[16,17],"dependencies":[10],"blockers":[],"cost":2,"display":{"row":16,"col":1,"icon":"node_3"},"properties":{"cooldown":15},"effects":[{"type":"stat_scaling","slider":true,"slider_name":"Corrupted","slider_max":100,"slider_step":1,"output":{"type":"stat","name":"damRaw"},"max":120,"scaling":[2]}],"id":25},{"display_name":"Spear Proficiency 2","desc":"Improve your Main Attack's damage and range w/ spear","base_abil":999,"parents":[25,27],"dependencies":[],"blockers":[],"cost":1,"display":{"row":17,"col":0,"icon":"node_0"},"properties":{"melee_range":1},"effects":[{"type":"raw_stat","bonuses":[{"type":"stat","name":"mdPct","value":5}]}],"id":26},{"display_name":"Cheaper Uppercut","desc":"Reduce the Mana Cost of Uppercut","base_abil":8,"parents":[26,28,23],"dependencies":[],"blockers":[],"cost":1,"display":{"row":17,"col":3,"icon":"node_0"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":3,"cost":-5}],"id":27},{"display_name":"Aerodynamics","desc":"During Charge, you can steer and change direction","archetype":"Battle Monk","archetype_req":0,"base_abil":4,"parents":[27,29],"dependencies":[],"blockers":[],"cost":2,"display":{"row":17,"col":5,"icon":"node_1"},"properties":{},"effects":[],"id":28},{"display_name":"Provoke","desc":"Mobs damaged by War Scream will target only you for at least 5s. Reduce the Mana cost of War Scream","base_abil":10,"parents":[28,24],"dependencies":[],"blockers":[],"cost":2,"display":{"row":17,"col":7,"icon":"node_1"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":4,"cost":-5}],"id":29},{"display_name":"Precise Strikes","desc":"+30% Critical Hit Damage","parents":[27,26],"dependencies":[],"blockers":[],"cost":1,"display":{"row":18,"col":2,"icon":"node_0"},"properties":{},"effects":[{"type":"raw_stat","bonuses":[{"type":"stat","name":"critDamPct","value":30}]}],"id":30},{"display_name":"Air Shout","desc":"War Scream will fire a projectile that can go through walls and deal damage multiple times","base_abil":10,"parents":[28,29],"dependencies":[10],"blockers":[],"cost":2,"display":{"row":18,"col":6,"icon":"node_1"},"properties":{"attackRate":2},"effects":[{"type":"add_spell_prop","base_spell":4,"target_part":"Air Shout","multipliers":[40,0,0,0,0,10]}],"id":31},{"display_name":"Enraged Blow","desc":"While Corriupted, every 1% of Health you lose will increase your damage by +3% (Max 300%)","archetype":"Fallen","archetype_req":0,"base_abil":25,"parents":[26],"dependencies":[25],"blockers":[],"cost":2,"display":{"row":20,"col":0,"icon":"node_2"},"properties":{},"effects":[{"type":"stat_scaling","slider_name":"Corrupted","slider":true,"output":{"type":"stat","name":"damMult.Enraged"},"scaling":[3]}],"id":32},{"display_name":"Flying Kick","desc":"When using Charge, mobs hit will halt your momentum and get knocked back","archetype":"Battle Monk","archetype_req":1,"base_abil":4,"parents":[27,34],"dependencies":[],"blockers":[],"cost":2,"display":{"row":20,"col":3,"icon":"node_1"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":2,"target_part":"Flying Kick","multipliers":[150,0,0,20,0,30]},{"type":"add_spell_prop","base_spell":2,"target_part":"Flying Kick Max Damage","hits":{"Flying Kick":1},"display":"Flying Kick Max Damage"}],"id":33},{"display_name":"Stronger Mantle","desc":"Add +2 additional charges to Mantle of the Bovemists","archetype":"Paladin","archetype_req":0,"base_abil":24,"parents":[35,33],"dependencies":[24],"blockers":[],"cost":1,"display":{"row":20,"col":6,"icon":"node_0"},"properties":{},"effects":[{"type":"raw_stat","bonuses":[{"type":"prop","abil":24,"name":"mantle_charge","value":2}]}],"id":34},{"display_name":"Manachism","desc":"If you receive a hit that's less than 5% of your max HP, gain 10 Mana (1s Cooldown)","archetype":"Paladin","archetype_req":3,"parents":[34,29],"dependencies":[],"blockers":[],"cost":2,"display":{"row":20,"col":8,"icon":"node_2"},"properties":{"cooldown":1},"effects":[],"id":35},{"display_name":"Boiling Blood","desc":"Bash leaves a trail of boiling blood behind its first explosion, slowing down and damaging enemies above it every 0.4 seconds","base_abil":0,"parents":[32,37],"dependencies":[],"blockers":[],"cost":2,"display":{"row":22,"col":0,"icon":"node_1"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":1,"target_part":"Boiling Blood","cost":0,"multipliers":[25,0,0,0,5,0]}],"id":36},{"display_name":"Ragnarokkr","desc":"War Scream become deafening, increasing its range and giving damage bonus to players","archetype":"Fallen","archetype_req":0,"base_abil":10,"parents":[36,33],"dependencies":[10],"blockers":[],"cost":2,"display":{"row":22,"col":2,"icon":"node_2"},"properties":{"aoe":2},"effects":[{"type":"add_spell_prop","base_spell":4,"cost":10},{"type":"raw_stat","toggle":true,"bonuses":[{"type":"stat","name":"damMult.Ragnarokkr","value":30}]}],"id":37},{"display_name":"Ambidextrous","desc":"Increase your chance to attack with Counter by +30%","base_abil":23,"parents":[33,34,39],"dependencies":[23],"blockers":[],"cost":1,"display":{"row":22,"col":4,"icon":"node_0"},"properties":{},"effects":[{"type":"raw_stat","bonuses":[{"type":"prop","abil":23,"name":"chance","value":30}]}],"id":38},{"display_name":"Burning Heart","desc":"For every 100 Health Bonus you have from item IDs, gain +2% Fire Damage (Max 100%)","archetype":"Paladin","archetype_req":0,"parents":[38,40],"dependencies":[],"blockers":[],"cost":1,"display":{"row":22,"col":6,"icon":"node_0"},"properties":{},"effects":[{"type":"stat_scaling","slider":false,"inputs":[{"type":"stat","name":"hpBonus"}],"output":{"type":"stat","name":"fDamPct"},"scaling":[0.02],"max":100}],"id":39},{"display_name":"Stronger Bash","desc":"Increase the damage of Bash","base_abil":0,"parents":[39,35],"dependencies":[],"blockers":[],"cost":1,"display":{"row":22,"col":8,"icon":"node_0"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":1,"target_part":"Single Hit","multipliers":[30,0,0,0,0,0]}],"id":40},{"display_name":"Intoxicating Blood","desc":"After leaving Corrupted, gain 2% of the health lost back for each enemy killed while Corrupted","archetype":"Fallen","archetype_req":5,"base_abil":25,"parents":[37,36],"dependencies":[25],"blockers":[],"cost":2,"display":{"row":23,"col":1,"icon":"node_1"},"properties":{},"effects":[],"id":41},{"display_name":"Comet","desc":"After being hit by Fireworks, enemies will crash into the ground and receive more damage","archetype":"Fallen","archetype_req":0,"base_abil":8,"parents":[37],"dependencies":[17],"blockers":[],"cost":2,"display":{"row":24,"col":2,"icon":"node_1"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":3,"target_part":"Comet","cost":0,"multipliers":[80,20,0,0,0,0]},{"type":"add_spell_prop","base_spell":3,"target_part":"Total Damage","cost":0,"hits":{"Comet":1}}],"id":42},{"display_name":"Collide","desc":"Mobs thrown into walls from Flying Kick will explode and receive additonal damage","archetype":"Battle Monk","archetype_req":4,"base_abil":4,"parents":[38,39],"dependencies":[33],"blockers":[],"cost":2,"display":{"row":23,"col":5,"icon":"node_1"},"properties":{"aoe":4},"effects":[{"type":"add_spell_prop","base_spell":2,"target_part":"Collide","cost":0,"multipliers":[150,0,0,0,50,0]},{"type":"add_spell_prop","base_spell":2,"target_part":"Flying Kick Max Damage","hits":{"Collide":1}}],"id":43},{"display_name":"Rejuvenating Skin","desc":"Regain back 30% of the damage you take as healing over 30s","archetype":"Paladin","archetype_req":5,"parents":[39,40],"dependencies":[],"blockers":[],"cost":2,"display":{"row":23,"col":7,"icon":"node_3"},"properties":{},"effects":[],"id":44},{"display_name":"Uncontainable Corruption","desc":"Reduce the cooldown of Bak'al's Grasp by -5s, and increase the raw damage gained for every 2% of health lost by +1","base_abil":25,"parents":[36,46],"dependencies":[25],"blockers":[],"cost":1,"display":{"row":26,"col":0,"icon":"node_0"},"properties":{},"effects":[{"type":"stat_scaling","slider":true,"slider_name":"Corrupted","output":{"type":"stat","name":"damRaw"},"scaling":[0.5]},{"type":"raw_stat","bonuses":[{"type":"prop","abil":25,"name":"cooldown","value":-5}]}],"id":45},{"display_name":"Radiant Devotee","desc":"For every 4% Reflection you have from items, gain +1/5s Mana Regen (Max 10/5s)","archetype":"Battle Monk","archetype_req":1,"parents":[47,45],"dependencies":[],"blockers":[],"cost":1,"display":{"row":26,"col":2,"icon":"node_0"},"properties":{},"effects":[{"type":"stat_scaling","inputs":[{"type":"stat","name":"ref"}],"output":{"type":"stat","name":"mr"},"scaling":[0.25],"max":10}],"id":46},{"display_name":"Whirlwind Strike","desc":"Uppercut will create a strong gust of air, launching you upward with enemies (Hold shift to stay grounded)","archetype":"Battle Monk","archetype_req":5,"base_abil":8,"parents":[38,46],"dependencies":[8],"blockers":[],"cost":2,"display":{"row":26,"col":4,"icon":"node_1"},"properties":{"range":2},"effects":[{"type":"add_spell_prop","base_spell":3,"target_part":"Uppercut","multipliers":[0,0,0,0,0,50]}],"id":47},{"display_name":"Mythril Skin","desc":"Gain +5% Base Resistance and become immune to knockback","archetype":"Paladin","archetype_req":6,"parents":[44],"dependencies":[],"blockers":[],"cost":2,"display":{"row":26,"col":7,"icon":"node_1"},"properties":{},"effects":[{"type":"raw_stat","bonuses":[{"type":"stat","name":"defMult.Base","value":5}]}],"id":48},{"display_name":"Armour Breaker","desc":"While Corrupted, losing 30% Health will make your next Uppercut destroy enemies' defense, rendering them weaker to damage","archetype":"Fallen","archetype_req":0,"base_abil":8,"parents":[45,46],"dependencies":[25],"blockers":[],"cost":2,"display":{"row":27,"col":1,"icon":"node_2"},"properties":{"duration":5},"effects":[{"type":"raw_stat","toggle":true,"bonuses":[{"type":"stat","name":"damMult.ArmorBreaker","value":30}]}],"id":49},{"display_name":"Shield Strike","desc":"When your Mantle of the Bovemist loses all charges, deal damage around you for each Mantle individually lost","archetype":"Paladin","archetype_req":0,"base_abil":24,"parents":[48,51],"dependencies":[],"blockers":[],"cost":2,"display":{"row":27,"col":6,"icon":"node_1"},"properties":{},"effects":[{"type":"replace_spell","name":"Shield Strike","base_spell":6,"display":"Damage per Shield","parts":[{"name":"Damage per Shield","multipliers":[60,0,20,0,0,0]}]}],"id":50},{"display_name":"Sparkling Hope","desc":"Everytime you heal 5% of your max health, deal damage to all nearby enemies","archetype":"Paladin","archetype_req":0,"parents":[48],"dependencies":[],"blockers":[],"cost":2,"display":{"row":27,"col":8,"icon":"node_2"},"properties":{"aoe":6},"effects":[{"type":"replace_spell","name":"Sparkling Hope","base_spell":7,"display":"Damage Tick","parts":[{"name":"Damage Tick","multipliers":[10,0,5,0,0,0]}]}],"id":51},{"display_name":"Massive Bash","desc":"While Corrupted, every 3% Health you lose will add +1 AoE to Bash (Max 10)","archetype":"Fallen","archetype_req":8,"base_abil":25,"parents":[53,45],"dependencies":[],"blockers":[],"cost":2,"display":{"row":28,"col":0,"icon":"node_2"},"properties":{},"effects":[{"type":"stat_scaling","slider":true,"slider_name":"Corrupted","output":{"type":"prop","abil":0,"name":"aoe"},"scaling":[0.3333333333333333],"max":10}],"id":52},{"display_name":"Tempest","desc":"War Scream will ripple the ground and deal damage 3 times in a large area","archetype":"Battle Monk","archetype_req":0,"base_abil":10,"parents":[52,54],"dependencies":[],"blockers":[],"cost":2,"display":{"row":28,"col":2,"icon":"node_1"},"properties":{"aoe":16},"effects":[{"type":"add_spell_prop","base_spell":4,"target_part":"Tempest","multipliers":[30,10,0,0,0,10]},{"type":"add_spell_prop","base_spell":4,"target_part":"Tempest Total Damage","hits":{"Tempest":3}},{"type":"add_spell_prop","base_spell":4,"target_part":"Total Damage","hits":{"Tempest":3}}],"id":53},{"display_name":"Spirit of the Rabbit","desc":"Reduce the Mana cost of Charge and increase your Walk Speed by +20%","archetype":"Battle Monk","archetype_req":5,"base_abil":4,"parents":[53,47],"dependencies":[],"blockers":[],"cost":1,"display":{"row":28,"col":4,"icon":"node_0"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":2,"cost":-5},{"type":"raw_stat","bonuses":[{"type":"stat","name":"spd","value":20}]}],"id":54},{"display_name":"Massacre","desc":"While Corrupted, if your effective attack speed is Slow or lower, hitting an enemy with your Main Attack will add +1% to your Corrupted bar","archetype":"Fallen","archetype_req":5,"base_abil":999,"parents":[53,52],"dependencies":[],"blockers":[],"cost":2,"display":{"row":29,"col":1,"icon":"node_1"},"properties":{},"effects":[],"id":55},{"display_name":"Axe Kick","desc":"Increase the damage of Uppercut, but also increase its mana cost","base_abil":8,"parents":[53,54],"dependencies":[],"blockers":[],"cost":1,"display":{"row":29,"col":3,"icon":"node_0"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":3,"target_part":"Uppercut","cost":10,"multipliers":[100,0,0,0,0,0]}],"id":56},{"display_name":"Radiance","desc":"Bash will buff your allies' positive IDs. (15s Cooldown)","archetype":"Paladin","archetype_req":2,"base_abil":0,"parents":[54,58],"dependencies":[],"blockers":[],"cost":2,"display":{"row":29,"col":5,"icon":"node_2"},"properties":{"cooldown":15},"effects":[],"id":57},{"display_name":"Cheaper Bash 2","desc":"Reduce the Mana cost of Bash","base_abil":0,"parents":[57,50,51],"dependencies":[],"blockers":[],"cost":1,"display":{"row":29,"col":7,"icon":"node_0"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":1,"cost":-5}],"id":58},{"display_name":"Cheaper War Scream","desc":"Reduce the Mana cost of War Scream","base_abil":10,"parents":[52],"dependencies":[],"blockers":[],"cost":1,"display":{"row":31,"col":0,"icon":"node_0"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":4,"cost":-5}],"id":59},{"display_name":"Discombobulate","desc":"Every time you hit an enemy, briefly increase your elemental damage dealt to them by +3 (Additive, Max +80). This bonus decays -5 every second","archetype":"Battle Monk","archetype_req":11,"parents":[62],"dependencies":[],"blockers":[],"cost":2,"display":{"row":31,"col":2,"icon":"node_3"},"properties":{},"effects":[{"type":"stat_scaling","slider":true,"slider_name":"Hits dealt","slider_max":27,"output":[{"type":"stat","name":"eDamAddMin"},{"type":"stat","name":"eDamAddMax"},{"type":"stat","name":"tDamAddMin"},{"type":"stat","name":"tDamAddMax"},{"type":"stat","name":"wDamAddMin"},{"type":"stat","name":"wDamAddMax"},{"type":"stat","name":"fDamAddMin"},{"type":"stat","name":"fDamAddMax"},{"type":"stat","name":"aDamAddMin"},{"type":"stat","name":"aDamAddMax"}],"scaling":[3],"max":80}],"id":60},{"display_name":"Thunderclap","desc":"Bash will cast at the player's position and gain additional AoE.\n\n All elemental conversions become Thunder","archetype":"Battle Monk","archetype_req":8,"parents":[62],"dependencies":[],"blockers":[],"cost":2,"display":{"row":32,"col":5,"icon":"node_1"},"properties":{},"effects":[{"type":"convert_spell_conv","target_part":"all","base_spell":1,"conversion":"Thunder"},{"type":"raw_stat","bonuses":[{"type":"prop","abil":0,"name":"aoe","value":3}]}],"id":61},{"display_name":"Cyclone","desc":"After casting War Scream, envelop yourself with a vortex that damages nearby enemies every 0.5s","archetype":"Battle Monk","archetype_req":0,"parents":[54],"dependencies":[],"blockers":[],"cost":2,"display":{"row":31,"col":4,"icon":"node_1"},"properties":{"aoe":4,"duration":20},"effects":[{"type":"add_spell_prop","base_spell":4,"target_part":"Cyclone","multipliers":[10,0,0,0,5,10]},{"type":"add_spell_prop","base_spell":4,"target_part":"Cyclone Total Damage","hits":{"Cyclone":40}}],"id":62},{"display_name":"Second Chance","desc":"When you receive a fatal blow, survive and regain 30% of your Health (10m Cooldown)","archetype":"Paladin","archetype_req":12,"parents":[58],"dependencies":[],"blockers":[],"cost":2,"display":{"row":32,"col":7,"icon":"node_3"},"properties":{},"effects":[],"id":63},{"display_name":"Blood Pact","desc":"If you do not have enough mana to cast a spell, spend health instead (0.6% health per mana)","archetype":"Fallen","archetype_req":10,"parents":[59],"dependencies":[],"blockers":[],"cost":2,"display":{"row":34,"col":1,"icon":"node_3"},"properties":{"health_cost":0.6},"effects":[],"id":64},{"display_name":"Haemorrhage","desc":"Reduce Blood Pact's health cost. (0.3% health per mana)","archetype":"Fallen","archetype_req":0,"base_abil":64,"parents":[64],"dependencies":[64],"blockers":[],"cost":1,"display":{"row":35,"col":2,"icon":"node_1"},"properties":{},"effects":[{"type":"raw_stat","bonuses":[{"type":"prop","abil":64,"name":"health_cost","value":-0.3}]}],"id":65},{"display_name":"Brink of Madness","desc":"If your health is 25% full or less, gain +40% Resistance","parents":[64,67],"dependencies":[],"blockers":[],"cost":2,"display":{"row":35,"col":4,"icon":"node_2"},"properties":{},"effects":[{"type":"raw_stat","toggle":true,"bonuses":[{"type":"stat","name":"defMult.Brink","value":40}]}],"id":66},{"display_name":"Cheaper Uppercut 2","desc":"Reduce the Mana cost of Uppercut","base_abil":8,"parents":[63,66],"dependencies":[],"blockers":[],"cost":1,"display":{"row":35,"col":6,"icon":"node_0"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":3,"cost":-5}],"id":67},{"display_name":"Martyr","desc":"When you receive a fatal blow, all nearby allies become invincible","archetype":"Paladin","archetype_req":0,"parents":[63],"dependencies":[],"blockers":[],"cost":2,"display":{"row":35,"col":8,"icon":"node_1"},"properties":{"duration":3,"aoe":12},"effects":[],"id":68}],"Mage":[{"display_name":"Meteor","desc":"Summon a slow but powerful meteor from the sky, dealing massive damage in a large area","parents":[],"dependencies":[],"blockers":[],"cost":1,"display":{"row":0,"col":4,"icon":"node_4"},"properties":{"aoe":5,"range":18},"effects":[{"type":"replace_spell","name":"Meteor","cost":55,"base_spell":3,"display":"Total Damage","parts":[{"name":"Meteor Damage","multipliers":[300,100,0,0,0,0]},{"name":"Total Damage","hits":{"Meteor Damage":1}}]}],"id":0},{"display_name":"Teleport","desc":"Instantly teleport in the direction you're facing","parents":[4],"dependencies":[],"blockers":[],"cost":1,"display":{"row":6,"col":4,"icon":"node_4"},"properties":{"range":12},"effects":[{"type":"replace_spell","name":"Teleport","cost":25,"base_spell":2,"display":"","parts":[]}],"id":1},{"display_name":"Heal","desc":"Heal yourself and nearby allies in a large area around you. (When healing an ally, you cannot heal more than 30% of their max health)","parents":[14,12],"dependencies":[],"blockers":[],"cost":1,"display":{"row":8,"col":2,"icon":"node_4"},"properties":{"aoe":5},"effects":[{"type":"replace_spell","name":"Heal","cost":35,"base_spell":1,"display":"Heal","parts":[{"name":"Heal","power":0.1}]}],"id":2},{"display_name":"Ice Snake","desc":"Summon a fast-moving ice snake that reduces your enemies' speed and damage them.","parents":[13,12],"dependencies":[],"blockers":[],"cost":1,"display":{"row":8,"col":6,"icon":"node_4"},"properties":{"range":18,"effects":40,"duration":3},"effects":[{"type":"replace_spell","name":"Ice Snake","cost":35,"base_spell":4,"display":"Ice Snake Damage","parts":[{"name":"Ice Snake Damage","multipliers":[70,0,0,30,0,0]}]}],"id":3},{"display_name":"Shooting Star","desc":"Drastically increase the speed of your Meteor ability.","base_abil":3,"parents":[5],"dependencies":[],"blockers":[],"cost":1,"display":{"row":4,"col":4,"icon":"node_1"},"properties":{},"effects":[],"id":4},{"display_name":"Wand Proficiency I","desc":"Improve your Main Attack's damage and range when using a wand.","base_abil":999,"parents":[0],"dependencies":[],"blockers":[],"cost":1,"display":{"row":2,"col":4,"icon":"node_0"},"properties":{},"effects":[{"type":"raw_stat","bonuses":[{"type":"stat","name":"mdPct","value":5}]}],"id":5},{"display_name":"Cheaper Meteor","desc":"Reduce the Mana cost of Meteor.","base_abil":0,"parents":[5],"dependencies":[],"blockers":[],"cost":1,"display":{"row":2,"col":6,"icon":"node_0"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":3,"cost":-10}],"id":6},{"display_name":"Earth Mastery","base_abil":998,"desc":"Increases your base damage from all Earth attacks","archetype":"Arcanist","archetype_req":0,"parents":[3],"dependencies":[],"blockers":[],"cost":1,"display":{"row":10,"col":8,"icon":"node_0"},"properties":{},"effects":[{"type":"raw_stat","bonuses":[{"type":"stat","name":"eDamPct","value":20},{"type":"stat","name":"eDamAddMin","value":2},{"type":"stat","name":"eDamAddMax","value":4}]}],"id":7},{"display_name":"Thunder Mastery","base_abil":998,"desc":"Increases your base damage from all Thunder attacks","archetype":"Riftwalker","archetype_req":0,"parents":[2,12],"dependencies":[],"blockers":[],"cost":1,"display":{"row":10,"col":2,"icon":"node_0"},"properties":{},"effects":[{"type":"raw_stat","bonuses":[{"type":"stat","name":"tDamPct","value":10},{"type":"stat","name":"tDamAddMin","value":1},{"type":"stat","name":"tDamAddMax","value":8}]}],"id":8},{"display_name":"Water Mastery","base_abil":998,"desc":"Increases your base damage from all Water attacks","archetype":"Light Bender","archetype_req":0,"parents":[12,8],"dependencies":[],"blockers":[],"cost":1,"display":{"row":11,"col":4,"icon":"node_0"},"properties":{},"effects":[{"type":"raw_stat","bonuses":[{"type":"stat","name":"wDamPct","value":15},{"type":"stat","name":"wDamAddMin","value":2},{"type":"stat","name":"wDamAddMax","value":4}]}],"id":9},{"display_name":"Air Mastery","base_abil":998,"desc":"Increases base damage from all Air attacks","archetype":"Riftwalker","archetype_req":0,"parents":[2],"dependencies":[],"blockers":[],"cost":1,"display":{"row":10,"col":0,"icon":"node_0"},"properties":{},"effects":[{"type":"raw_stat","bonuses":[{"type":"stat","name":"aDamPct","value":15},{"type":"stat","name":"aDamAddMin","value":3},{"type":"stat","name":"aDamAddMax","value":4}]}],"id":10},{"display_name":"Fire Mastery","base_abil":998,"desc":"Increases base damage from all Fire attacks","archetype":"Arcanist","archetype_req":0,"parents":[3],"dependencies":[],"blockers":[],"cost":1,"display":{"row":10,"col":6,"icon":"node_0"},"properties":{},"effects":[{"type":"raw_stat","bonuses":[{"type":"stat","name":"fDamPct","value":15},{"type":"stat","name":"fDamAddMin","value":3},{"type":"stat","name":"fDamAddMax","value":5}]}],"id":11},{"display_name":"Cheaper Teleport","desc":"Reduce the Mana cost of Teleport.","base_abil":1,"parents":[2,3],"dependencies":[],"blockers":[],"cost":1,"display":{"row":8,"col":4,"icon":"node_0"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":2,"cost":-5}],"id":12},{"display_name":"Wisdom","desc":"For every 2% or 2 Raw Spell Damage you have from items, gain +1/5s mana regen (Max 5/5s)","archetype":"Arcanist","archetype_req":0,"parents":[1],"dependencies":[],"blockers":[14],"cost":1,"display":{"row":6,"col":6,"icon":"node_0"},"properties":{},"effects":[{"type":"stat_scaling","slider":false,"inputs":[{"type":"stat","name":"sdPct"},{"type":"stat","name":"sdRaw"}],"output":{"type":"stat","name":"mr"},"scaling":[0.5,0.5],"max":5}],"id":13},{"display_name":"Wand Proficiency II","desc":"Improve your Main Attack's damage and range when using a wand.","archetype":"Riftwalker","archetype_req":0,"base_abil":999,"parents":[1],"dependencies":[],"blockers":[],"cost":1,"display":{"row":6,"col":2,"icon":"node_0"},"properties":{},"effects":[{"type":"raw_stat","bonuses":[{"type":"stat","name":"mdPct","value":5}]}],"id":14},{"display_name":"Wind Slash","desc":"When using Teleport, slash through the air and deal damage to enemies you pierce.","archetype":"Riftwalker","base_abil":1,"parents":[10,16],"dependencies":[1],"blockers":[],"cost":2,"display":{"row":12,"col":0,"icon":"node_1"},"properties":{},"effects":[{"type":"add_spell_prop","target_part":"Wind Slash","base_spell":2,"multipliers":[50,0,0,0,0,50]},{"type":"add_spell_prop","target_part":"Total Damage","base_spell":2,"display":"Total Damage","hits":{"Wind Slash":1}}],"id":15},{"display_name":"Thunderstorm","desc":"After casting Meteor, summon 3 lightning strikes and deal additional damage","base_abil":0,"parents":[15,8],"dependencies":[0],"blockers":[],"cost":2,"display":{"row":12,"col":2,"icon":"node_1"},"properties":{"aoe":2},"effects":[{"type":"add_spell_prop","target_part":"Lightning Damage","base_spell":3,"multipliers":[30,0,15,0,0,0]},{"type":"add_spell_prop","target_part":"Total Damage","base_spell":3,"hits":{"Lightning Damage":3}}],"id":16},{"display_name":"Stronger Meteor","desc":"Increase the damage of Meteor.","base_abil":0,"archetype":"Arcanist","archetype_req":2,"parents":[18],"dependencies":[0],"blockers":[],"cost":1,"display":{"row":13,"col":8,"icon":"node_0"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":3,"target_part":"Meteor Damage","behavior":"modify","multipliers":[30,90,0,0,0,0]}],"id":17},{"display_name":"Burning Sigil","desc":"Meteor will leave a sigil that damages enemies every 0.4s.","base_abil":0,"parents":[11,7],"dependencies":[],"blockers":[],"cost":2,"display":{"row":12,"col":7,"icon":"node_1"},"properties":{"aoe":7,"duration":8},"effects":[{"type":"replace_spell","name":"Burning Sigil","base_spell":6,"display":"DPS","parts":[{"name":"Tick Damage","multipliers":[15,0,0,0,25,0]},{"name":"DPS","hits":{"Tick Damage":2.5}},{"name":"Total Burn Damage","hits":{"Tick Damage":20}}]}],"id":18},{"display_name":"Sunshower","desc":"Heal emit a strong light, damaging nearby enemies.","archetype":"Light Bender","archetype_req":0,"base_abil":2,"parents":[9],"dependencies":[2],"blockers":[22],"cost":2,"display":{"row":13,"col":4,"icon":"node_1"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":1,"target_part":"Sunshower Damage","multipliers":[70,0,0,30,0,0]}],"id":19},{"display_name":"Windsweeper","desc":"Your Main Attack will add +1 Winded to enemies you hit. (Max 5, 0.5s cooldown) Ice Snake will deal additional damage to enemies for every Winded they have","archetype":"Riftwalker","archetype_req":3,"parents":[15,16],"dependencies":[3],"blockers":[],"cost":2,"display":{"row":15,"col":1,"icon":"node_3"},"properties":{"max":5},"effects":[{"type":"stat_scaling","slider":true,"slider_name":"Winded","output":{"type":"stat","name":"nConvBase:4.Ice Snake Damage"},"scaling":[20],"slider_step":1,"slider_max":5},{"type":"stat_scaling","slider":true,"slider_name":"Winded","output":{"type":"stat","name":"wConvBase:4.Ice Snake Damage"},"scaling":[10]}],"id":20},{"display_name":"Ophanim","desc":"When casting Meteor, instead summon 2 orbs of light with 200 Health that will attack when you use your Main Attack. When they damage an enemy, they lose 20% of their Health. They can be healed back.","archetype":"Light Bender","archetype_req":2,"parents":[19],"dependencies":[],"blockers":[],"cost":2,"display":{"row":15,"col":4,"icon":"node_3"},"properties":{"health":200},"effects":[{"type":"replace_spell","name":"Ophanim","base_spell":3,"display":"Per Melee (max)","parts":[{"name":"Per Orb","multipliers":[50,0,30,20,0,0]},{"name":"Per Melee (max)","hits":{"Per Orb":2}}]},{"type":"add_spell_prop","base_spell":3,"cost":30}],"id":21},{"display_name":"Arcane Transfer","desc":"Meteor and Ice Snake will add +5 Mana to a Mana Bank for every aggressive enemy you hit. Heal will now transfer the content of your Mana Bank into usable Mana instead of healing.","archetype":"Arcanist","archetype_req":2,"parents":[18],"dependencies":[],"blockers":[],"cost":2,"display":{"row":15,"col":7,"icon":"node_3"},"properties":{"bank":90},"effects":[{"type":"replace_spell","name":"Arcane Transfer","base_spell":1,"parts":[],"display":""}],"id":22},{"display_name":"Cheaper Heal","desc":"Reduce the Mana cost of Heal.","base_abil":2,"parents":[20,24],"dependencies":[],"blockers":[],"cost":1,"display":{"row":17,"col":1,"icon":"node_0"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":1,"cost":-5}],"id":23},{"display_name":"Purification","desc":"Heal and Arcane Transfer will purify you of all negative effects and fire. (3s Cooldown)","base_abil":1,"parents":[21,23,25],"dependencies":[],"blockers":[],"cost":2,"display":{"row":17,"col":4,"icon":"node_2"},"properties":{},"effects":[],"id":24},{"display_name":"Sentient Snake","desc":"Ice Snake will follow the direction you're facing, allowing you to control it.","base_abil":3,"parents":[22,24],"dependencies":[3],"blockers":[],"cost":2,"display":{"row":17,"col":6,"icon":"node_1"},"properties":{},"effects":[],"id":25},{"display_name":"Eye Piercer","desc":"Teleport will blind enemies, confusing them for a short amount of time.","base_abil":1,"parents":[23],"dependencies":[1],"blockers":[],"cost":2,"display":{"row":18,"col":0,"icon":"node_1"},"properties":{},"effects":[],"id":26},{"display_name":"Breathless","desc":"Meteor will deal additional damage to enemies for every Winded they have.","base_abil":20,"archetype":"Riftwalker","archetype_req":0,"parents":[23,24],"dependencies":[20],"blockers":[],"cost":2,"display":{"row":18,"col":2,"icon":"node_1"},"properties":{},"effects":[{"type":"stat_scaling","slider":true,"slider_name":"Winded","output":[{"type":"stat","name":"nConvBase:3.Meteor Damage"},{"type":"stat","name":"eConvBase:3.Meteor Damage"},{"type":"stat","name":"nConvBase:3.Per Orb"},{"type":"stat","name":"eConvBase:3.Per Orb"}],"scaling":[15]}],"id":27},{"display_name":"Larger Heal","desc":"Increase your Heal's range.","base_abil":1,"archetype":"Light Bender","archetype_req":0,"parents":[24,25],"dependencies":[2],"blockers":[22],"cost":1,"display":{"row":18,"col":5,"icon":"node_0"},"properties":{},"effects":[{"type":"raw_stat","bonuses":[{"type":"prop","abil":2,"name":"aoe","value":2}]}],"id":28},{"display_name":"Larger Mana Bank","desc":"Increase your maximum Mana Bank by +30.","base_abil":1,"archetype":"Arcanist","archetype_req":0,"parents":[25],"dependencies":[22],"blockers":[],"cost":1,"display":{"row":18,"col":8,"icon":"node_0"},"properties":{},"effects":[{"type":"raw_stat","bonuses":[{"type":"prop","abil":22,"name":"bank","value":30}]}],"id":29},{"display_name":"Cheaper Ice Snake","desc":"Reduce the Mana cost of Ice Snake.","base_abil":3,"parents":[26],"dependencies":[],"blockers":[],"cost":1,"display":{"row":20,"col":0,"icon":"node_0"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":4,"cost":-5}],"id":30},{"display_name":"Cheaper Teleport II","desc":"Reduce the Mana cost of Teleport.","base_abil":1,"parents":[24,32],"dependencies":[],"blockers":[],"cost":1,"display":{"row":20,"col":4,"icon":"node_0"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":2,"cost":-5}],"id":31},{"display_name":"Fortitude","desc":"After healing 120% of your max health within 10s, apply a damage bonus to each player you've healed. (15s Cooldown)","base_abil":2,"archetype":"Light Bender","archetype_req":0,"parents":[30,31],"dependencies":[],"blockers":[],"cost":2,"display":{"row":20,"col":2,"icon":"node_2"},"properties":{"duration":4},"effects":[{"type":"raw_stat","toggle":true,"bonuses":[{"type":"stat","name":"damMult.Fortitude","value":100}]}],"id":32},{"display_name":"Pyrokinesis","desc":"When your Mana Bank reaches 30, your Main Attack will stop and explode when it hits an enemy. (Damage is dealt as Main Attack Damage)","base_abil":4,"archetype":"Arcanist","archetype_req":4,"parents":[25],"dependencies":[],"blockers":[],"cost":2,"display":{"row":20,"col":7,"icon":"node_2"},"properties":{},"__TODO":"replace_spell pyrokinesis damage","effects":[],"id":33},{"display_name":"Seance","desc":"For every 5/3s Lifesteal you have from items, gain 1% Spell Damage (Max 50%)","archetype":"","archetype_req":0,"parents":[33,36],"dependencies":[],"blockers":[],"cost":1,"display":{"row":22,"col":7,"icon":"node_0"},"properties":{},"effects":[{"type":"stat_scaling","slider":false,"inputs":[{"type":"stat","name":"ls"}],"output":{"type":"stat","name":"sdPct"},"scaling":[0.2],"max":50}],"id":34},{"display_name":"Blink","desc":"Teleport will trigger 2 times in quick successions","base_abil":1,"archetype":"Riftwalker","archetype_req":0,"parents":[32,30],"dependencies":[1],"blockers":[],"cost":2,"display":{"row":21,"col":1,"icon":"node_1"},"properties":{},"effects":[{"type":"raw_stat","toggle":true,"bonuses":[{"type":"prop","abil":1,"name":"range","value":-4}]},{"type":"add_spell_prop","behavior":"modify","target_part":"Total Damage","base_spell":2,"hits":{"Wind Slash":1}}],"id":35},{"display_name":"Snake Nest","desc":"Ice Snake will summon 3 snakes.","base_abil":3,"parents":[34,31,40],"dependencies":[3],"blockers":[],"cost":2,"display":{"row":22,"col":5,"icon":"node_1"},"properties":{},"effects":[],"id":36},{"display_name":"Arcane Restoration","desc":"Pyrokinesis will add +1 Mana every 1s to your Mana Bank when hitting an aggressive enemy.","base_abil":999,"archetype":"Arcanist","archetype_req":0,"parents":[34,36],"dependencies":[33],"blockers":[],"cost":2,"display":{"row":23,"col":6,"icon":"node_1"},"properties":{"duration":4},"effects":[],"id":37},{"display_name":"Fluid Healing","desc":"For every 1% Water Damage Bonus you have, buff Heal's healing power by +0.3%.","archetype":"Light Bender","archetype_req":0,"base_abil":2,"parents":[40,39],"dependencies":[],"blockers":[],"cost":2,"display":{"row":23,"col":2,"icon":"node_1"},"properties":{},"effects":[{"type":"stat_scaling","slider":false,"inputs":[{"type":"stat","name":"wDam"}],"output":{"type":"stat","name":"healPct"},"scaling":[0.3]}],"id":38},{"display_name":"Transonic Warp","desc":"Teleport will deal additional damage to enemies for every Winded they have.","base_abil":20,"archetype":"Riftwalker","archetype_req":5,"parents":[30],"dependencies":[3,20],"blockers":[],"cost":2,"display":{"row":23,"col":0,"icon":"node_2"},"properties":{},"effects":[{"type":"stat_scaling","slider":true,"slider_name":"Winded","output":{"type":"stat","name":"nConvBase:2.Wind Slash"},"scaling":[30]},{"type":"stat_scaling","slider":true,"slider_name":"Winded","output":{"type":"stat","name":"tConvBase:2.Wind Slash"},"scaling":[10]},{"type":"stat_scaling","slider":true,"slider_name":"Winded","output":{"type":"stat","name":"aConvBase:2.Wind Slash"},"scaling":[5]}],"id":39},{"display_name":"Healthier Ophanim I","desc":"Increase the health of your orbs from Ophanim by +800 and reduce the damage they take when hitting an enemy by -5%.","archetype":"Light Bender","archetype_req":0,"base_abil":21,"parents":[32,31],"dependencies":[21],"blockers":[],"cost":1,"display":{"row":22,"col":3,"icon":"node_0"},"properties":{},"effects":[],"id":40},{"display_name":"Orphion's Pulse","desc":"Heal will trigger 2 more times, increasing the overall healing.","archetype":"Light Bender","base_abil":2,"parents":[40,36],"dependencies":[2],"blockers":[22],"cost":2,"display":{"row":23,"col":4,"icon":"node_1"},"properties":{"aoe":5},"effects":[{"type":"add_spell_prop","base_spell":1,"target_part":"Heal Pulse","power":0.15},{"type":"add_spell_prop","base_spell":1,"display":"Total Heal","target_part":"Total Heal","hits":{"Heal":1,"Heal Pulse":2}}],"id":41},{"display_name":"Diffusion","desc":"If you kill an enemy with Winded on them, the leftover Winded will spread to nearby enemies.","archetype":"Riftwalker","archetype_req":6,"base_abil":20,"parents":[39,38],"dependencies":[20],"blockers":[],"cost":2,"display":{"row":25,"col":1,"icon":"node_3"},"properties":{"aoe":5},"effects":[],"id":42},{"display_name":"Lightweaver","desc":"After healing 60% of your max health within 10s, summon a rotating orb that damages all enemies it touches for 20s. (Max 3 Orbs)","archetype":"Light Bender","archetype_req":7,"parents":[41],"dependencies":[],"blockers":[],"cost":2,"display":{"row":25,"col":4,"icon":"node_3"},"properties":{},"effects":[{"type":"replace_spell","name":"Lightweaver","base_spell":5,"display":"Orb Damage","parts":[{"name":"Single Orb","type":"damage","multipliers":[30,0,0,0,20,0]},{"name":"Orb Damage","type":"total","hits":{"Single Orb":3}}]}],"id":43},{"display_name":"Arcane Speed","desc":"After casting Heal or Arcane Transfer, gain +80% speed for 3s. (8s Cooldown)","base_abil":2,"parents":[43,45],"dependencies":[2],"blockers":[],"cost":2,"display":{"row":25,"col":6,"icon":"node_1"},"properties":{},"effects":[],"id":44},{"display_name":"Larger Mana Bank II","desc":"Increase your maximum Mana Bank by +30.","base_abil":1,"archetype":"Arcanist","archetype_req":0,"parents":[34,44],"dependencies":[22],"blockers":[],"cost":1,"display":{"row":25,"col":8,"icon":"node_0"},"properties":{},"effects":[],"id":45},{"display_name":"Psychokinesis","desc":"Meteor will launch directly from you as a slow projectile.","base_abil":3,"archetype":"Arcanist","archetype_req":5,"parents":[45,44],"dependencies":[0],"blockers":[],"cost":1,"display":{"row":26,"col":7,"icon":"node_1"},"properties":{},"effects":[],"id":46},{"display_name":"More Winded","desc":"Incrase your maximum Winded by +5.","base_abil":20,"archetype":"Riftwalker","archetype_req":0,"parents":[42],"dependencies":[20],"blockers":[],"cost":1,"display":{"row":26,"col":0,"icon":"node_0"},"properties":{},"effects":[{"type":"raw_stat","bonuses":[{"type":"prop","abil":20,"name":"max","value":5}]},{"type":"stat_scaling","slider":true,"slider_name":"Winded","slider_max":5}],"id":47},{"display_name":"Cheaper Ice Snake II","desc":"Reduce the Mana cost of Ice Snake.","base_abil":3,"parents":[42,52],"dependencies":[],"blockers":[],"cost":1,"display":{"row":27,"col":1,"icon":"node_0"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":4,"cost":-5}],"id":48},{"display_name":"Cheaper Meteor II","desc":"Reduce the Mana cost of Meteor.","base_abil":0,"parents":[52,43,44],"dependencies":[],"blockers":[],"cost":1,"display":{"row":27,"col":5,"icon":"node_0"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":3,"cost":-5}],"id":49},{"display_name":"Chaos Explosion","desc":"When your Mana Bank reaches 120, casting Arcane Transfer will rapidly unleash the last 3 spells you've cast in order.","base_abil":22,"archetype":"Arcanist","archetype_req":8,"parents":[45],"dependencies":[22],"blockers":[],"cost":2,"display":{"row":27,"col":8,"icon":"node_3"},"properties":{},"effects":[],"id":50},{"display_name":"Arcane Power","desc":"Meteor and Ice Snake will add +2 Mana to your Mana Bank for each aggressive mob you hit.","base_abil":22,"archetype":"Arcanist","archetype_req":0,"parents":[56],"dependencies":[22],"blockers":[],"cost":1,"display":{"row":29,"col":6,"icon":"node_0"},"properties":{},"effects":[],"id":51},{"display_name":"Explosive Entrance","desc":"Deal Damage in an area on the location you Teleport to.","base_abil":1,"parents":[48,49],"dependencies":[1],"blockers":[],"cost":2,"display":{"row":27,"col":3,"icon":"node_1"},"properties":{"aoe":3},"effects":[{"type":"add_spell_prop","target_part":"Explosion Damage","base_spell":2,"multipliers":[50,0,0,0,30,0]},{"type":"add_spell_prop","behavior":"modify","target_part":"Total Damage","base_spell":2,"hits":{"Explosion Damage":1}}],"id":52},{"display_name":"Gust","desc":"Ice Snake will add +1 Winded to enemies and deal more damage.","base_abil":3,"archetype":"Riftwalker","archetype_req":7,"parents":[48,52],"dependencies":[3],"blockers":[],"cost":2,"display":{"row":28,"col":2,"icon":"node_1"},"properties":{},"effects":[{"type":"add_spell_prop","target_part":"Ice Snake","base_spell":4,"multipliers":[0,0,0,0,0,20]}],"id":53},{"display_name":"Time Dilation","desc":"When sprinting, create an area that increases the speed of all allies the longer they run in it. (Step out or stop running to cancel)","archetype":"Riftwalker","archetype_req":7,"parents":[48],"dependencies":[],"blockers":[],"cost":2,"display":{"row":28,"col":0,"icon":"node_2"},"properties":{},"effects":[],"id":54},{"display_name":"Better Ophanim","desc":"Increase your maximum orbs from Ophanim by +1.","archetype":"Light Bender","archetype_req":0,"base_abil":21,"parents":[49],"_parents":["Explosive Entrance","Cheaper Meteor II"],"dependencies":[21],"blockers":[],"cost":1,"display":{"row":28,"col":4,"icon":"node_0"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":3,"target_part":"Per Melee (max)","hits":{"Per Orb":1}}],"id":55},{"display_name":"Arctic Snake","desc":"Ice Snake will freeze enemies completely for 2s.","base_abil":3,"parents":[50],"dependencies":[3],"blockers":[],"cost":2,"display":{"row":28,"col":7,"icon":"node_1"},"properties":{},"effects":[],"id":56},{"display_name":"Devitalize","desc":"Enemies will deal -2% damage for every Winded they have.","base_abil":20,"archetype":"Riftwalker","archetype_req":5,"parents":[58,59],"dependencies":[],"blockers":[],"cost":2,"display":{"row":32,"col":1,"icon":"node_1"},"properties":{},"effects":[],"id":57},{"display_name":"More Winded II","desc":"Incrase your maximum Winded by +5.","base_abil":20,"archetype":"Riftwalker","archetype_req":0,"parents":[54],"_parents":["Time Dilation","Dynamic Faith"],"dependencies":[20],"blockers":[],"cost":1,"display":{"row":31,"col":0,"icon":"node_0"},"properties":{},"effects":[{"type":"raw_stat","bonuses":[{"type":"prop","abil":20,"name":"max","value":5}]},{"type":"stat_scaling","slider":true,"slider_name":"Winded","slider_max":5}],"id":58},{"display_name":"Dynamic Faith","desc":"For every 2% Sprint you have from items, gain +1% Thunder Damage (Max 100%)","parents":[58,61],"dependencies":[],"blockers":[],"cost":1,"display":{"row":31,"col":2,"icon":"node_0"},"properties":{},"effects":[{"type":"stat_scaling","slider":false,"inputs":[{"type":"stat","name":"sprint"}],"output":{"type":"stat","name":"tDamPct"},"scaling":[0.5],"max":100}],"id":59},{"display_name":"Divination","desc":"Increase your maximum orbs from Ophanim by +3 and reduce their damage.","base_abil":21,"archetype":"Light Bender","archetype_req":0,"parents":[59,61],"dependencies":[21],"blockers":[],"cost":2,"display":{"row":32,"col":3,"icon":"node_2"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":3,"target_part":"Per Orb","multipliers":[-50,0,-10,0,0,0]},{"type":"add_spell_prop","base_spell":3,"target_part":"Per Melee (max)","hits":{"Per Orb":3}}],"id":60},{"display_name":"Healthier Ophanim II","desc":"Increase the health of your orbs from Ophanim by +3000.","base_abil":21,"archetype":"Light Bender","archetype_req":0,"parents":[55],"dependencies":[40],"blockers":[],"cost":1,"display":{"row":31,"col":4,"icon":"node_0"},"properties":{},"effects":[],"id":61},{"display_name":"Sunflare","desc":"After healing 400% of your max health within 10s, your next Heal will make every nearby ally temporarily immune.","archetype":"Light Bender","archetype_req":12,"base_abil":2,"parents":[61],"dependencies":[],"blockers":[],"cost":2,"display":{"row":32,"col":5,"icon":"node_3"},"properties":{"aoe":12,"duration":5},"effects":[],"id":62},{"display_name":"Larger Mana Bank III","desc":"Increase your maximum Mana Bank by +30.","archetype":"Arcanist","archetype_req":0,"base_abil":22,"parents":[56],"dependencies":[22],"blockers":[],"cost":1,"display":{"row":31,"col":7,"icon":"node_0"},"properties":{},"effects":[],"id":63},{"display_name":"Arcane Overflow","desc":"Arcane Transfer will allow you to overflow your mana over its maximum limits.","archetype":"Arcanist","archetype_req":12,"base_abil":22,"parents":[63],"dependencies":[22],"blockers":[],"cost":2,"display":{"row":33,"col":7,"icon":"node_3"},"properties":{},"effects":[],"id":64},{"display_name":"Memory Recollection","desc":"Chaos Explosion will cast +2 spells.","archetype":"Arcanist","archetype_req":0,"base_abil":22,"parents":[64],"dependencies":[50],"blockers":[],"cost":1,"display":{"row":34,"col":8,"icon":"node_0"},"properties":{},"effects":[],"id":65},{"display_name":"Manastorm","desc":"If you have more than 100 Mana, casting a spell will give you +10 mana over 5s.","archetype":"Arcanist","archetype_req":1,"parents":[69,64,62],"dependencies":[],"blockers":[],"cost":2,"display":{"row":34,"col":5,"icon":"node_1"},"properties":{},"effects":[],"id":66},{"display_name":"Better Lightweaver","desc":"Increase your Max Orbs by +2.","archetype":"Light Bender","archetype_req":0,"base_abil":43,"parents":[69,66],"dependencies":[43],"blockers":[],"cost":1,"display":{"row":35,"col":4,"icon":"node_0"},"properties":{},"effects":[{"type":"add_spell_prop","target_part":"Orb Damage","hits":{"Single Orb":2}}],"id":67},{"display_name":"Timelock","desc":"Holding shift and casting Heal will absorb all Winded on nearby enemies and make you Timelocked. While Timelocked, your mana will not be depleted and you become immovable from outside forces. Enemies will recieve Winded damage from all absorbed stacks. (Max 30)","archetype":"Riftwalker","archetype_req":12,"parents":[58],"dependencies":[],"blockers":[],"cost":2,"display":{"row":34,"col":0,"icon":"node_3"},"properties":{},"effects":[],"id":68},{"display_name":"Cheaper Heal II","desc":"Reduce the Mana cost of Heal.","base_abil":2,"parents":[68,66],"dependencies":[],"blockers":[],"cost":1,"display":{"row":34,"col":2,"icon":"node_0"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":1,"cost":-5}],"id":69}]} \ No newline at end of file +const atrees={"Archer":[{"display_name":"Arrow Shield","desc":"Create a shield around you that deal damage and knockback mobs when triggered. (2 Charges)","parents":[60,34],"dependencies":[],"blockers":[],"cost":1,"display":{"row":9,"col":6,"icon":"node_archer"},"properties":{"charges":2,"duration":60,"aoe":5000},"effects":[{"type":"replace_spell","name":"Arrow Shield","cost":30,"base_spell":4,"display":"Total Damage","parts":[{"name":"Shield Damage","type":"damage","multipliers":[90,0,0,0,0,10]},{"name":"Total Damage","type":"total","hits":{"Shield Damage":2}}]}],"id":0},{"display_name":"Escape","desc":"Throw yourself backward to avoid danger. (Hold shift while escaping to cancel)","parents":[3],"dependencies":[],"blockers":[],"cost":1,"display":{"row":7,"col":4,"icon":"node_archer"},"properties":{"aoe":0,"range":0},"effects":[{"type":"replace_spell","name":"Escape","cost":25,"base_spell":2,"display":"","parts":[]}],"id":1},{"display_name":"Arrow Bomb","desc":"Throw a long-range arrow that explodes and deal high damage in a large area. (Self-damage for 25% of your DPS)","parents":[],"dependencies":[],"blockers":[],"cost":1,"display":{"row":0,"col":4,"icon":"node_archer"},"properties":{"aoe":4.5,"range":26},"effects":[{"type":"replace_spell","name":"Arrow Bomb","cost":50,"base_spell":3,"spell_type":"damage","display":"Total Damage","parts":[{"name":"Arrow Bomb","type":"damage","multipliers":[160,0,0,0,20,0]},{"name":"Total Damage","type":"total","hits":{"Arrow Bomb":1}}]}],"id":2},{"display_name":"Heart Shatter","desc":"If you hit a mob directly with Arrow Bomb, shatter its heart and deal bonus damage.","base_abil":2,"parents":[31],"dependencies":[],"blockers":[],"cost":1,"display":{"row":4,"col":4,"icon":"node_1"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":3,"target_part":"Heart Shatter","multipliers":[100,0,0,0,0,0]},{"type":"add_spell_prop","base_spell":3,"target_part":"Total Damage","hits":{"Heart Shatter":1}}],"id":3},{"display_name":"Fire Creep","desc":"Arrow Bomb will leak a trail of fire for 6s, Damaging enemies that walk into it every 0.4s.","base_abil":2,"parents":[68,39,5],"dependencies":[],"blockers":[],"cost":2,"display":{"row":16,"col":6,"icon":"node_1"},"properties":{"aoe":0.8,"duration":6},"effects":[{"type":"add_spell_prop","base_spell":3,"target_part":"Fire Creep","multipliers":[30,0,0,0,20,0]},{"type":"add_spell_prop","base_spell":3,"target_part":"Total Burn Damage","hits":{"Fire Creep":15}}],"id":4},{"display_name":"Bryophyte Roots","desc":"When you hit an enemy with Arrow Storm, create an area that slows them down and deals damage every 0.4s.","base_abil":7,"archetype":"Trapper","archetype_req":1,"parents":[4,35],"dependencies":[7],"blockers":[],"cost":2,"display":{"row":16,"col":8,"icon":"node_1"},"properties":{"aoe":2,"duration":5},"effects":[{"type":"add_spell_prop","base_spell":1,"target_part":"Bryophyte Roots","cost":0,"multipliers":[40,20,0,0,0,0]},{"type":"add_spell_prop","base_spell":1,"target_part":"Total Roots Damage","hits":{"Bryophyte Roots":12}}],"id":5},{"display_name":"Nimble String","desc":"Arrow Storm throw out +6 arrows per stream and shoot twice as fast.","base_abil":7,"parents":[36,69],"dependencies":[7],"blockers":[68],"cost":2,"display":{"row":15,"col":2,"icon":"node_1"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":1,"target_part":"Single Arrow","multipliers":[-15,0,0,0,0,0]},{"type":"add_spell_prop","base_spell":1,"target_part":"Single Stream","hits":{"Single Arrow":6}}],"id":6},{"display_name":"Arrow Storm","desc":"Shoot a stream of 8 arrows, dealing significant damage to close mobs and pushing them back.","parents":[58,34],"dependencies":[],"blockers":[],"cost":1,"display":{"row":9,"col":2,"icon":"node_archer"},"properties":{"range":16},"effects":[{"type":"replace_spell","name":"Arrow Storm","cost":40,"base_spell":1,"spell_type":"damage","display":"Total Damage","parts":[{"name":"Single Arrow","multipliers":[30,0,10,0,0,0]},{"name":"Single Stream","hits":{"Single Arrow":8}},{"name":"Total Damage","hits":{"Single Stream":1}}]}],"id":7},{"display_name":"Guardian Angels","desc":"Your protective arrows from Arrow Shield will become sentient bows, dealing damage up to 8 times each to nearby enemies. (Arrow Shield will no longer push nearby enemies)","archetype":"Boltslinger","archetype_req":3,"base_abil":0,"parents":[59,67],"dependencies":[0],"blockers":[],"cost":2,"display":{"row":19,"col":1,"icon":"node_3"},"properties":{"range":4,"duration":60,"shots":8,"charges":2},"effects":[{"type":"replace_spell","name":"Guardian Angels","base_spell":4,"display":"Total Damage","parts":[{"name":"Single Arrow","type":"damage","multipliers":[30,0,0,0,0,10]},{"name":"Single Bow","type":"total","hits":{"Single Arrow":8}},{"name":"Total Damage","type":"total","hits":{"Single Bow":2}}]}],"id":8},{"display_name":"Windy Feet","desc":"When casting Escape, give speed to yourself and nearby allies.","base_abil":1,"parents":[7],"dependencies":[],"blockers":[],"cost":1,"display":{"row":10,"col":1,"icon":"node_0"},"properties":{"aoe":8,"duration":120},"effects":[{"type":"stat_bonus","toggle":"Windy Feet","bonuses":[{"type":"stat","name":"spd","value":20}]}],"id":9},{"display_name":"Basaltic Trap","desc":"When you hit the ground with Arrow Bomb, leave a Trap that damages enemies. (Max 2 Traps)","archetype":"Trapper","archetype_req":2,"parents":[5],"dependencies":[],"blockers":[],"cost":2,"display":{"row":19,"col":8,"icon":"node_3"},"properties":{"aoe":7,"traps":2},"effects":[{"type":"replace_spell","name":"Basaltic Trap","base_spell":7,"display":"Trap Damage","parts":[{"name":"Trap Damage","type":"damage","multipliers":[140,30,0,0,30,0]}]}],"id":10},{"display_name":"Windstorm","desc":"Arrow Storm shoot +1 stream of arrows, and each stream shoots +2 arrows, effectively doubling its damage.","base_abil":7,"parents":[8,33],"dependencies":[],"blockers":[68],"cost":2,"display":{"row":21,"col":1,"icon":"node_1"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":1,"target_part":"Single Arrow","multipliers":[-10,0,-2,0,0,2]},{"type":"add_spell_prop","base_spell":1,"target_part":"Total Damage","hits":{"Single Stream":1}},{"type":"add_spell_prop","base_spell":1,"target_part":"Single Stream","cost":0,"hits":{"Single Arrow":2}}],"id":11},{"display_name":"Grappling Hook","base_abil":1,"desc":"When casting Escape, throw a hook that pulls you when hitting a block. If you hit an enemy, pull them towards you instead. (Escape will not throw you backward anymore)","archetype":"Trapper","archetype_req":0,"parents":[61,40,33],"dependencies":[],"blockers":[20],"cost":2,"display":{"row":21,"col":5,"icon":"node_2"},"properties":{"range":26},"effects":[],"id":12},{"display_name":"Implosion","desc":"Arrow bomb will pull enemies towards you. If a trap is nearby, it will pull them towards it instead. Increase Heart Shatter's damage.","archetype":"Trapper","archetype_req":0,"base_abil":2,"parents":[12,40],"dependencies":[],"blockers":[],"cost":2,"display":{"row":22,"col":6,"icon":"node_1"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":3,"target_part":"Heart Shatter","multipliers":[40,0,0,0,0,0]}],"id":13},{"display_name":"Twain's Arc","desc":"When you have 2+ Focus, holding shift will summon the Twain's Arc. Charge it up to shoot a destructive long-range beam. (Damage is dealt as Main Attack Damage)","archetype":"Sharpshooter","archetype_req":4,"parents":[62,64],"dependencies":[61],"blockers":[],"cost":2,"display":{"row":25,"col":4,"icon":"node_2"},"properties":{"range":64,"focusReq":2},"effects":[{"type":"replace_spell","name":"Twain's Arc","base_spell":5,"scaling":"melee","use_atkspd":false,"display":"Single Shot","parts":[{"name":"Single Shot","type":"damage","multipliers":[200,0,0,0,0,0]}]}],"id":14},{"display_name":"Fierce Stomp","desc":"When using Escape, hold shift to quickly drop down and deal damage.","archetype":"Boltslinger","archetype_req":0,"base_abil":1,"parents":[42,64],"dependencies":[],"blockers":[],"cost":2,"display":{"row":26,"col":1,"icon":"node_1"},"properties":{"aoe":4},"effects":[{"type":"add_spell_prop","base_spell":2,"target_part":"Fierce Stomp","cost":0,"multipliers":[100,0,0,0,0,0]},{"type":"add_spell_prop","base_spell":2,"target_part":"Stomp Damage","cost":0,"hits":{"Fierce Stomp":1},"display":"Stomp Damage"}],"id":15},{"display_name":"Scorched Earth","desc":"Fire Creep become much stronger.","archetype":"Sharpshooter","archetype_req":0,"parents":[14],"dependencies":[4],"blockers":[],"cost":1,"display":{"row":26,"col":5,"icon":"node_1"},"properties":{"duration":2,"aoe":0.4},"effects":[{"type":"add_spell_prop","base_spell":3,"target_part":"Fire Creep","multipliers":[10,0,0,0,5,0]}],"id":16},{"display_name":"Leap","desc":"When you double tap jump, leap foward. (2s Cooldown)","archetype":"Boltslinger","archetype_req":5,"parents":[42,55],"dependencies":[],"blockers":[],"cost":2,"display":{"row":28,"col":0,"icon":"node_1"},"properties":{"cooldown":2},"effects":[],"id":17},{"display_name":"Shocking Bomb","desc":"Arrow Bomb will not be affected by gravity, and all damage conversions become Thunder.","archetype":"Sharpshooter","archetype_req":5,"base_abil":2,"parents":[14,44,55],"dependencies":[2],"blockers":[],"cost":2,"display":{"row":28,"col":4,"icon":"node_1"},"properties":{"gravity":0},"effects":[{"type":"convert_spell_conv","target_part":"all","base_spell":3,"conversion":"Thunder"}],"id":18},{"display_name":"Mana Trap","desc":"Your Traps will give you 2.85 Mana per second when you stay close to them.","archetype":"Trapper","archetype_req":5,"base_abil":10,"parents":[43,44],"dependencies":[],"blockers":[],"cost":2,"display":{"row":28,"col":8,"icon":"node_3"},"properties":{"range":16,"manaRegen":2.85},"effects":[{"type":"add_spell_prop","base_spell":3,"cost":10}],"id":19},{"display_name":"Escape Artist","desc":"When casting Escape, release 120 arrows towards the ground.","archetype":"Boltslinger","archetype_req":0,"base_abil":1,"parents":[46,17],"dependencies":[],"blockers":[12],"cost":2,"display":{"row":31,"col":0,"icon":"node_1"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":2,"target_part":"Per Arrow","multipliers":[20,0,10,0,0,0]},{"type":"add_spell_prop","base_spell":2,"target_part":"Max Damage (Escape Artist)","hits":{"Per Arrow":120},"display":"Max Damage (Escape Artist)"}],"id":20},{"display_name":"Initiator","desc":"If you do not damage an enemy for 5s or more, your next sucessful hit will deal +50% damage and add +1 Focus.","archetype":"Sharpshooter","archetype_req":5,"parents":[18,44,47],"dependencies":[61],"blockers":[],"cost":2,"display":{"row":31,"col":5,"icon":"node_2"},"properties":{},"effects":[],"id":21},{"display_name":"Call of the Hound","desc":"Arrow Shield summon a Hound that will attack and drag aggressive enemies towards your traps.","archetype":"Trapper","archetype_req":0,"base_abil":0,"parents":[21,47],"dependencies":[0],"blockers":[],"cost":2,"display":{"row":32,"col":7,"icon":"node_2"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":4,"target_part":"Hound Damage","multipliers":[40,0,0,0,0,0]}],"id":22},{"display_name":"Arrow Hurricane","desc":"Arrow Storm will shoot +2 stream of arrows.","archetype":"Boltslinger","archetype_req":8,"base_abil":7,"parents":[48,20],"dependencies":[],"blockers":[68],"cost":2,"display":{"row":33,"col":0,"icon":"node_3"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":1,"target_part":"Total Damage","hits":{"Single Stream":2}}],"id":23},{"display_name":"Geyser Stomp","desc":"Fierce Stomp will create geysers, dealing more damage and vertical knockback.","base_abil":1,"parents":[56],"dependencies":[15],"blockers":[],"cost":2,"display":{"row":37,"col":1,"icon":"node_1"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":2,"target_part":"Geyser Stomp","multipliers":[0,0,0,50,0,0]},{"type":"add_spell_prop","base_spell":2,"target_part":"Stomp Damage","hits":{"Geyser Stomp":1}},{"type":"raw_stat","bonuses":[{"type":"prop","abil":15,"name":"aoe","value":1}]}],"id":24},{"display_name":"Crepuscular Ray","desc":"If you have 5 Focus, casting Arrow Storm will make you levitate and shoot 20 homing arrows per second until you run out of Focus. While in that state, you will lose 1 Focus per second.","archetype":"Sharpshooter","archetype_req":10,"parents":[49],"dependencies":[7],"blockers":[],"cost":2,"display":{"row":37,"col":4,"icon":"node_3"},"properties":{},"effects":[{"type":"replace_spell","name":"Crepuscular Ray","base_spell":6,"display":"DPS","parts":[{"name":"Single Arrow","multipliers":[20,0,0,5,0,0]},{"name":"DPS","hits":{"Single Arrow":20}},{"name":"Total Damage","hits":{"DPS":7}}]}],"id":25},{"display_name":"Grape Bomb","desc":"Arrow bomb will throw 3 additional smaller bombs when exploding.","base_abil":2,"parents":[51],"dependencies":[],"blockers":[],"cost":2,"display":{"row":37,"col":7,"icon":"node_2"},"properties":{"aoe":2},"effects":[{"type":"add_spell_prop","base_spell":3,"target_part":"Grape Bomb","multipliers":[30,0,0,0,10,0]},{"type":"add_spell_prop","base_spell":3,"target_part":"Total Damage","hits":{"Grape Bomb":3}}],"id":26},{"display_name":"Tangled Traps","desc":"Your Traps will be connected by a rope that deals damage to enemies every 0.2s.","archetype":"Trapper","archetype_req":0,"base_abil":10,"parents":[26],"dependencies":[10],"blockers":[],"cost":2,"display":{"row":38,"col":6,"icon":"node_1"},"properties":{"attackSpeed":0.2},"effects":[{"type":"add_spell_prop","base_spell":7,"target_part":"Line Damage Tick","multipliers":[20,0,0,0,0,20]},{"type":"add_spell_prop","base_spell":7,"target_part":"DPS","hits":{"Line Damage Tick":5}}],"id":27},{"display_name":"Snow Storm","desc":"Enemies near you will be slowed down.","parents":[24,63],"dependencies":[],"blockers":[],"cost":2,"display":{"row":39,"col":2,"icon":"node_2"},"properties":{"range":2.5,"slowness":0.3},"effects":[],"id":28},{"display_name":"All-Seeing Panoptes","desc":"Your bows from Guardian Angels become all-seeing, increasing their range, damage and letting them shoot up to +5 times each.","archetype":"Boltslinger","archetype_req":11,"base_abil":0,"parents":[28],"dependencies":[8],"blockers":[],"cost":2,"display":{"row":40,"col":1,"icon":"node_3"},"properties":{"range":8,"shots":5},"effects":[{"type":"add_spell_prop","base_spell":4,"target_part":"Single Arrow","multipliers":[0,0,0,0,10,0]},{"type":"add_spell_prop","base_spell":4,"target_part":"Single Bow","hits":{"Single Arrow":5}}],"id":29},{"display_name":"Minefield","desc":"Allow you to place +6 Traps, but with reduced damage and range.","archetype":"Trapper","archetype_req":10,"base_abil":10,"parents":[26,53],"dependencies":[10],"blockers":[],"cost":2,"display":{"row":40,"col":7,"icon":"node_3"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":8,"target_part":"Trap Damage","cost":0,"multipliers":[-80,0,0,0,0,0]},{"type":"raw_stat","bonuses":[{"type":"prop","abil":10,"name":"aoe","value":-2},{"type":"prop","abil":10,"name":"traps","value":6}]}],"id":30},{"display_name":"Bow Proficiency I","desc":"Improve your Main Attack's damage and range when using a bow.","base_abil":999,"parents":[2],"dependencies":[],"blockers":[],"cost":1,"display":{"row":2,"col":4,"icon":"node_0"},"properties":{},"effects":[{"type":"raw_stat","bonuses":[{"type":"stat","name":"mdPct","value":5}]}],"id":31},{"display_name":"Cheaper Arrow Bomb","desc":"Reduce the Mana cost of Arrow Bomb.","base_abil":2,"parents":[31],"dependencies":[],"blockers":[],"cost":1,"display":{"row":2,"col":6,"icon":"node_0"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":3,"cost":-10}],"id":32},{"display_name":"Cheaper Arrow Storm","desc":"Reduce the Mana cost of Arrow Storm.","base_abil":7,"parents":[12,11,61],"dependencies":[],"blockers":[],"cost":1,"display":{"row":21,"col":3,"icon":"node_0"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":1,"cost":-5}],"id":33},{"display_name":"Cheaper Escape","desc":"Reduce the Mana cost of Escape.","base_abil":1,"parents":[7,0],"dependencies":[],"blockers":[],"cost":1,"display":{"row":9,"col":4,"icon":"node_0"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":2,"cost":-5}],"id":34},{"display_name":"Earth Mastery","base_abil":998,"desc":"Increases your base damage from all Earth attacks","archetype":"Trapper","archetype_req":0,"parents":[0],"dependencies":[],"blockers":[],"cost":1,"display":{"row":13,"col":8,"icon":"node_0"},"properties":{},"effects":[{"type":"raw_stat","bonuses":[{"type":"stat","name":"eDamPct","value":20},{"type":"stat","name":"eDamAddMin","value":2},{"type":"stat","name":"eDamAddMax","value":4}]}],"id":35},{"display_name":"Thunder Mastery","base_abil":998,"desc":"Increases your base damage from all Thunder attacks","archetype":"Boltslinger","archetype_req":0,"parents":[7,39,34],"dependencies":[],"blockers":[],"cost":1,"display":{"row":13,"col":2,"icon":"node_0"},"properties":{},"effects":[{"type":"raw_stat","bonuses":[{"type":"stat","name":"tDamPct","value":10},{"type":"stat","name":"tDamAddMin","value":1},{"type":"stat","name":"tDamAddMax","value":8}]}],"id":36},{"display_name":"Water Mastery","base_abil":998,"desc":"Increases your base damage from all Water attacks","archetype":"Sharpshooter","archetype_req":0,"parents":[34,36,39],"dependencies":[],"blockers":[],"cost":1,"display":{"row":14,"col":4,"icon":"node_0"},"properties":{},"effects":[{"type":"raw_stat","bonuses":[{"type":"stat","name":"wDamPct","value":15},{"type":"stat","name":"wDamAddMin","value":2},{"type":"stat","name":"wDamAddMax","value":4}]}],"id":37},{"display_name":"Air Mastery","base_abil":998,"desc":"Increases base damage from all Air attacks","archetype":"Boltslinger","archetype_req":0,"parents":[7],"dependencies":[],"blockers":[],"cost":1,"display":{"row":13,"col":0,"icon":"node_0"},"properties":{},"effects":[{"type":"raw_stat","bonuses":[{"type":"stat","name":"aDamPct","value":15},{"type":"stat","name":"aDamAddMin","value":3},{"type":"stat","name":"aDamAddMax","value":4}]}],"id":38},{"display_name":"Fire Mastery","base_abil":998,"desc":"Increases base damage from all Fire attacks","archetype":"Sharpshooter","archetype_req":0,"parents":[36,0,34],"dependencies":[],"blockers":[],"cost":1,"display":{"row":13,"col":6,"icon":"node_0"},"properties":{},"effects":[{"type":"raw_stat","bonuses":[{"type":"stat","name":"fDamPct","value":15},{"type":"stat","name":"fDamAddMin","value":3},{"type":"stat","name":"fDamAddMax","value":5}]}],"id":39},{"display_name":"More Shields","desc":"Give +2 charges to Arrow Shield.","base_abil":0,"parents":[12,10],"dependencies":[0],"blockers":[],"cost":1,"display":{"row":21,"col":7,"icon":"node_0"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":4,"target_part":"Total Damage","hits":{"Shield Damage":2,"Single Bow":2}},{"type":"raw_stat","bonuses":[{"type":"prop","abil":0,"name":"charges","value":2}]}],"id":40},{"display_name":"Stormy Feet","desc":"Windy Feet will last longer and add more speed.","archetype":"Boltslinger","base_abil":1,"parents":[11],"dependencies":[9],"blockers":[],"cost":1,"display":{"row":23,"col":1,"icon":"node_0"},"properties":{"duration":60},"effects":[{"type":"stat_bonus","toggle":"Windy Feet","bonuses":[{"type":"stat","name":"spdPct","value":20}]}],"id":41},{"display_name":"Refined Gunpowder","desc":"Increase the damage of Arrow Bomb.","base_abil":2,"parents":[11,64],"dependencies":[],"blockers":[],"cost":1,"display":{"row":25,"col":0,"icon":"node_0"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":3,"target_part":"Arrow Bomb","multipliers":[50,0,0,0,0,0]}],"id":42},{"display_name":"More Traps","desc":"Increase the maximum amount of active Traps you can have by +2.","archetype":"Trapper","archetype_req":0,"base_abil":10,"parents":[54],"dependencies":[10],"blockers":[],"cost":1,"display":{"row":26,"col":8,"icon":"node_0"},"properties":{},"effects":[{"type":"raw_stat","bonuses":[{"type":"prop","abil":10,"name":"traps","value":2}]}],"id":43},{"display_name":"Better Arrow Shield","desc":"Arrow Shield will gain additional area of effect, knockback and damage.","archetype":"Sharpshooter","archetype_req":0,"base_abil":0,"parents":[19,18,14],"dependencies":[0],"blockers":[],"cost":1,"display":{"row":28,"col":6,"icon":"node_0"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":3,"target_part":"Arrow Shield","behavior":"modify","multipliers":[40,0,0,0,0,0]},{"type":"raw_stat","bonuses":[{"type":"prop","abil":0,"behavior":"modify","name":"aoe","value":1}]}],"id":44},{"display_name":"Better Leap","desc":"Reduce leap's cooldown by 1s.","archetype":"Boltslinger","archetype_req":0,"base_abil":17,"parents":[17,55],"dependencies":[17],"blockers":[],"cost":1,"display":{"row":29,"col":1,"icon":"node_0"},"properties":{},"effects":[{"type":"raw_stat","bonuses":[{"type":"prop","abil":17,"name":"cooldown","value":-1}]}],"id":45},{"display_name":"Better Guardian Angels","desc":"Your Guardian Angels can shoot +4 arrows before disappearing.","archetype":"Boltslinger","archetype_req":0,"base_abil":0,"parents":[20,55],"dependencies":[8],"blockers":[],"cost":1,"display":{"row":31,"col":2,"icon":"node_0"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":4,"target_part":"Single Bow","hits":{"Single Arrow":4}}],"id":46},{"display_name":"Cheaper Arrow Storm (2)","desc":"Reduce the Mana cost of Arrow Storm.","base_abil":7,"parents":[21,19],"dependencies":[],"blockers":[],"cost":1,"display":{"row":31,"col":8,"icon":"node_0"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":1,"cost":-5}],"id":47},{"display_name":"Precise Shot","desc":"+30% Critical Hit Damage","parents":[46,49,23],"dependencies":[],"blockers":[],"cost":1,"display":{"row":33,"col":2,"icon":"node_0"},"properties":{},"effects":[{"type":"raw_stat","bonuses":[{"type":"stat","name":"critDamPct","value":30}]}],"id":48},{"display_name":"Cheaper Arrow Shield","desc":"Reduce the Mana cost of Arrow Shield.","base_abil":0,"parents":[48,21],"dependencies":[],"blockers":[],"cost":1,"display":{"row":33,"col":4,"icon":"node_0"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":4,"cost":-5}],"id":49},{"display_name":"Rocket Jump","desc":"Arrow Bomb's self-damage will knockback you farther away.","base_abil":2,"parents":[47,21],"dependencies":[2],"blockers":[],"cost":1,"display":{"row":33,"col":6,"icon":"node_0"},"properties":{},"effects":[],"id":50},{"display_name":"Cheaper Escape (2)","desc":"Reduce the Mana cost of Escape.","base_abil":1,"parents":[22,70],"dependencies":[],"blockers":[],"cost":1,"display":{"row":34,"col":7,"icon":"node_0"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":2,"cost":-5}],"id":51},{"display_name":"Stronger Hook","desc":"Increase your Grappling Hook's range, speed and strength.","archetype":"Trapper","archetype_req":5,"base_abil":1,"parents":[51],"dependencies":[12],"blockers":[],"cost":1,"display":{"row":35,"col":8,"icon":"node_0"},"properties":{},"effects":[{"type":"raw_stat","bonuses":[{"type":"prop","abil":12,"name":"range","value":8}]}],"id":52},{"display_name":"Cheaper Arrow Bomb (2)","desc":"Reduce the Mana cost of Arrow Bomb.","base_abil":2,"parents":[63,30],"dependencies":[],"blockers":[],"cost":1,"display":{"row":40,"col":5,"icon":"node_0"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":3,"cost":-5}],"id":53},{"display_name":"Bouncing Bomb","desc":"Arrow Bomb will bounce once when hitting a block or enemy","base_abil":2,"parents":[40],"dependencies":[],"blockers":[],"cost":2,"display":{"row":25,"col":7,"icon":"node_2"},"properties":{},"effects":[],"id":54},{"display_name":"Homing Shots","desc":"Your Main Attack arrows will follow nearby enemies and not be affected by gravity","archetype":"Sharpshooter","base_abil":999,"parents":[17,18],"dependencies":[],"blockers":[],"cost":2,"display":{"row":28,"col":2,"icon":"node_2"},"properties":{},"effects":[],"id":55},{"display_name":"Shrapnel Bomb","desc":"Arrow Bomb's explosion will fling 15 shrapnel, dealing damage in a large area","archetype":"Boltslinger","archetype_req":8,"base_abil":2,"parents":[23,48],"dependencies":[],"blockers":[],"cost":2,"display":{"row":34,"col":1,"icon":"node_1"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":3,"target_part":"Shrapnel Bomblet","multipliers":[40,0,0,0,20,0]}],"id":56},{"display_name":"Elusive","desc":"If you do not get hit for 8+ seconds, become immune to self-damage and remove Arrow Storm's recoil. (Dodging counts as not getting hit)","archetype":"Boltslinger","archetype_req":0,"parents":[24],"dependencies":[],"blockers":[],"cost":2,"display":{"row":38,"col":0,"icon":"node_1"},"properties":{},"effects":[],"id":57},{"display_name":"Double Shots","desc":"Double Main Attack arrows, but they deal -30% damage per arrow (harder to hit far enemies)","archetype":"Boltslinger","archetype_req":0,"base_abil":999,"parents":[1],"dependencies":[],"blockers":[60],"cost":1,"display":{"row":7,"col":2,"icon":"node_0"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":0,"target_part":"Single Shot","multipliers":[-30,0,0,0,0,0]},{"type":"add_spell_prop","base_spell":0,"target_part":"Total Damage","hits":{"Single Shot":2},"display":"Total Damage"}],"id":58},{"display_name":"Triple Shots","desc":"Triple Main Attack arrows, but they deal -20% damage per arrow","archetype":"Boltslinger","archetype_req":0,"base_abil":999,"parents":[69,67],"dependencies":[58],"blockers":[],"cost":1,"display":{"row":17,"col":0,"icon":"node_0"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":0,"target_part":"Single Shot","multipliers":[-20,0,0,0,0,0]},{"type":"add_spell_prop","base_spell":0,"target_part":"Total Damage","hits":{"Single Shot":1},"display":"Total Damage"}],"id":59},{"display_name":"Power Shots","desc":"Main Attack arrows have increased speed and knockback","archetype":"Sharpshooter","archetype_req":0,"base_abil":999,"parents":[1],"dependencies":[],"blockers":[58],"cost":1,"display":{"row":7,"col":6,"icon":"node_0"},"properties":{},"effects":[],"id":60},{"display_name":"Focus","desc":"When hitting an aggressive mob 5+ blocks away, gain +1 Focus (Max 3). Resets if you miss once","archetype":"Sharpshooter","archetype_req":2,"parents":[68],"dependencies":[],"blockers":[],"cost":2,"display":{"row":19,"col":4,"icon":"node_3"},"properties":{},"effects":[{"type":"stat_scaling","slider":true,"slider_name":"Focus","output":{"type":"stat","name":"damMult.Focus"},"scaling":[40],"slider_max":3}],"id":61},{"display_name":"More Focus","desc":"Add +2 max Focus","archetype":"Sharpshooter","archetype_req":0,"base_abil":61,"parents":[33,12],"dependencies":[61],"blockers":[],"cost":1,"display":{"row":22,"col":4,"icon":"node_0"},"properties":{},"effects":[{"type":"stat_scaling","slider":true,"slider_name":"Focus","slider_max":2,"output":{"type":"stat","name":"damMult.Focus"},"scaling":[-5]}],"id":62},{"display_name":"More Focus (2)","desc":"Add +2 max Focus","archetype":"Sharpshooter","archetype_req":0,"base_abil":61,"parents":[25,28],"dependencies":[61],"blockers":[],"cost":1,"display":{"row":39,"col":4,"icon":"node_0"},"properties":{},"effects":[{"type":"stat_scaling","slider":true,"slider_name":"Focus","slider_max":2,"output":{"type":"stat","name":"damMult.Focus"},"scaling":[-5]}],"id":63},{"display_name":"Traveler","desc":"For every 1% Walk Speed you have from items, gain +1 Raw Spell Damage (Max 100)","parents":[42,14],"dependencies":[],"blockers":[],"cost":1,"display":{"row":25,"col":2,"icon":"node_0"},"properties":{},"effects":[{"type":"stat_scaling","slider":false,"inputs":[{"type":"stat","name":"spd"}],"output":{"type":"stat","name":"sdRaw"},"scaling":[1],"max":100}],"id":64},{"display_name":"Patient Hunter","desc":"Your Traps will deal +20% more damage for every second they are active (Max +80%)","archetype":"Trapper","archetype_req":0,"base_abil":10,"parents":[40],"dependencies":[10],"blockers":[],"cost":2,"display":{"row":22,"col":8,"icon":"node_1"},"properties":{"max":80},"effects":[{"type":"stat_scaling","slider":true,"slider_name":"Trap Wait Time","slider_max":4,"output":{"type":"stat","name":"damMult.Basaltic:7.Trap Damage"},"slider_step":1,"scaling":[20]}],"id":65},{"display_name":"Stronger Patient Hunter","desc":"Add +80% Max Damage to Patient Hunter","archetype":"Trapper","archetype_req":0,"base_abil":10,"parents":[26],"dependencies":[65],"blockers":[],"cost":1,"display":{"row":38,"col":8,"icon":"node_0"},"properties":{},"effects":[{"type":"stat_scaling","slider":true,"slider_name":"Trap Wait Time","slider_max":4},{"type":"raw_stat","bonuses":[{"type":"prop","abil":65,"name":"max","value":80}]}],"id":66},{"display_name":"Frenzy","desc":"Every time you hit an enemy, briefly gain +6% Walk Speed (Max 200%). Decay -40% of the bonus every second","archetype":"Boltslinger","archetype_req":0,"parents":[59,6],"dependencies":[],"blockers":[],"cost":2,"display":{"row":17,"col":2,"icon":"node_1"},"properties":{},"effects":[{"type":"stat_scaling","slider":true,"slider_name":"Hits dealt","output":{"type":"stat","name":"spd"},"scaling":[6],"max":160}],"id":67},{"display_name":"Phantom Ray","desc":"Condense Arrow Storm into a single ray that damages enemies 10 times per second","base_abil":7,"parents":[37,4],"dependencies":[7],"blockers":[11,6,23],"cost":2,"display":{"row":16,"col":4,"icon":"node_2"},"properties":{},"effects":[{"type":"replace_spell","name":"Phantom Ray","base_spell":1,"spell_type":"damage","scaling":"spell","display":"Total Damage","parts":[{"name":"Single Arrow","type":"damage","multipliers":[25,0,5,0,0,0]},{"name":"Total Damage","type":"total","hits":{"Single Arrow":16}}]},{"type":"add_spell_prop","base_spell":1,"cost":-10}],"id":68},{"display_name":"Arrow Rain","desc":"When Arrow Shield loses its last charge, unleash 150 arrows raining down on enemies","base_abil":0,"parents":[6,38],"dependencies":[0],"blockers":[],"cost":2,"display":{"row":15,"col":0,"icon":"node_1"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":4,"target_part":"Arrow Rain (Per Arrow)","multipliers":[80,0,0,0,0,60]},{"type":"add_spell_prop","base_spell":4,"target_part":"Arrow Rain (Total)","hits":{"Arrow Rain (Per Arrow)":150}}],"id":69},{"display_name":"Decimator","desc":"Phantom Ray will increase its damage by 10% everytime you do not miss with it (Max 70%)","archetype":"Sharpshooter","archetype_req":0,"base_abil":7,"parents":[49,51],"dependencies":[68],"blockers":[],"cost":1,"display":{"row":34,"col":5,"icon":"node_1"},"properties":{},"effects":[{"type":"stat_scaling","slider":true,"slider_name":"Phantom Ray hits","slider_max":7,"output":{"type":"stat","name":"damMult.Decimator:1.Single Arrow"},"scaling":[10]}],"id":70}],"Warrior":[{"display_name":"Bash","desc":"Violently bash the ground, dealing high damage in a large area","parents":[],"dependencies":[],"blockers":[],"cost":1,"display":{"row":0,"col":4,"icon":"node_warrior"},"properties":{"aoe":4,"range":3},"effects":[{"type":"replace_spell","name":"Bash","cost":45,"base_spell":1,"spell_type":"damage","scaling":"spell","display":"Total Damage","parts":[{"name":"Single Hit","type":"damage","multipliers":[130,20,0,0,0,0]},{"name":"Total Damage","type":"total","hits":{"Single Hit":1}}]}],"id":0},{"display_name":"Spear Proficiency 1","desc":"Improve your Main Attack's damage and range w/ spear","base_abil":999,"parents":[0],"dependencies":[],"blockers":[],"cost":1,"display":{"row":2,"col":4,"icon":"node_0"},"properties":{"melee_range":1},"effects":[{"type":"raw_stat","bonuses":[{"type":"stat","name":"mdPct","value":5}]}],"id":1},{"display_name":"Cheaper Bash","desc":"Reduce the Mana cost of Bash","base_abil":0,"parents":[1],"dependencies":[],"blockers":[],"cost":1,"display":{"row":2,"col":2,"icon":"node_0"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":1,"cost":-10}],"id":2},{"display_name":"Double Bash","desc":"Bash will hit a second time at a farther range","parents":[1],"base_abil":0,"dependencies":[],"blockers":[],"cost":1,"display":{"row":4,"col":4,"icon":"node_1"},"properties":{"range":3},"effects":[{"type":"add_spell_prop","base_spell":1,"target_part":"Total Damage","cost":0,"hits":{"Single Hit":1}},{"type":"add_spell_prop","base_spell":1,"target_part":"Single Hit","cost":0,"multipliers":[-50,0,0,0,0,0]}],"id":3},{"display_name":"Charge","desc":"Charge forward at high speed (hold shift to cancel)","parents":[3],"dependencies":[],"blockers":[],"cost":1,"display":{"row":6,"col":4,"icon":"node_warrior"},"properties":{},"effects":[{"type":"replace_spell","name":"Charge","cost":25,"base_spell":2,"spell_type":"damage","scaling":"spell","display":"","parts":[]}],"id":4},{"display_name":"Heavy Impact","desc":"After using Charge, violently crash down into the ground and deal damage","base_abil":4,"parents":[8],"dependencies":[],"blockers":[],"cost":1,"display":{"row":9,"col":1,"icon":"node_1"},"properties":{"aoe":4},"effects":[{"type":"add_spell_prop","base_spell":2,"target_part":"Heavy Impact","cost":0,"multipliers":[100,0,0,0,0,0]},{"type":"add_spell_prop","base_spell":2,"target_part":"Contact Damage","display":"Contact Damage","hits":{"Heavy Impact":1}}],"id":5},{"display_name":"Vehement","desc":"For every 1% or 1 Raw Main Attack Damage you have from items, gain +2% Walk Speed (Max 20%)","archetype":"Fallen","archetype_req":0,"parents":[4],"dependencies":[],"blockers":[7],"cost":1,"display":{"row":6,"col":2,"icon":"node_0"},"properties":{},"effects":[{"type":"stat_scaling","slider":false,"inputs":[{"type":"stat","name":"mdPct"},{"type":"stat","name":"mdRaw"}],"output":{"type":"stat","name":"spd"},"scaling":[2,2],"max":20}],"id":6},{"display_name":"Tougher Skin","desc":"Harden your skin and become permanently +5% more resistant. For every 1% or 1 Raw Heath Regen you have from items, gain +10 Health (Max 100)","archetype":"Paladin","archetype_req":0,"parents":[4],"dependencies":[],"blockers":[6],"cost":1,"display":{"row":6,"col":6,"icon":"node_0"},"properties":{},"effects":[{"type":"raw_stat","bonuses":[{"type":"stat","name":"defMult.Base","value":5}]},{"type":"stat_scaling","slider":false,"inputs":[{"type":"stat","name":"hprRaw"},{"type":"stat","name":"hprPct"}],"output":{"type":"stat","name":"hpBonus"},"scaling":[10,10],"max":100}],"id":7},{"display_name":"Uppercut","desc":"Rocket enemies in the air and deal massive damage","parents":[6,9],"dependencies":[],"blockers":[],"cost":1,"display":{"row":8,"col":2,"icon":"node_warrior"},"properties":{"aoe":3,"range":5},"effects":[{"type":"replace_spell","name":"Uppercut","cost":45,"base_spell":3,"spell_type":"damage","scaling":"spell","display":"Total Damage","parts":[{"name":"Uppercut","multipliers":[200,40,40,0,0,0]},{"name":"Total Damage","hits":{"Uppercut":1}}]}],"id":8},{"display_name":"Cheaper Charge","desc":"Reduce the Mana cost of Charge","base_abil":4,"parents":[8,10],"dependencies":[],"blockers":[],"cost":1,"display":{"row":8,"col":4,"icon":"node_0"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":2,"cost":-5}],"id":9},{"display_name":"War Scream","desc":"Emit a terrorizing roar that deals damage, pull nearby enemies, and add damage resistance to yourself and allies","parents":[7,9],"dependencies":[],"blockers":[],"cost":1,"display":{"row":8,"col":6,"icon":"node_warrior"},"properties":{"duration":30,"aoe":12,"defense_bonus":10},"effects":[{"type":"replace_spell","name":"War Scream","cost":35,"base_spell":4,"spell_type":"damage","scaling":"spell","display":"Total Damage","parts":[{"name":"War Scream","multipliers":[50,0,0,0,50,0]},{"name":"Total Damage","hits":{"War Scream":1}}]}],"id":10},{"display_name":"Earth Mastery","base_abil":998,"desc":"Increases base damage from all Earth attacks","archetype":"Fallen","archetype_req":0,"parents":[8],"dependencies":[],"blockers":[],"cost":1,"display":{"row":10,"col":0,"icon":"node_0"},"properties":{},"effects":[{"type":"raw_stat","bonuses":[{"type":"stat","name":"eDamPct","value":20},{"type":"stat","name":"eDamAddMin","value":2},{"type":"stat","name":"eDamAddMax","value":4}]}],"id":11},{"display_name":"Thunder Mastery","base_abil":998,"desc":"Increases base damage from all Thunder attacks","archetype":"Fallen","archetype_req":0,"parents":[8,14,9],"dependencies":[],"blockers":[],"cost":1,"display":{"row":10,"col":2,"icon":"node_0"},"properties":{},"effects":[{"type":"raw_stat","bonuses":[{"type":"stat","name":"tDamPct","value":10},{"type":"stat","name":"tDamAddMin","value":1},{"type":"stat","name":"tDamAddMax","value":8}]}],"id":12},{"display_name":"Water Mastery","base_abil":998,"desc":"Increases base damage from all Water attacks","archetype":"Battle Monk","archetype_req":0,"parents":[9,12,14],"dependencies":[],"blockers":[],"cost":1,"display":{"row":11,"col":4,"icon":"node_0"},"properties":{},"effects":[{"type":"raw_stat","bonuses":[{"type":"stat","name":"wDamPct","value":15},{"type":"stat","name":"wDamAddMin","value":2},{"type":"stat","name":"wDamAddMax","value":4}]}],"id":13},{"display_name":"Air Mastery","base_abil":998,"desc":"Increases base damage from all Air attacks","archetype":"Battle Monk","archetype_req":0,"parents":[10,12,9],"dependencies":[],"blockers":[],"cost":1,"display":{"row":10,"col":6,"icon":"node_0"},"properties":{},"effects":[{"type":"raw_stat","bonuses":[{"type":"stat","name":"aDamPct","value":15},{"type":"stat","name":"aDamAddMin","value":3},{"type":"stat","name":"aDamAddMax","value":4}]}],"id":14},{"display_name":"Fire Mastery","base_abil":998,"desc":"Increases base damage from all Fire attacks","archetype":"Paladin","archetype_req":0,"parents":[10],"dependencies":[],"blockers":[],"cost":1,"display":{"row":10,"col":8,"icon":"node_0"},"properties":{},"effects":[{"type":"raw_stat","bonuses":[{"type":"stat","name":"fDamPct","value":15},{"type":"stat","name":"fDamAddMin","value":3},{"type":"stat","name":"fDamAddMax","value":5}]}],"id":15},{"display_name":"Quadruple Bash","desc":"Bash will hit 4 times at an even larger range","archetype":"Fallen","archetype_req":0,"base_abil":0,"parents":[11,17],"dependencies":[],"blockers":[],"cost":2,"display":{"row":12,"col":0,"icon":"node_1"},"properties":{"range":6},"effects":[{"type":"add_spell_prop","base_spell":1,"target_part":"Total Damage","hits":{"Single Hit":2}},{"type":"add_spell_prop","base_spell":1,"target_part":"Single Hit","multipliers":[-20,0,0,0,0,0]}],"id":16},{"display_name":"Fireworks","desc":"Mobs hit by Uppercut will explode mid-air and receive additional damage","archetype":"Fallen","archetype_req":0,"base_abil":8,"parents":[12,16],"dependencies":[],"blockers":[],"cost":2,"display":{"row":12,"col":2,"icon":"node_1"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":3,"target_part":"Fireworks","multipliers":[80,0,20,0,0,0]},{"type":"add_spell_prop","base_spell":3,"target_part":"Total Damage","hits":{"Fireworks":1}}],"id":17},{"display_name":"Half-Moon Swipe","desc":"Uppercut will deal a footsweep attack at a longer and wider angle. All elemental conversions become Water","archetype":"Battle Monk","archetype_req":1,"base_abil":8,"parents":[13],"dependencies":[8],"blockers":[],"cost":2,"display":{"row":13,"col":4,"icon":"node_1"},"properties":{"range":4},"effects":[{"type":"add_spell_prop","base_spell":3,"target_part":"Uppercut","cost":-10,"multipliers":[-70,0,0,30,0,0]}],"id":18},{"display_name":"Flyby Jab","desc":"Damage enemies in your way when using Charge","base_abil":4,"parents":[14,20],"dependencies":[],"blockers":[],"cost":2,"display":{"row":12,"col":6,"icon":"node_1"},"properties":{"aoe":2},"effects":[{"type":"add_spell_prop","base_spell":2,"target_part":"Flyby Jab","multipliers":[20,0,0,0,0,40]},{"type":"add_spell_prop","base_spell":2,"target_part":"Contact Damage","display":"Contact Damage","hits":{"Flyby Jab":1}}],"id":19},{"display_name":"Flaming Uppercut","desc":"Uppercut will light mobs on fire, dealing damage every 0.6 seconds","archetype":"Paladin","archetype_req":0,"base_abil":8,"parents":[15,19],"dependencies":[8],"blockers":[],"cost":2,"display":{"row":12,"col":8,"icon":"node_1"},"properties":{"duration":3,"tick":0.6},"effects":[{"type":"replace_spell","name":"Flaming Uppercut","base_spell":8,"display":"DPS","parts":[{"name":"Damage Tick","multipliers":[0,0,0,0,50,0]},{"name":"DPS","hits":{"Damage Tick":1.6666666666666667}},{"name":"Total Damage","hits":{"Damage Tick":5}}]}],"id":20},{"display_name":"Iron Lungs","desc":"War Scream deals more damage","archetype":"Paladin","archetype_req":0,"base_abil":10,"parents":[19,20],"dependencies":[],"blockers":[],"cost":1,"display":{"row":13,"col":7,"icon":"node_0"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":4,"target_part":"War Scream","cost":0,"multipliers":[30,0,0,0,0,30]}],"id":21},{"display_name":"Generalist","desc":"After casting 3 different spells in a row, your next spell will cost 5 mana","archetype":"Battle Monk","archetype_req":3,"parents":[23],"dependencies":[],"blockers":[],"cost":2,"display":{"row":15,"col":2,"icon":"node_3"},"properties":{},"effects":[],"id":22},{"display_name":"Counter","desc":"When dodging a nearby enemy attack, get 30% chance to instantly attack back","archetype":"Battle Monk","archetype_req":0,"parents":[18],"dependencies":[],"blockers":[],"cost":2,"display":{"row":15,"col":4,"icon":"node_1"},"properties":{"chance":30},"effects":[{"type":"replace_spell","name":"Counter","base_spell":5,"display":"Counter Damage","parts":[{"name":"Counter Damage","multipliers":[60,0,20,0,0,20]}]}],"id":23},{"display_name":"Mantle of the Bovemists","desc":"When casting War Scream, create a holy shield around you that reduces all incoming damage by 70% for 3 hits (20s cooldown)","archetype":"Paladin","archetype_req":3,"parents":[21],"dependencies":[10],"blockers":[],"cost":2,"display":{"row":15,"col":7,"icon":"node_3"},"properties":{"mantle_charge":3},"effects":[{"type":"raw_stat","toggle":true,"bonuses":[{"type":"stat","name":"defMult.Mantle","value":70}]}],"id":24},{"display_name":"Bak'al's Grasp","desc":"After casting War Scream, become Corrupted (15s Cooldown). You cannot heal while in that state. While Corrupted, every 2% of Health you lose will add +4 Raw Damage to your attacks (Max 120)","archetype":"Fallen","archetype_req":2,"parents":[16,17],"dependencies":[10],"blockers":[],"cost":2,"display":{"row":16,"col":1,"icon":"node_3"},"properties":{"cooldown":15},"effects":[{"type":"stat_scaling","slider":true,"slider_name":"Corrupted","slider_max":100,"slider_step":1,"output":{"type":"stat","name":"damRaw"},"max":120,"scaling":[2]}],"id":25},{"display_name":"Spear Proficiency 2","desc":"Improve your Main Attack's damage and range w/ spear","base_abil":999,"parents":[25,27],"dependencies":[],"blockers":[],"cost":1,"display":{"row":17,"col":0,"icon":"node_0"},"properties":{"melee_range":1},"effects":[{"type":"raw_stat","bonuses":[{"type":"stat","name":"mdPct","value":5}]}],"id":26},{"display_name":"Cheaper Uppercut","desc":"Reduce the Mana Cost of Uppercut","base_abil":8,"parents":[26,28,23],"dependencies":[],"blockers":[],"cost":1,"display":{"row":17,"col":3,"icon":"node_0"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":3,"cost":-5}],"id":27},{"display_name":"Aerodynamics","desc":"During Charge, you can steer and change direction","archetype":"Battle Monk","archetype_req":0,"base_abil":4,"parents":[27,29],"dependencies":[],"blockers":[],"cost":2,"display":{"row":17,"col":5,"icon":"node_1"},"properties":{},"effects":[],"id":28},{"display_name":"Provoke","desc":"Mobs damaged by War Scream will target only you for at least 5s. Reduce the Mana cost of War Scream","base_abil":10,"parents":[28,24],"dependencies":[],"blockers":[],"cost":2,"display":{"row":17,"col":7,"icon":"node_1"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":4,"cost":-5}],"id":29},{"display_name":"Precise Strikes","desc":"+30% Critical Hit Damage","parents":[27,26],"dependencies":[],"blockers":[],"cost":1,"display":{"row":18,"col":2,"icon":"node_0"},"properties":{},"effects":[{"type":"raw_stat","bonuses":[{"type":"stat","name":"critDamPct","value":30}]}],"id":30},{"display_name":"Air Shout","desc":"War Scream will fire a projectile that can go through walls and deal damage multiple times","base_abil":10,"parents":[28,29],"dependencies":[10],"blockers":[],"cost":2,"display":{"row":18,"col":6,"icon":"node_1"},"properties":{"attackRate":2},"effects":[{"type":"add_spell_prop","base_spell":4,"target_part":"Air Shout","multipliers":[40,0,0,0,0,10]}],"id":31},{"display_name":"Enraged Blow","desc":"While Corriupted, every 1% of Health you lose will increase your damage by +3% (Max 300%)","archetype":"Fallen","archetype_req":0,"base_abil":25,"parents":[26],"dependencies":[25],"blockers":[],"cost":2,"display":{"row":20,"col":0,"icon":"node_2"},"properties":{},"effects":[{"type":"stat_scaling","slider_name":"Corrupted","slider":true,"output":{"type":"stat","name":"damMult.Enraged"},"scaling":[3]}],"id":32},{"display_name":"Flying Kick","desc":"When using Charge, mobs hit will halt your momentum and get knocked back","archetype":"Battle Monk","archetype_req":1,"base_abil":4,"parents":[27,34],"dependencies":[],"blockers":[],"cost":2,"display":{"row":20,"col":3,"icon":"node_1"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":2,"target_part":"Flying Kick","multipliers":[150,0,0,20,0,30]},{"type":"add_spell_prop","base_spell":2,"target_part":"Flying Kick Max Damage","hits":{"Flying Kick":1},"display":"Flying Kick Max Damage"}],"id":33},{"display_name":"Stronger Mantle","desc":"Add +2 additional charges to Mantle of the Bovemists","archetype":"Paladin","archetype_req":0,"base_abil":24,"parents":[35,33],"dependencies":[24],"blockers":[],"cost":1,"display":{"row":20,"col":6,"icon":"node_0"},"properties":{},"effects":[{"type":"raw_stat","bonuses":[{"type":"prop","abil":24,"name":"mantle_charge","value":2}]}],"id":34},{"display_name":"Manachism","desc":"If you receive a hit that's less than 5% of your max HP, gain 10 Mana (1s Cooldown)","archetype":"Paladin","archetype_req":3,"parents":[34,29],"dependencies":[],"blockers":[],"cost":2,"display":{"row":20,"col":8,"icon":"node_2"},"properties":{"cooldown":1},"effects":[],"id":35},{"display_name":"Boiling Blood","desc":"Bash leaves a trail of boiling blood behind its first explosion, slowing down and damaging enemies above it every 0.4 seconds","base_abil":0,"parents":[32,37],"dependencies":[],"blockers":[],"cost":2,"display":{"row":22,"col":0,"icon":"node_1"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":1,"target_part":"Boiling Blood","cost":0,"multipliers":[25,0,0,0,5,0]}],"id":36},{"display_name":"Ragnarokkr","desc":"War Scream become deafening, increasing its range and giving damage bonus to players","archetype":"Fallen","archetype_req":0,"base_abil":10,"parents":[36,33],"dependencies":[10],"blockers":[],"cost":2,"display":{"row":22,"col":2,"icon":"node_2"},"properties":{"aoe":2},"effects":[{"type":"add_spell_prop","base_spell":4,"cost":10},{"type":"raw_stat","toggle":true,"bonuses":[{"type":"stat","name":"damMult.Ragnarokkr","value":30}]}],"id":37},{"display_name":"Ambidextrous","desc":"Increase your chance to attack with Counter by +30%","base_abil":23,"parents":[33,34,39],"dependencies":[23],"blockers":[],"cost":1,"display":{"row":22,"col":4,"icon":"node_0"},"properties":{},"effects":[{"type":"raw_stat","bonuses":[{"type":"prop","abil":23,"name":"chance","value":30}]}],"id":38},{"display_name":"Burning Heart","desc":"For every 100 Health Bonus you have from item IDs, gain +2% Fire Damage (Max 100%)","archetype":"Paladin","archetype_req":0,"parents":[38,40],"dependencies":[],"blockers":[],"cost":1,"display":{"row":22,"col":6,"icon":"node_0"},"properties":{},"effects":[{"type":"stat_scaling","slider":false,"inputs":[{"type":"stat","name":"hpBonus"}],"output":{"type":"stat","name":"fDamPct"},"scaling":[0.02],"max":100}],"id":39},{"display_name":"Stronger Bash","desc":"Increase the damage of Bash","base_abil":0,"parents":[39,35],"dependencies":[],"blockers":[],"cost":1,"display":{"row":22,"col":8,"icon":"node_0"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":1,"target_part":"Single Hit","multipliers":[30,0,0,0,0,0]}],"id":40},{"display_name":"Intoxicating Blood","desc":"After leaving Corrupted, gain 2% of the health lost back for each enemy killed while Corrupted","archetype":"Fallen","archetype_req":5,"base_abil":25,"parents":[37,36],"dependencies":[25],"blockers":[],"cost":2,"display":{"row":23,"col":1,"icon":"node_1"},"properties":{},"effects":[],"id":41},{"display_name":"Comet","desc":"After being hit by Fireworks, enemies will crash into the ground and receive more damage","archetype":"Fallen","archetype_req":0,"base_abil":8,"parents":[37],"dependencies":[17],"blockers":[],"cost":2,"display":{"row":24,"col":2,"icon":"node_1"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":3,"target_part":"Comet","cost":0,"multipliers":[80,20,0,0,0,0]},{"type":"add_spell_prop","base_spell":3,"target_part":"Total Damage","cost":0,"hits":{"Comet":1}}],"id":42},{"display_name":"Collide","desc":"Mobs thrown into walls from Flying Kick will explode and receive additonal damage","archetype":"Battle Monk","archetype_req":4,"base_abil":4,"parents":[38,39],"dependencies":[33],"blockers":[],"cost":2,"display":{"row":23,"col":5,"icon":"node_1"},"properties":{"aoe":4},"effects":[{"type":"add_spell_prop","base_spell":2,"target_part":"Collide","cost":0,"multipliers":[150,0,0,0,50,0]},{"type":"add_spell_prop","base_spell":2,"target_part":"Flying Kick Max Damage","hits":{"Collide":1}}],"id":43},{"display_name":"Rejuvenating Skin","desc":"Regain back 30% of the damage you take as healing over 30s","archetype":"Paladin","archetype_req":5,"parents":[39,40],"dependencies":[],"blockers":[],"cost":2,"display":{"row":23,"col":7,"icon":"node_3"},"properties":{},"effects":[],"id":44},{"display_name":"Uncontainable Corruption","desc":"Reduce the cooldown of Bak'al's Grasp by -5s, and increase the raw damage gained for every 2% of health lost by +1","base_abil":25,"parents":[36,46],"dependencies":[25],"blockers":[],"cost":1,"display":{"row":26,"col":0,"icon":"node_0"},"properties":{},"effects":[{"type":"stat_scaling","slider":true,"slider_name":"Corrupted","output":{"type":"stat","name":"damRaw"},"scaling":[0.5]},{"type":"raw_stat","bonuses":[{"type":"prop","abil":25,"name":"cooldown","value":-5}]}],"id":45},{"display_name":"Radiant Devotee","desc":"For every 4% Reflection you have from items, gain +1/5s Mana Regen (Max 10/5s)","archetype":"Battle Monk","archetype_req":1,"parents":[47,45],"dependencies":[],"blockers":[],"cost":1,"display":{"row":26,"col":2,"icon":"node_0"},"properties":{},"effects":[{"type":"stat_scaling","inputs":[{"type":"stat","name":"ref"}],"output":{"type":"stat","name":"mr"},"scaling":[0.25],"max":10}],"id":46},{"display_name":"Whirlwind Strike","desc":"Uppercut will create a strong gust of air, launching you upward with enemies (Hold shift to stay grounded)","archetype":"Battle Monk","archetype_req":5,"base_abil":8,"parents":[38,46],"dependencies":[8],"blockers":[],"cost":2,"display":{"row":26,"col":4,"icon":"node_1"},"properties":{"range":2},"effects":[{"type":"add_spell_prop","base_spell":3,"target_part":"Uppercut","multipliers":[0,0,0,0,0,50]}],"id":47},{"display_name":"Mythril Skin","desc":"Gain +5% Base Resistance and become immune to knockback","archetype":"Paladin","archetype_req":6,"parents":[44],"dependencies":[],"blockers":[],"cost":2,"display":{"row":26,"col":7,"icon":"node_1"},"properties":{},"effects":[{"type":"raw_stat","bonuses":[{"type":"stat","name":"defMult.Base","value":5}]}],"id":48},{"display_name":"Armour Breaker","desc":"While Corrupted, losing 30% Health will make your next Uppercut destroy enemies' defense, rendering them weaker to damage","archetype":"Fallen","archetype_req":0,"base_abil":8,"parents":[45,46],"dependencies":[25],"blockers":[],"cost":2,"display":{"row":27,"col":1,"icon":"node_2"},"properties":{"duration":5},"effects":[{"type":"raw_stat","toggle":true,"bonuses":[{"type":"stat","name":"damMult.ArmorBreaker","value":30}]}],"id":49},{"display_name":"Shield Strike","desc":"When your Mantle of the Bovemist loses all charges, deal damage around you for each Mantle individually lost","archetype":"Paladin","archetype_req":0,"base_abil":24,"parents":[48,51],"dependencies":[],"blockers":[],"cost":2,"display":{"row":27,"col":6,"icon":"node_1"},"properties":{},"effects":[{"type":"replace_spell","name":"Shield Strike","base_spell":6,"display":"Damage per Shield","parts":[{"name":"Damage per Shield","multipliers":[60,0,20,0,0,0]}]}],"id":50},{"display_name":"Sparkling Hope","desc":"Everytime you heal 5% of your max health, deal damage to all nearby enemies","archetype":"Paladin","archetype_req":0,"parents":[48],"dependencies":[],"blockers":[],"cost":2,"display":{"row":27,"col":8,"icon":"node_2"},"properties":{"aoe":6},"effects":[{"type":"replace_spell","name":"Sparkling Hope","base_spell":7,"display":"Damage Tick","parts":[{"name":"Damage Tick","multipliers":[10,0,5,0,0,0]}]}],"id":51},{"display_name":"Massive Bash","desc":"While Corrupted, every 3% Health you lose will add +1 AoE to Bash (Max 10)","archetype":"Fallen","archetype_req":8,"base_abil":25,"parents":[53,45],"dependencies":[],"blockers":[],"cost":2,"display":{"row":28,"col":0,"icon":"node_2"},"properties":{},"effects":[{"type":"stat_scaling","slider":true,"slider_name":"Corrupted","output":{"type":"prop","abil":0,"name":"aoe"},"scaling":[0.3333333333333333],"max":10}],"id":52},{"display_name":"Tempest","desc":"War Scream will ripple the ground and deal damage 3 times in a large area","archetype":"Battle Monk","archetype_req":0,"base_abil":10,"parents":[52,54],"dependencies":[],"blockers":[],"cost":2,"display":{"row":28,"col":2,"icon":"node_1"},"properties":{"aoe":16},"effects":[{"type":"add_spell_prop","base_spell":4,"target_part":"Tempest","multipliers":[30,10,0,0,0,10]},{"type":"add_spell_prop","base_spell":4,"target_part":"Tempest Total Damage","hits":{"Tempest":3}},{"type":"add_spell_prop","base_spell":4,"target_part":"Total Damage","hits":{"Tempest":3}}],"id":53},{"display_name":"Spirit of the Rabbit","desc":"Reduce the Mana cost of Charge and increase your Walk Speed by +20%","archetype":"Battle Monk","archetype_req":5,"base_abil":4,"parents":[53,47],"dependencies":[],"blockers":[],"cost":1,"display":{"row":28,"col":4,"icon":"node_0"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":2,"cost":-5},{"type":"raw_stat","bonuses":[{"type":"stat","name":"spd","value":20}]}],"id":54},{"display_name":"Massacre","desc":"While Corrupted, if your effective attack speed is Slow or lower, hitting an enemy with your Main Attack will add +1% to your Corrupted bar","archetype":"Fallen","archetype_req":5,"base_abil":999,"parents":[53,52],"dependencies":[],"blockers":[],"cost":2,"display":{"row":29,"col":1,"icon":"node_1"},"properties":{},"effects":[],"id":55},{"display_name":"Axe Kick","desc":"Increase the damage of Uppercut, but also increase its mana cost","base_abil":8,"parents":[53,54],"dependencies":[],"blockers":[],"cost":1,"display":{"row":29,"col":3,"icon":"node_0"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":3,"target_part":"Uppercut","cost":10,"multipliers":[100,0,0,0,0,0]}],"id":56},{"display_name":"Radiance","desc":"Bash will buff your allies' positive IDs. (15s Cooldown)","archetype":"Paladin","archetype_req":2,"base_abil":0,"parents":[54,58],"dependencies":[],"blockers":[],"cost":2,"display":{"row":29,"col":5,"icon":"node_2"},"properties":{"cooldown":15},"effects":[],"id":57},{"display_name":"Cheaper Bash 2","desc":"Reduce the Mana cost of Bash","base_abil":0,"parents":[57,50,51],"dependencies":[],"blockers":[],"cost":1,"display":{"row":29,"col":7,"icon":"node_0"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":1,"cost":-5}],"id":58},{"display_name":"Cheaper War Scream","desc":"Reduce the Mana cost of War Scream","base_abil":10,"parents":[52],"dependencies":[],"blockers":[],"cost":1,"display":{"row":31,"col":0,"icon":"node_0"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":4,"cost":-5}],"id":59},{"display_name":"Discombobulate","desc":"Every time you hit an enemy, briefly increase your elemental damage dealt to them by +3 (Additive, Max +80). This bonus decays -5 every second","archetype":"Battle Monk","archetype_req":11,"parents":[62],"dependencies":[],"blockers":[],"cost":2,"display":{"row":31,"col":2,"icon":"node_3"},"properties":{},"effects":[{"type":"stat_scaling","slider":true,"slider_name":"Hits dealt","slider_max":27,"output":[{"type":"stat","name":"eDamAddMin"},{"type":"stat","name":"eDamAddMax"},{"type":"stat","name":"tDamAddMin"},{"type":"stat","name":"tDamAddMax"},{"type":"stat","name":"wDamAddMin"},{"type":"stat","name":"wDamAddMax"},{"type":"stat","name":"fDamAddMin"},{"type":"stat","name":"fDamAddMax"},{"type":"stat","name":"aDamAddMin"},{"type":"stat","name":"aDamAddMax"}],"scaling":[3],"max":80}],"id":60},{"display_name":"Thunderclap","desc":"Bash will cast at the player's position and gain additional AoE.\n\n All elemental conversions become Thunder","archetype":"Battle Monk","archetype_req":8,"parents":[62],"dependencies":[],"blockers":[],"cost":2,"display":{"row":32,"col":5,"icon":"node_1"},"properties":{},"effects":[{"type":"convert_spell_conv","target_part":"all","base_spell":1,"conversion":"Thunder"},{"type":"raw_stat","bonuses":[{"type":"prop","abil":0,"name":"aoe","value":3}]}],"id":61},{"display_name":"Cyclone","desc":"After casting War Scream, envelop yourself with a vortex that damages nearby enemies every 0.5s","archetype":"Battle Monk","archetype_req":0,"parents":[54],"dependencies":[],"blockers":[],"cost":2,"display":{"row":31,"col":4,"icon":"node_1"},"properties":{"aoe":4,"duration":20},"effects":[{"type":"add_spell_prop","base_spell":4,"target_part":"Cyclone","multipliers":[10,0,0,0,5,10]},{"type":"add_spell_prop","base_spell":4,"target_part":"Cyclone Total Damage","hits":{"Cyclone":40}}],"id":62},{"display_name":"Second Chance","desc":"When you receive a fatal blow, survive and regain 30% of your Health (10m Cooldown)","archetype":"Paladin","archetype_req":12,"parents":[58],"dependencies":[],"blockers":[],"cost":2,"display":{"row":32,"col":7,"icon":"node_3"},"properties":{},"effects":[],"id":63},{"display_name":"Blood Pact","desc":"If you do not have enough mana to cast a spell, spend health instead (0.6% health per mana)","archetype":"Fallen","archetype_req":10,"parents":[59],"dependencies":[],"blockers":[],"cost":2,"display":{"row":34,"col":1,"icon":"node_3"},"properties":{"health_cost":0.6},"effects":[],"id":64},{"display_name":"Haemorrhage","desc":"Reduce Blood Pact's health cost. (0.3% health per mana)","archetype":"Fallen","archetype_req":0,"base_abil":64,"parents":[64],"dependencies":[64],"blockers":[],"cost":1,"display":{"row":35,"col":2,"icon":"node_1"},"properties":{},"effects":[{"type":"raw_stat","bonuses":[{"type":"prop","abil":64,"name":"health_cost","value":-0.3}]}],"id":65},{"display_name":"Brink of Madness","desc":"If your health is 25% full or less, gain +40% Resistance","parents":[64,67],"dependencies":[],"blockers":[],"cost":2,"display":{"row":35,"col":4,"icon":"node_2"},"properties":{},"effects":[{"type":"raw_stat","toggle":true,"bonuses":[{"type":"stat","name":"defMult.Brink","value":40}]}],"id":66},{"display_name":"Cheaper Uppercut 2","desc":"Reduce the Mana cost of Uppercut","base_abil":8,"parents":[63,66],"dependencies":[],"blockers":[],"cost":1,"display":{"row":35,"col":6,"icon":"node_0"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":3,"cost":-5}],"id":67},{"display_name":"Martyr","desc":"When you receive a fatal blow, all nearby allies become invincible","archetype":"Paladin","archetype_req":0,"parents":[63],"dependencies":[],"blockers":[],"cost":2,"display":{"row":35,"col":8,"icon":"node_1"},"properties":{"duration":3,"aoe":12},"effects":[],"id":68}],"Mage":[{"display_name":"Meteor","desc":"Summon a slow but powerful meteor from the sky, dealing massive damage in a large area","parents":[],"dependencies":[],"blockers":[],"cost":1,"display":{"row":0,"col":4,"icon":"node_mage"},"properties":{"aoe":5,"range":18},"effects":[{"type":"replace_spell","name":"Meteor","cost":55,"base_spell":3,"display":"Total Damage","parts":[{"name":"Meteor Damage","multipliers":[300,100,0,0,0,0]},{"name":"Total Damage","hits":{"Meteor Damage":1}}]}],"id":0},{"display_name":"Teleport","desc":"Instantly teleport in the direction you're facing","parents":[4],"dependencies":[],"blockers":[],"cost":1,"display":{"row":6,"col":4,"icon":"node_mage"},"properties":{"range":12},"effects":[{"type":"replace_spell","name":"Teleport","cost":25,"base_spell":2,"display":"","parts":[]}],"id":1},{"display_name":"Heal","desc":"Heal yourself and nearby allies in a large area around you. (When healing an ally, you cannot heal more than 30% of their max health)","parents":[14,12],"dependencies":[],"blockers":[],"cost":1,"display":{"row":8,"col":2,"icon":"node_mage"},"properties":{"aoe":5},"effects":[{"type":"replace_spell","name":"Heal","cost":35,"base_spell":1,"display":"Heal","parts":[{"name":"Heal","power":0.1}]}],"id":2},{"display_name":"Ice Snake","desc":"Summon a fast-moving ice snake that reduces your enemies' speed and damage them.","parents":[13,12],"dependencies":[],"blockers":[],"cost":1,"display":{"row":8,"col":6,"icon":"node_mage"},"properties":{"range":18,"effects":40,"duration":3},"effects":[{"type":"replace_spell","name":"Ice Snake","cost":35,"base_spell":4,"display":"Ice Snake Damage","parts":[{"name":"Ice Snake Damage","multipliers":[70,0,0,30,0,0]}]}],"id":3},{"display_name":"Shooting Star","desc":"Drastically increase the speed of your Meteor ability.","base_abil":3,"parents":[5],"dependencies":[],"blockers":[],"cost":1,"display":{"row":4,"col":4,"icon":"node_1"},"properties":{},"effects":[],"id":4},{"display_name":"Wand Proficiency I","desc":"Improve your Main Attack's damage and range when using a wand.","base_abil":999,"parents":[0],"dependencies":[],"blockers":[],"cost":1,"display":{"row":2,"col":4,"icon":"node_0"},"properties":{},"effects":[{"type":"raw_stat","bonuses":[{"type":"stat","name":"mdPct","value":5}]}],"id":5},{"display_name":"Cheaper Meteor","desc":"Reduce the Mana cost of Meteor.","base_abil":0,"parents":[5],"dependencies":[],"blockers":[],"cost":1,"display":{"row":2,"col":6,"icon":"node_0"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":3,"cost":-10}],"id":6},{"display_name":"Earth Mastery","base_abil":998,"desc":"Increases your base damage from all Earth attacks","archetype":"Arcanist","archetype_req":0,"parents":[3],"dependencies":[],"blockers":[],"cost":1,"display":{"row":10,"col":8,"icon":"node_0"},"properties":{},"effects":[{"type":"raw_stat","bonuses":[{"type":"stat","name":"eDamPct","value":20},{"type":"stat","name":"eDamAddMin","value":2},{"type":"stat","name":"eDamAddMax","value":4}]}],"id":7},{"display_name":"Thunder Mastery","base_abil":998,"desc":"Increases your base damage from all Thunder attacks","archetype":"Riftwalker","archetype_req":0,"parents":[2,12],"dependencies":[],"blockers":[],"cost":1,"display":{"row":10,"col":2,"icon":"node_0"},"properties":{},"effects":[{"type":"raw_stat","bonuses":[{"type":"stat","name":"tDamPct","value":10},{"type":"stat","name":"tDamAddMin","value":1},{"type":"stat","name":"tDamAddMax","value":8}]}],"id":8},{"display_name":"Water Mastery","base_abil":998,"desc":"Increases your base damage from all Water attacks","archetype":"Light Bender","archetype_req":0,"parents":[12,8],"dependencies":[],"blockers":[],"cost":1,"display":{"row":11,"col":4,"icon":"node_0"},"properties":{},"effects":[{"type":"raw_stat","bonuses":[{"type":"stat","name":"wDamPct","value":15},{"type":"stat","name":"wDamAddMin","value":2},{"type":"stat","name":"wDamAddMax","value":4}]}],"id":9},{"display_name":"Air Mastery","base_abil":998,"desc":"Increases base damage from all Air attacks","archetype":"Riftwalker","archetype_req":0,"parents":[2],"dependencies":[],"blockers":[],"cost":1,"display":{"row":10,"col":0,"icon":"node_0"},"properties":{},"effects":[{"type":"raw_stat","bonuses":[{"type":"stat","name":"aDamPct","value":15},{"type":"stat","name":"aDamAddMin","value":3},{"type":"stat","name":"aDamAddMax","value":4}]}],"id":10},{"display_name":"Fire Mastery","base_abil":998,"desc":"Increases base damage from all Fire attacks","archetype":"Arcanist","archetype_req":0,"parents":[3],"dependencies":[],"blockers":[],"cost":1,"display":{"row":10,"col":6,"icon":"node_0"},"properties":{},"effects":[{"type":"raw_stat","bonuses":[{"type":"stat","name":"fDamPct","value":15},{"type":"stat","name":"fDamAddMin","value":3},{"type":"stat","name":"fDamAddMax","value":5}]}],"id":11},{"display_name":"Cheaper Teleport","desc":"Reduce the Mana cost of Teleport.","base_abil":1,"parents":[2,3],"dependencies":[],"blockers":[],"cost":1,"display":{"row":8,"col":4,"icon":"node_0"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":2,"cost":-5}],"id":12},{"display_name":"Wisdom","desc":"For every 2% or 2 Raw Spell Damage you have from items, gain +1/5s mana regen (Max 5/5s)","archetype":"Arcanist","archetype_req":0,"parents":[1],"dependencies":[],"blockers":[14],"cost":1,"display":{"row":6,"col":6,"icon":"node_0"},"properties":{},"effects":[{"type":"stat_scaling","slider":false,"inputs":[{"type":"stat","name":"sdPct"},{"type":"stat","name":"sdRaw"}],"output":{"type":"stat","name":"mr"},"scaling":[0.5,0.5],"max":5}],"id":13},{"display_name":"Wand Proficiency II","desc":"Improve your Main Attack's damage and range when using a wand.","archetype":"Riftwalker","archetype_req":0,"base_abil":999,"parents":[1],"dependencies":[],"blockers":[],"cost":1,"display":{"row":6,"col":2,"icon":"node_0"},"properties":{},"effects":[{"type":"raw_stat","bonuses":[{"type":"stat","name":"mdPct","value":5}]}],"id":14},{"display_name":"Wind Slash","desc":"When using Teleport, slash through the air and deal damage to enemies you pierce.","archetype":"Riftwalker","base_abil":1,"parents":[10,16],"dependencies":[1],"blockers":[],"cost":2,"display":{"row":12,"col":0,"icon":"node_1"},"properties":{},"effects":[{"type":"add_spell_prop","target_part":"Wind Slash","base_spell":2,"multipliers":[50,0,0,0,0,50]},{"type":"add_spell_prop","target_part":"Total Damage","base_spell":2,"display":"Total Damage","hits":{"Wind Slash":1}}],"id":15},{"display_name":"Thunderstorm","desc":"After casting Meteor, summon 3 lightning strikes and deal additional damage","base_abil":0,"parents":[15,8],"dependencies":[0],"blockers":[],"cost":2,"display":{"row":12,"col":2,"icon":"node_1"},"properties":{"aoe":2},"effects":[{"type":"add_spell_prop","target_part":"Lightning Damage","base_spell":3,"multipliers":[30,0,15,0,0,0]},{"type":"add_spell_prop","target_part":"Total Damage","base_spell":3,"hits":{"Lightning Damage":3}}],"id":16},{"display_name":"Stronger Meteor","desc":"Increase the damage of Meteor.","base_abil":0,"archetype":"Arcanist","archetype_req":2,"parents":[18],"dependencies":[0],"blockers":[],"cost":1,"display":{"row":13,"col":8,"icon":"node_0"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":3,"target_part":"Meteor Damage","behavior":"modify","multipliers":[30,90,0,0,0,0]}],"id":17},{"display_name":"Burning Sigil","desc":"Meteor will leave a sigil that damages enemies every 0.4s.","base_abil":0,"parents":[11,7],"dependencies":[],"blockers":[],"cost":2,"display":{"row":12,"col":7,"icon":"node_1"},"properties":{"aoe":7,"duration":8},"effects":[{"type":"replace_spell","name":"Burning Sigil","base_spell":6,"display":"DPS","parts":[{"name":"Tick Damage","multipliers":[15,0,0,0,25,0]},{"name":"DPS","hits":{"Tick Damage":2.5}},{"name":"Total Burn Damage","hits":{"Tick Damage":20}}]}],"id":18},{"display_name":"Sunshower","desc":"Heal emit a strong light, damaging nearby enemies.","archetype":"Light Bender","archetype_req":0,"base_abil":2,"parents":[9],"dependencies":[2],"blockers":[22],"cost":2,"display":{"row":13,"col":4,"icon":"node_1"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":1,"target_part":"Sunshower Damage","multipliers":[70,0,0,30,0,0]}],"id":19},{"display_name":"Windsweeper","desc":"Your Main Attack will add +1 Winded to enemies you hit. (Max 5, 0.5s cooldown) Ice Snake will deal additional damage to enemies for every Winded they have","archetype":"Riftwalker","archetype_req":3,"parents":[15,16],"dependencies":[3],"blockers":[],"cost":2,"display":{"row":15,"col":1,"icon":"node_3"},"properties":{"max":5},"effects":[{"type":"stat_scaling","slider":true,"slider_name":"Winded","output":{"type":"stat","name":"nConvBase:4.Ice Snake Damage"},"scaling":[20],"slider_step":1,"slider_max":5},{"type":"stat_scaling","slider":true,"slider_name":"Winded","output":{"type":"stat","name":"wConvBase:4.Ice Snake Damage"},"scaling":[10]}],"id":20},{"display_name":"Ophanim","desc":"When casting Meteor, instead summon 2 orbs of light with 200 Health that will attack when you use your Main Attack. When they damage an enemy, they lose 20% of their Health. They can be healed back.","archetype":"Light Bender","archetype_req":2,"parents":[19],"dependencies":[],"blockers":[],"cost":2,"display":{"row":15,"col":4,"icon":"node_3"},"properties":{"health":200},"effects":[{"type":"replace_spell","name":"Ophanim","base_spell":3,"display":"Per Melee (max)","parts":[{"name":"Per Orb","multipliers":[50,0,30,20,0,0]},{"name":"Per Melee (max)","hits":{"Per Orb":2}}]},{"type":"add_spell_prop","base_spell":3,"cost":30}],"id":21},{"display_name":"Arcane Transfer","desc":"Meteor and Ice Snake will add +5 Mana to a Mana Bank for every aggressive enemy you hit. Heal will now transfer the content of your Mana Bank into usable Mana instead of healing.","archetype":"Arcanist","archetype_req":2,"parents":[18],"dependencies":[],"blockers":[],"cost":2,"display":{"row":15,"col":7,"icon":"node_3"},"properties":{"bank":90},"effects":[{"type":"replace_spell","name":"Arcane Transfer","base_spell":1,"parts":[],"display":""}],"id":22},{"display_name":"Cheaper Heal","desc":"Reduce the Mana cost of Heal.","base_abil":2,"parents":[20,24],"dependencies":[],"blockers":[],"cost":1,"display":{"row":17,"col":1,"icon":"node_0"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":1,"cost":-5}],"id":23},{"display_name":"Purification","desc":"Heal and Arcane Transfer will purify you of all negative effects and fire. (3s Cooldown)","base_abil":1,"parents":[21,23,25],"dependencies":[],"blockers":[],"cost":2,"display":{"row":17,"col":4,"icon":"node_2"},"properties":{},"effects":[],"id":24},{"display_name":"Sentient Snake","desc":"Ice Snake will follow the direction you're facing, allowing you to control it.","base_abil":3,"parents":[22,24],"dependencies":[3],"blockers":[],"cost":2,"display":{"row":17,"col":6,"icon":"node_1"},"properties":{},"effects":[],"id":25},{"display_name":"Eye Piercer","desc":"Teleport will blind enemies, confusing them for a short amount of time.","base_abil":1,"parents":[23],"dependencies":[1],"blockers":[],"cost":2,"display":{"row":18,"col":0,"icon":"node_1"},"properties":{},"effects":[],"id":26},{"display_name":"Breathless","desc":"Meteor will deal additional damage to enemies for every Winded they have.","base_abil":20,"archetype":"Riftwalker","archetype_req":0,"parents":[23,24],"dependencies":[20],"blockers":[],"cost":2,"display":{"row":18,"col":2,"icon":"node_1"},"properties":{},"effects":[{"type":"stat_scaling","slider":true,"slider_name":"Winded","output":[{"type":"stat","name":"nConvBase:3.Meteor Damage"},{"type":"stat","name":"eConvBase:3.Meteor Damage"},{"type":"stat","name":"nConvBase:3.Per Orb"},{"type":"stat","name":"eConvBase:3.Per Orb"}],"scaling":[15]}],"id":27},{"display_name":"Larger Heal","desc":"Increase your Heal's range.","base_abil":1,"archetype":"Light Bender","archetype_req":0,"parents":[24,25],"dependencies":[2],"blockers":[22],"cost":1,"display":{"row":18,"col":5,"icon":"node_0"},"properties":{},"effects":[{"type":"raw_stat","bonuses":[{"type":"prop","abil":2,"name":"aoe","value":2}]}],"id":28},{"display_name":"Larger Mana Bank","desc":"Increase your maximum Mana Bank by +30.","base_abil":1,"archetype":"Arcanist","archetype_req":0,"parents":[25],"dependencies":[22],"blockers":[],"cost":1,"display":{"row":18,"col":8,"icon":"node_0"},"properties":{},"effects":[{"type":"raw_stat","bonuses":[{"type":"prop","abil":22,"name":"bank","value":30}]}],"id":29},{"display_name":"Cheaper Ice Snake","desc":"Reduce the Mana cost of Ice Snake.","base_abil":3,"parents":[26],"dependencies":[],"blockers":[],"cost":1,"display":{"row":20,"col":0,"icon":"node_0"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":4,"cost":-5}],"id":30},{"display_name":"Cheaper Teleport II","desc":"Reduce the Mana cost of Teleport.","base_abil":1,"parents":[24,32],"dependencies":[],"blockers":[],"cost":1,"display":{"row":20,"col":4,"icon":"node_0"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":2,"cost":-5}],"id":31},{"display_name":"Fortitude","desc":"After healing 120% of your max health within 10s, apply a damage bonus to each player you've healed. (15s Cooldown)","base_abil":2,"archetype":"Light Bender","archetype_req":0,"parents":[30,31],"dependencies":[],"blockers":[],"cost":2,"display":{"row":20,"col":2,"icon":"node_2"},"properties":{"duration":4},"effects":[{"type":"raw_stat","toggle":true,"bonuses":[{"type":"stat","name":"damMult.Fortitude","value":100}]}],"id":32},{"display_name":"Pyrokinesis","desc":"When your Mana Bank reaches 30, your Main Attack will stop and explode when it hits an enemy. (Damage is dealt as Main Attack Damage)","base_abil":4,"archetype":"Arcanist","archetype_req":4,"parents":[25],"dependencies":[],"blockers":[],"cost":2,"display":{"row":20,"col":7,"icon":"node_2"},"properties":{},"__TODO":"replace_spell pyrokinesis damage","effects":[],"id":33},{"display_name":"Seance","desc":"For every 5/3s Lifesteal you have from items, gain 1% Spell Damage (Max 50%)","archetype":"","archetype_req":0,"parents":[33,36],"dependencies":[],"blockers":[],"cost":1,"display":{"row":22,"col":7,"icon":"node_0"},"properties":{},"effects":[{"type":"stat_scaling","slider":false,"inputs":[{"type":"stat","name":"ls"}],"output":{"type":"stat","name":"sdPct"},"scaling":[0.2],"max":50}],"id":34},{"display_name":"Blink","desc":"Teleport will trigger 2 times in quick successions","base_abil":1,"archetype":"Riftwalker","archetype_req":0,"parents":[32,30],"dependencies":[1],"blockers":[],"cost":2,"display":{"row":21,"col":1,"icon":"node_1"},"properties":{},"effects":[{"type":"raw_stat","toggle":true,"bonuses":[{"type":"prop","abil":1,"name":"range","value":-4}]},{"type":"add_spell_prop","behavior":"modify","target_part":"Total Damage","base_spell":2,"hits":{"Wind Slash":1}}],"id":35},{"display_name":"Snake Nest","desc":"Ice Snake will summon 3 snakes.","base_abil":3,"parents":[34,31,40],"dependencies":[3],"blockers":[],"cost":2,"display":{"row":22,"col":5,"icon":"node_1"},"properties":{},"effects":[],"id":36},{"display_name":"Arcane Restoration","desc":"Pyrokinesis will add +1 Mana every 1s to your Mana Bank when hitting an aggressive enemy.","base_abil":999,"archetype":"Arcanist","archetype_req":0,"parents":[34,36],"dependencies":[33],"blockers":[],"cost":2,"display":{"row":23,"col":6,"icon":"node_1"},"properties":{"duration":4},"effects":[],"id":37},{"display_name":"Fluid Healing","desc":"For every 1% Water Damage Bonus you have, buff Heal's healing power by +0.3%.","archetype":"Light Bender","archetype_req":0,"base_abil":2,"parents":[40,39],"dependencies":[],"blockers":[],"cost":2,"display":{"row":23,"col":2,"icon":"node_1"},"properties":{},"effects":[{"type":"stat_scaling","slider":false,"inputs":[{"type":"stat","name":"wDam"}],"output":{"type":"stat","name":"healPct"},"scaling":[0.3]}],"id":38},{"display_name":"Transonic Warp","desc":"Teleport will deal additional damage to enemies for every Winded they have.","base_abil":20,"archetype":"Riftwalker","archetype_req":5,"parents":[30],"dependencies":[3,20],"blockers":[],"cost":2,"display":{"row":23,"col":0,"icon":"node_2"},"properties":{},"effects":[{"type":"stat_scaling","slider":true,"slider_name":"Winded","output":{"type":"stat","name":"nConvBase:2.Wind Slash"},"scaling":[30]},{"type":"stat_scaling","slider":true,"slider_name":"Winded","output":{"type":"stat","name":"tConvBase:2.Wind Slash"},"scaling":[10]},{"type":"stat_scaling","slider":true,"slider_name":"Winded","output":{"type":"stat","name":"aConvBase:2.Wind Slash"},"scaling":[5]}],"id":39},{"display_name":"Healthier Ophanim I","desc":"Increase the health of your orbs from Ophanim by +800 and reduce the damage they take when hitting an enemy by -5%.","archetype":"Light Bender","archetype_req":0,"base_abil":21,"parents":[32,31],"dependencies":[21],"blockers":[],"cost":1,"display":{"row":22,"col":3,"icon":"node_0"},"properties":{},"effects":[],"id":40},{"display_name":"Orphion's Pulse","desc":"Heal will trigger 2 more times, increasing the overall healing.","archetype":"Light Bender","base_abil":2,"parents":[40,36],"dependencies":[2],"blockers":[22],"cost":2,"display":{"row":23,"col":4,"icon":"node_1"},"properties":{"aoe":5},"effects":[{"type":"add_spell_prop","base_spell":1,"target_part":"Heal Pulse","power":0.15},{"type":"add_spell_prop","base_spell":1,"display":"Total Heal","target_part":"Total Heal","hits":{"Heal":1,"Heal Pulse":2}}],"id":41},{"display_name":"Diffusion","desc":"If you kill an enemy with Winded on them, the leftover Winded will spread to nearby enemies.","archetype":"Riftwalker","archetype_req":6,"base_abil":20,"parents":[39,38],"dependencies":[20],"blockers":[],"cost":2,"display":{"row":25,"col":1,"icon":"node_3"},"properties":{"aoe":5},"effects":[],"id":42},{"display_name":"Lightweaver","desc":"After healing 60% of your max health within 10s, summon a rotating orb that damages all enemies it touches for 20s. (Max 3 Orbs)","archetype":"Light Bender","archetype_req":7,"parents":[41],"dependencies":[],"blockers":[],"cost":2,"display":{"row":25,"col":4,"icon":"node_3"},"properties":{},"effects":[{"type":"replace_spell","name":"Lightweaver","base_spell":5,"display":"Orb Damage","parts":[{"name":"Single Orb","type":"damage","multipliers":[30,0,0,0,20,0]},{"name":"Orb Damage","type":"total","hits":{"Single Orb":3}}]}],"id":43},{"display_name":"Arcane Speed","desc":"After casting Heal or Arcane Transfer, gain +80% speed for 3s. (8s Cooldown)","base_abil":2,"parents":[43,45],"dependencies":[2],"blockers":[],"cost":2,"display":{"row":25,"col":6,"icon":"node_1"},"properties":{},"effects":[],"id":44},{"display_name":"Larger Mana Bank II","desc":"Increase your maximum Mana Bank by +30.","base_abil":1,"archetype":"Arcanist","archetype_req":0,"parents":[34,44],"dependencies":[22],"blockers":[],"cost":1,"display":{"row":25,"col":8,"icon":"node_0"},"properties":{},"effects":[],"id":45},{"display_name":"Psychokinesis","desc":"Meteor will launch directly from you as a slow projectile.","base_abil":3,"archetype":"Arcanist","archetype_req":5,"parents":[45,44],"dependencies":[0],"blockers":[],"cost":1,"display":{"row":26,"col":7,"icon":"node_1"},"properties":{},"effects":[],"id":46},{"display_name":"More Winded","desc":"Incrase your maximum Winded by +5.","base_abil":20,"archetype":"Riftwalker","archetype_req":0,"parents":[42],"dependencies":[20],"blockers":[],"cost":1,"display":{"row":26,"col":0,"icon":"node_0"},"properties":{},"effects":[{"type":"raw_stat","bonuses":[{"type":"prop","abil":20,"name":"max","value":5}]},{"type":"stat_scaling","slider":true,"slider_name":"Winded","slider_max":5}],"id":47},{"display_name":"Cheaper Ice Snake II","desc":"Reduce the Mana cost of Ice Snake.","base_abil":3,"parents":[42,52],"dependencies":[],"blockers":[],"cost":1,"display":{"row":27,"col":1,"icon":"node_0"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":4,"cost":-5}],"id":48},{"display_name":"Cheaper Meteor II","desc":"Reduce the Mana cost of Meteor.","base_abil":0,"parents":[52,43,44],"dependencies":[],"blockers":[],"cost":1,"display":{"row":27,"col":5,"icon":"node_0"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":3,"cost":-5}],"id":49},{"display_name":"Chaos Explosion","desc":"When your Mana Bank reaches 120, casting Arcane Transfer will rapidly unleash the last 3 spells you've cast in order.","base_abil":22,"archetype":"Arcanist","archetype_req":8,"parents":[45],"dependencies":[22],"blockers":[],"cost":2,"display":{"row":27,"col":8,"icon":"node_3"},"properties":{},"effects":[],"id":50},{"display_name":"Arcane Power","desc":"Meteor and Ice Snake will add +2 Mana to your Mana Bank for each aggressive mob you hit.","base_abil":22,"archetype":"Arcanist","archetype_req":0,"parents":[56],"dependencies":[22],"blockers":[],"cost":1,"display":{"row":29,"col":6,"icon":"node_0"},"properties":{},"effects":[],"id":51},{"display_name":"Explosive Entrance","desc":"Deal Damage in an area on the location you Teleport to.","base_abil":1,"parents":[48,49],"dependencies":[1],"blockers":[],"cost":2,"display":{"row":27,"col":3,"icon":"node_1"},"properties":{"aoe":3},"effects":[{"type":"add_spell_prop","target_part":"Explosion Damage","base_spell":2,"multipliers":[50,0,0,0,30,0]},{"type":"add_spell_prop","behavior":"modify","target_part":"Total Damage","base_spell":2,"hits":{"Explosion Damage":1}}],"id":52},{"display_name":"Gust","desc":"Ice Snake will add +1 Winded to enemies and deal more damage.","base_abil":3,"archetype":"Riftwalker","archetype_req":7,"parents":[48,52],"dependencies":[3],"blockers":[],"cost":2,"display":{"row":28,"col":2,"icon":"node_1"},"properties":{},"effects":[{"type":"add_spell_prop","target_part":"Ice Snake","base_spell":4,"multipliers":[0,0,0,0,0,20]}],"id":53},{"display_name":"Time Dilation","desc":"When sprinting, create an area that increases the speed of all allies the longer they run in it. (Step out or stop running to cancel)","archetype":"Riftwalker","archetype_req":7,"parents":[48],"dependencies":[],"blockers":[],"cost":2,"display":{"row":28,"col":0,"icon":"node_2"},"properties":{},"effects":[],"id":54},{"display_name":"Better Ophanim","desc":"Increase your maximum orbs from Ophanim by +1.","archetype":"Light Bender","archetype_req":0,"base_abil":21,"parents":[49],"_parents":["Explosive Entrance","Cheaper Meteor II"],"dependencies":[21],"blockers":[],"cost":1,"display":{"row":28,"col":4,"icon":"node_0"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":3,"target_part":"Per Melee (max)","hits":{"Per Orb":1}}],"id":55},{"display_name":"Arctic Snake","desc":"Ice Snake will freeze enemies completely for 2s.","base_abil":3,"parents":[50],"dependencies":[3],"blockers":[],"cost":2,"display":{"row":28,"col":7,"icon":"node_1"},"properties":{},"effects":[],"id":56},{"display_name":"Devitalize","desc":"Enemies will deal -2% damage for every Winded they have.","base_abil":20,"archetype":"Riftwalker","archetype_req":5,"parents":[58,59],"dependencies":[],"blockers":[],"cost":2,"display":{"row":32,"col":1,"icon":"node_1"},"properties":{},"effects":[],"id":57},{"display_name":"More Winded II","desc":"Incrase your maximum Winded by +5.","base_abil":20,"archetype":"Riftwalker","archetype_req":0,"parents":[54],"_parents":["Time Dilation","Dynamic Faith"],"dependencies":[20],"blockers":[],"cost":1,"display":{"row":31,"col":0,"icon":"node_0"},"properties":{},"effects":[{"type":"raw_stat","bonuses":[{"type":"prop","abil":20,"name":"max","value":5}]},{"type":"stat_scaling","slider":true,"slider_name":"Winded","slider_max":5}],"id":58},{"display_name":"Dynamic Faith","desc":"For every 2% Sprint you have from items, gain +1% Thunder Damage (Max 100%)","parents":[58,61],"dependencies":[],"blockers":[],"cost":1,"display":{"row":31,"col":2,"icon":"node_0"},"properties":{},"effects":[{"type":"stat_scaling","slider":false,"inputs":[{"type":"stat","name":"sprint"}],"output":{"type":"stat","name":"tDamPct"},"scaling":[0.5],"max":100}],"id":59},{"display_name":"Divination","desc":"Increase your maximum orbs from Ophanim by +3 and reduce their damage.","base_abil":21,"archetype":"Light Bender","archetype_req":0,"parents":[59,61],"dependencies":[21],"blockers":[],"cost":2,"display":{"row":32,"col":3,"icon":"node_2"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":3,"target_part":"Per Orb","multipliers":[-50,0,-10,0,0,0]},{"type":"add_spell_prop","base_spell":3,"target_part":"Per Melee (max)","hits":{"Per Orb":3}}],"id":60},{"display_name":"Healthier Ophanim II","desc":"Increase the health of your orbs from Ophanim by +3000.","base_abil":21,"archetype":"Light Bender","archetype_req":0,"parents":[55],"dependencies":[40],"blockers":[],"cost":1,"display":{"row":31,"col":4,"icon":"node_0"},"properties":{},"effects":[],"id":61},{"display_name":"Sunflare","desc":"After healing 400% of your max health within 10s, your next Heal will make every nearby ally temporarily immune.","archetype":"Light Bender","archetype_req":12,"base_abil":2,"parents":[61],"dependencies":[],"blockers":[],"cost":2,"display":{"row":32,"col":5,"icon":"node_3"},"properties":{"aoe":12,"duration":5},"effects":[],"id":62},{"display_name":"Larger Mana Bank III","desc":"Increase your maximum Mana Bank by +30.","archetype":"Arcanist","archetype_req":0,"base_abil":22,"parents":[56],"dependencies":[22],"blockers":[],"cost":1,"display":{"row":31,"col":7,"icon":"node_0"},"properties":{},"effects":[],"id":63},{"display_name":"Arcane Overflow","desc":"Arcane Transfer will allow you to overflow your mana over its maximum limits.","archetype":"Arcanist","archetype_req":12,"base_abil":22,"parents":[63],"dependencies":[22],"blockers":[],"cost":2,"display":{"row":33,"col":7,"icon":"node_3"},"properties":{},"effects":[],"id":64},{"display_name":"Memory Recollection","desc":"Chaos Explosion will cast +2 spells.","archetype":"Arcanist","archetype_req":0,"base_abil":22,"parents":[64],"dependencies":[50],"blockers":[],"cost":1,"display":{"row":34,"col":8,"icon":"node_0"},"properties":{},"effects":[],"id":65},{"display_name":"Manastorm","desc":"If you have more than 100 Mana, casting a spell will give you +10 mana over 5s.","archetype":"Arcanist","archetype_req":1,"parents":[69,64,62],"dependencies":[],"blockers":[],"cost":2,"display":{"row":34,"col":5,"icon":"node_1"},"properties":{},"effects":[],"id":66},{"display_name":"Better Lightweaver","desc":"Increase your Max Orbs by +2.","archetype":"Light Bender","archetype_req":0,"base_abil":43,"parents":[69,66],"dependencies":[43],"blockers":[],"cost":1,"display":{"row":35,"col":4,"icon":"node_0"},"properties":{},"effects":[{"type":"add_spell_prop","target_part":"Orb Damage","hits":{"Single Orb":2}}],"id":67},{"display_name":"Timelock","desc":"Holding shift and casting Heal will absorb all Winded on nearby enemies and make you Timelocked. While Timelocked, your mana will not be depleted and you become immovable from outside forces. Enemies will recieve Winded damage from all absorbed stacks. (Max 30)","archetype":"Riftwalker","archetype_req":12,"parents":[58],"dependencies":[],"blockers":[],"cost":2,"display":{"row":34,"col":0,"icon":"node_3"},"properties":{},"effects":[],"id":68},{"display_name":"Cheaper Heal II","desc":"Reduce the Mana cost of Heal.","base_abil":2,"parents":[68,66],"dependencies":[],"blockers":[],"cost":1,"display":{"row":34,"col":2,"icon":"node_0"},"properties":{},"effects":[{"type":"add_spell_prop","base_spell":1,"cost":-5}],"id":69}]} \ No newline at end of file diff --git a/media/atree/highlight_t_2_a_f.png b/media/atree/highlight_t_2_a_f.png deleted file mode 100644 index 08d4a3402fe1d030d6c425d157387f6a52887b74..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5881 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 VdSGEN1Z0B1jq3(lWg7P3{{vJ1|HJ?Q diff --git a/media/atree/node_4_blocked.png b/media/atree/node_4_blocked.png deleted file mode 100644 index d8592524a3d817a46ddde156f81dc8af720c5e5e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5031 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 diff --git a/media/atree/node_highlight.png b/media/atree/node_highlight.png deleted file mode 100644 index 76fa3f815860e7a0a055b808cdc9770b48b80320..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23515 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 ax@94jVrlnX4i5^s0Vjtu$0^4G@c##|V&2~X From f78d911c1ec5251e08deb44a350eb2377988c12a Mon Sep 17 00:00:00 2001 From: fin444 Date: Tue, 12 Jul 2022 16:56:36 -0700 Subject: [PATCH 6/7] resolve PR comments --- js/atree.js | 29 ++++++----------------------- 1 file changed, 6 insertions(+), 23 deletions(-) diff --git a/js/atree.js b/js/atree.js index 11621d4..4949d0e 100644 --- a/js/atree.js +++ b/js/atree.js @@ -987,8 +987,6 @@ function render_AT(UI_elem, list_elem, tree) { let icon = ability.display.icon; if (icon === undefined) { icon = "node"; - } else if (icon == "node_4") { - icon = "node_warrior" // temp fix } let node_img = document.createElement('img'); node_img.src = '../media/atree/'+icon+'.png'; @@ -1111,17 +1109,17 @@ function atree_render_connection(atree_connectors_map) { // toggle the state of a node. function atree_set_state(node_wrapper, new_state) { - console.log(node_wrapper.elem.children[0]) + let icon = node_wrapper.ability.display.icon; + if (icon === undefined) { + icon = "node"; + } if (new_state) { - console.log("on") node_wrapper.active = true; - node_wrapper.elem.children[0].src = node_wrapper.elem.children[0].src.substring(0, node_wrapper.elem.children[0].src.length - 4) + "_selected.png"; - console.log(node_wrapper.elem.children[0].src) + node_wrapper.elem.children[0].src = "../media/atree/" + icon + "_selected.png"; } else { - console.log("off") node_wrapper.active = false; - node_wrapper.elem.children[0].src = node_wrapper.elem.children[0].src.substring(0, node_wrapper.elem.children[0].src.length - 13) + ".png"; + node_wrapper.elem.children[0].src = "../media/atree/" + icon + ".png"; } let atree_connectors_map = node_wrapper.all_connectors_ref; for (const parent of node_wrapper.parents) { @@ -1136,21 +1134,6 @@ function atree_set_state(node_wrapper, new_state) { } }; -// refresh all connector to default state, then try to calculate the connector for all node -function atree_update_connector() { - atree_connectors_map.forEach((v) => { - if (v.length != 0) { - let connector_elem = document.createElement("img"); - connector_elem.style = "width: 100%; height: 100%;"; - connector_elem.src = '../media/atree/connect_' + v[0].type + '.png' - v[0].replaceChildren(connector_elem); - } - }); - atree_map.forEach((v) => { - atree_compute_highlight(v); - }); -} - function atree_set_edge(atree_connectors_map, parent, child, state) { const connectors = child.connectors.get(parent); const parent_row = parent.ability.display.row; From 245a1e519f72dd7298c548a9a60247e92c799ab0 Mon Sep 17 00:00:00 2001 From: fin444 Date: Tue, 12 Jul 2022 17:36:03 -0700 Subject: [PATCH 7/7] fix corrupted images --- media/atree/node_0.png | Bin 5514 -> 5438 bytes media/atree/node_1.png | Bin 5912 -> 5835 bytes media/atree/node_2.png | Bin 6112 -> 6035 bytes media/atree/node_3.png | Bin 6361 -> 6284 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/media/atree/node_0.png b/media/atree/node_0.png index c445170020fe85a32b609e10907bd67a843fc34f..2bd8d3ca5f3aec078165eb185745d9760af9adfb 100644 GIT binary patch delta 630 zcmeCu-lxUW8Q|y6%O%Cdz`(#ek*{=O%a+NOjC&@3W4t8Bl_;UvcT>Tghhv$iPIul7 zRy)DcCv}q_FvU)`W0u!{$*}HcMEg_r=Un$q=bkwGWSjcJFReEps{X#~RIq|~>)I>* z6SMLQ?yqrQQ7Iz#!fx{fW(CI08(G8|C!b_Bo&2A558{=_^fk z=60Lh#ceQoH@9XW#1MUCQ*87x?6CnWa7isrF3KzbxesU^L@da~&5jGG!wRS;H?<_u zZt_B&R4QYc$pIo;WH&9d4P70U?=JMfZmWyu(cSFp+N-~>yqanqzUC(HWMxt1$?l@Y U{9JNVfQgI2)78&qol`;+0Hw3nl>h($ delta 691 zcmdm|)uqkX8Q|y6%O%Cj#lXP8%Qcawl#zF0;}%A)$)=2Z7_XH zorhzYr%rd?4OTnB(kFGilW#J`0u`Du%NujOWLWnzqWvlRb6&3drgKl6eX>n`;g{B% z4^@BPbt+iF%e8gwmHvrY`33jaxUZ-bk$YjsySar~fsv7G^AZ+uMxaHzSxtfD2iA>1 z6Bn`tfUIV70g|Td&Oow)T>(hWU^fDir@$h-90owPEr%A6Oy|%ClG8YJf#hKhZy?FX z3DOnF31ZLTlr-SwQczHE_w)_0at!daRWi~uP(la=5Dl6eZqC+#ow7xZQwc z95=|0K5or$sCoJ*2HNOjT51DU;*wgNT$EV=G8kkxL@>z34afm%vI1($O)W{Zr@*2$C4vpQ`SV)JC2 z9K(KSvOGt?MtTMak${}U zk~E+OTcz;Kyp;U%Vx`Fi+^SM=9bu_O#hLkeAYFzAdd5adlQ(ipOg_aeKlv56!DMM3 zeLav;n~K~5UtcSa%;J*#qDniEkb+H7N}5%0Y9WLN;pSvcuHliE0Lv>V6qmS`l~^Tb zB<7{3rr0X!1I^}foBV^vV6rB!W+226ePmN?^fBzQ0V{AxElw`VEGPlG6lfhpEXc*p kjti*63aBSHwItDQvLk;gm9fm^eWEuf&kzfn{9a5G06>SW*#H0l delta 700 zcmX@DJ427JGr-TCmrIJ5i-CcGmun)=R7T#33;kJnx!%p;o%s2%7+1%IeRH*rAMAhq z_;{hOL%^NWa!R~hlTR`JW#pZFoaqk>m#ZT0xpaY~9+x+e ztmFcz*~8`S1u|A4CE3a?zbH2mXiR2qVtT56L0&r8LIrnE-vBGe08d*bBRvBop@5vk zk~E+eTcz;Kyp;U%VxaZD+^RBQR5jTnIlW zlXr3ek2Em4fL;QE;u6=g6078l#Ju#>6k8>IpxMnlZa}k7@_=mk$)hO^ z8}f>P?X>}mA%!)_Du`f^iyM$*qhDbKbXsm|NunJvM)^~LMh*li1GKkT^d>OH_=tr8 I$wgwC0Q%0z9smFU diff --git a/media/atree/node_2.png b/media/atree/node_2.png index f8652ec1868d1a2a827659f9d5f6c2362e1f35d6..b5da3793132a9d29638da4d7b6a7aa5e0a0cee97 100644 GIT binary patch delta 507 zcmaE$KUtrrGr-TCmrII^fq{W{B478!Stm9pGbS@mKF)My@*L*BlV`E0PCmdgV{#;` z`Q(YL&&0TXycKb`*3F->{oI#z-CbRVni4JInjCpU3> zPd>*jDa56qpy2N58(`%a;AyL5q-UTs`8T)pWN{wV$+kRF5+Lc4%(OHs|Dw#)ypqI{ z%=|oCB}1jjg*@_;C-NBZffQ8a7FhY_r(~v8PF~2P;AICAvjGbF`dWEp7MJ7~Rf2^S zY>HCStb$VuAv_2-CljO^2#QNw%Sx;glOZ+~CzhqAC{4EKm6#mC>o$2lufgOCyqd~j zwKn?5=Gf??+B8|7PgIgi0ir0##m$ZjsKN@UCO5St(Qa}8Un-Tc%;Z$D1wvd+0V2m_ ZrA>BR;AY(y%)-mZJ6TFRVsf!~E&#ODp+W!v delta 657 zcmbQN|3IIwGr-TCmrIJ5i-CcGmun(VHzV)F=_eR@H^(z3Gcxi{KE!kdNKRw^%g8l( zGK(sZ+`%#fNCvQ)1I61}pBeLV{dg$eh5fz7~pBEWTa=H#5?&mw=_`t8@DQul;)8FdLO8$Br`3|%D*TxHLoPG zBr`wHR>=^k)R#vds3?aAWak_neIu|^n~K~5UtcSa%;J*#qDnikn1W4FN}5%0Y9W*h z;pb%XPX5Uw4Y2`eNpXp5S&3D0Mq*xiYKpCrKF|goUN@lGMZ6#z7V&C^Lrv31G0sLG z(@Gn#5|`BCvw>kg- diff --git a/media/atree/node_3.png b/media/atree/node_3.png index 48a50a0cc8e51b67f2920921eb2d25484036b290..09f7d8319d040016c51c7cb2eac95246bccb07bd 100644 GIT binary patch delta 572 zcmca<*kj1k8Q|y6%O%Cdz`(#ek-hh79?Jg+SSmHKwqoM9{gbyb?%7<- zWXL#qDRboH|IE3Qb6FNo7G%9K`4y}GWGl8qlmD_Ek@ID_*LQ&{L%Q_rspSu6b@@5v zH*Hw5Kh?J8{#^Y}yptcXt54?QxH9=Z$DzrKI0Ghs=5(2C!R0);hD%}cTrQ)@7l3RL zZiC6L+**?hxb-J5;MSddj@x^(6p!=dI38~|E(HaJlw>Qn{G!~%5?iIr+{E-${erx7 zC6I)>r*D9jV}Pfvl98SPLL?w3u_O(s!B#0eGcP5-yjW@SXC74}xQ?*YqTHCStb$VuAv_2-Cv)fSqAHyCSumYFV;^d;t0+9QF) delta 660 zcmeA%ylKeS8Q|y6%O%Cj#lXP8%Qcb5mXT|srwT7G*X#KIcOJ_B2v{n`JF%hyDEeVP zBk$z(jC&ZlHfJ*#GBR>ap2HjoB)>A}0?8zn#Xypk^#)MUT~>b}sl#>%DDsZ&h$5FS z%e}q}yj&U5rDsnqe>khl&ndrY!;<}}wl(+X>VM+pntXv>9jN0w`xT&$(;Oguy_^9c zlQ>;~q#~CykWArH0Fo_SMnG~KSmY;{0g$c9tpy~5x%Gi$6SppqT+i(dB!6*(blLKF zd+~B9C@7>PTe;;I