MediaWiki:ParseCore.js

From Heroes of Might and Magic: Olden Era Official Wiki
Revision as of 14:01, 13 October 2026 by Aurelain (talk | contribs) (Created page with "//Source:https://github.com/Aurelain/oe-wiki/tree/main/src/parse (()=>{function In(t,...n){if(typeof t=="function")try{let e=t(...n);return e&&typeof e.then=="function"?e.then(s=>[s,null]).catch(s=>[null,s]):[e,null]}catch(e){return[null,e]}return t&&typeof t.then=="function"?t.then(e=>[e,null]).catch(e=>[null,e]):[t,null]}var G=In;var Yt,st,At,it,Q;async function Un(t){await Pn()&&(Yt=t,st(Rn),ot("ready"))}async function Ln(...t){return Q?await Q.find(...t):await En("fi...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Note: After publishing, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5.
//Source:https://github.com/Aurelain/oe-wiki/tree/main/src/parse
(()=>{function In(t,...n){if(typeof t=="function")try{let e=t(...n);return e&&typeof e.then=="function"?e.then(s=>[s,null]).catch(s=>[null,s]):[e,null]}catch(e){return[null,e]}return t&&typeof t.then=="function"?t.then(e=>[e,null]).catch(e=>[null,e]):[t,null]}var G=In;var Yt,st,At,it,Q;async function Un(t){await Pn()&&(Yt=t,st(Rn),ot("ready"))}async function Ln(...t){return Q?await Q.find(...t):await En("find",t)}function Kt(...t){if(Q)return Q.log(...t);ot("log",t)}function Mn(t){Q=t}async function Pn(){if(typeof process<"u"&&process.versions?.node!==null){let n="node:worker_threads",{parentPort:e}=await import(n);if(!e)return;st=s=>e.on("message",s),At=s=>e.off("message",s),it=s=>e.postMessage(s)}else st=n=>self.addEventListener("message",n),At=n=>self.removeEventListener("message",n),it=n=>self.postMessage(n);return!0}async function Rn(t){let n=t?.data||t,{type:e}=n;switch(e){case"run":let[s,i]=await G(Yt);if(i){let o=i.extra||[];Kt("!Error encountered!",i.message,...o),ot("run",{})}else ot("run",s);break;default:}}function ot(t,n){it({type:t,payload:n})}async function En(t,n){return new Promise(e=>{let s=i=>{let o=i?.data||i;o.type===t&&(At(s),e(o.payload))};st(s),it({type:t,payload:n})})}var jn={initialize:Un,find:Ln,log:Kt,redirect:Mn},C=jn;var w=Uint8Array,V=Uint16Array,Fn=Int32Array,Xt=new w([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),Qt=new w([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),Nn=new w([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),te=function(t,n){for(var e=new V(31),s=0;s<31;++s)e[s]=n+=1<<t[s-1];for(var i=new Fn(e[30]),s=1;s<30;++s)for(var o=e[s];o<e[s+1];++o)i[o]=o-e[s]<<5|s;return{b:e,r:i}},ee=te(Xt,2),ne=ee.b,On=ee.r;ne[28]=258,On[258]=28;var re=te(Qt,0),Hn=re.b,mo=re.r,zt=new V(32768);for(v=0;v<32768;++v)M=(v&43690)>>1|(v&21845)<<1,M=(M&52428)>>2|(M&13107)<<2,M=(M&61680)>>4|(M&3855)<<4,zt[v]=((M&65280)>>8|(M&255)<<8)>>1;var M,v,tt=(function(t,n,e){for(var s=t.length,i=0,o=new V(n);i<s;++i)t[i]&&++o[t[i]-1];var a=new V(n);for(i=1;i<n;++i)a[i]=a[i-1]+o[i-1]<<1;var c;if(e){c=new V(1<<n);var l=15-n;for(i=0;i<s;++i)if(t[i])for(var d=i<<4|t[i],u=n-t[i],f=a[t[i]-1]++<<u,m=f|(1<<u)-1;f<=m;++f)c[zt[f]>>l]=d}else for(c=new V(s),i=0;i<s;++i)t[i]&&(c[i]=zt[a[t[i]-1]++]>>15-t[i]);return c}),et=new w(288);for(v=0;v<144;++v)et[v]=8;var v;for(v=144;v<256;++v)et[v]=9;var v;for(v=256;v<280;++v)et[v]=7;var v;for(v=280;v<288;++v)et[v]=8;var v,se=new w(32);for(v=0;v<32;++v)se[v]=5;var v;var $n=tt(et,9,1);var qn=tt(se,5,1),Ct=function(t){for(var n=t[0],e=1;e<t.length;++e)t[e]>n&&(n=t[e]);return n},T=function(t,n,e){var s=n/8|0;return(t[s]|t[s+1]<<8)>>(n&7)&e},xt=function(t,n){var e=n/8|0;return(t[e]|t[e+1]<<8|t[e+2]<<16)>>(n&7)},Wn=function(t){return(t+7)/8|0},It=function(t,n,e){return(n==null||n<0)&&(n=0),(e==null||e>t.length)&&(e=t.length),new w(t.subarray(n,e))};var Gn=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],k=function(t,n,e){var s=new Error(n||Gn[t]);if(s.code=t,Error.captureStackTrace&&Error.captureStackTrace(s,k),!e)throw s;return s},Vn=function(t,n,e,s){var i=t.length,o=s?s.length:0;if(!i||n.f&&!n.l)return e||new w(0);var a=!e,c=a||n.i!=2,l=n.i;a&&(e=new w(i*3));var d=function(Vt){var Zt=e.length;if(Vt>Zt){var Jt=new w(Math.max(Zt*2,Vt));Jt.set(e),e=Jt}},u=n.f||0,f=n.p||0,m=n.b||0,D=n.l,R=n.d,O=n.m,H=n.n,E=i*8;do{if(!D){u=T(t,f,1);var vt=T(t,f+1,3);if(f+=3,vt)if(vt==1)D=$n,R=qn,O=9,H=5;else if(vt==2){var bt=T(t,f,31)+257,Ft=T(t,f+10,15)+4,Nt=bt+T(t,f+5,31)+1;f+=14;for(var K=new w(Nt),Dt=new w(19),A=0;A<Ft;++A)Dt[Nn[A]]=T(t,f+A*3,7);f+=Ft*3;for(var Ot=Ct(Dt),Cn=(1<<Ot)-1,xn=tt(Dt,Ot,1),A=0;A<Nt;){var Ht=xn[T(t,f,Cn)];f+=Ht&15;var B=Ht>>4;if(B<16)K[A++]=B;else{var q=0,rt=0;for(B==16?(rt=3+T(t,f,3),f+=2,q=K[A-1]):B==17?(rt=3+T(t,f,7),f+=3):B==18&&(rt=11+T(t,f,127),f+=7);rt--;)K[A++]=q}}var $t=K.subarray(0,bt),j=K.subarray(bt);O=Ct($t),H=Ct(j),D=tt($t,O,1),R=tt(j,H,1)}else k(1);else{var B=Wn(f)+4,gt=t[B-4]|t[B-3]<<8,yt=B+gt;if(yt>i){l&&k(0);break}c&&d(m+gt),e.set(t.subarray(B,yt),m),n.b=m+=gt,n.p=f=yt*8,n.f=u;continue}if(f>E){l&&k(0);break}}c&&d(m+131072);for(var Tn=(1<<O)-1,zn=(1<<H)-1,kt=f;;kt=f){var q=D[xt(t,f)&Tn],W=q>>4;if(f+=q&15,f>E){l&&k(0);break}if(q||k(2),W<256)e[m++]=W;else if(W==256){kt=f,D=null;break}else{var qt=W-254;if(W>264){var A=W-257,X=Xt[A];qt=T(t,f,(1<<X)-1)+ne[A],f+=X}var wt=R[xt(t,f)&zn],St=wt>>4;wt||k(3),f+=wt&15;var j=Hn[St];if(St>3){var X=Qt[St];j+=xt(t,f)&(1<<X)-1,f+=X}if(f>E){l&&k(0);break}c&&d(m+131072);var Wt=m+qt;if(m<j){var Gt=o-j,Bn=Math.min(j,Wt);for(Gt+m<0&&k(3);m<Bn;++m)e[m]=s[Gt+m]}for(;m<Wt;++m)e[m]=e[m-j]}}n.l=D,n.p=kt,n.b=m,n.f=u,D&&(u=1,n.m=O,n.d=R,n.n=H)}while(!u);return m!=e.length&&a?It(e,0,m):e.subarray(0,m)};var Zn=new w(0);var I=function(t,n){return t[n]|t[n+1]<<8},x=function(t,n){return(t[n]|t[n+1]<<8|t[n+2]<<16|t[n+3]<<24)>>>0},Tt=function(t,n){return x(t,n)+x(t,n+4)*4294967296};function Jn(t,n){return Vn(t,{i:2},n&&n.out,n&&n.dictionary)}var Bt=typeof TextDecoder<"u"&&new TextDecoder,Yn=0;try{Bt.decode(Zn,{stream:!0}),Yn=1}catch{}var Kn=function(t){for(var n="",e=0;;){var s=t[e++],i=(s>127)+(s>223)+(s>239);if(e+i>t.length)return{s:n,r:It(t,e-1)};i?i==3?(s=((s&15)<<18|(t[e++]&63)<<12|(t[e++]&63)<<6|t[e++]&63)-65536,n+=String.fromCharCode(55296|s>>10,56320|s&1023)):i&1?n+=String.fromCharCode((s&31)<<6|t[e++]&63):n+=String.fromCharCode((s&15)<<12|(t[e++]&63)<<6|t[e++]&63):n+=String.fromCharCode(s)}};function Xn(t,n){if(n){for(var e="",s=0;s<t.length;s+=16384)e+=String.fromCharCode.apply(null,t.subarray(s,s+16384));return e}else{if(Bt)return Bt.decode(t);var i=Kn(t),o=i.s,e=i.r;return e.length&&k(8),o}}var Qn=function(t,n){return n+30+I(t,n+26)+I(t,n+28)},tr=function(t,n,e){var s=I(t,n+28),i=I(t,n+30),o=Xn(t.subarray(n+46,n+46+s),!(I(t,n+8)&2048)),a=n+46+s,c=er(t,a,i,e,x(t,n+20),x(t,n+24),x(t,n+42)),l=c[0],d=c[1],u=c[2];return[I(t,n+10),l,d,o,a+i+I(t,n+32),u]},er=function(t,n,e,s,i,o,a){var c=i==4294967295,l=o==4294967295,d=a==4294967295,u=n+e,f=c+l+d;if(s&&f){for(;n+4<u;n+=4+I(t,n+2))if(I(t,n)==1)return[c?Tt(t,n+4+8*l):i,l?Tt(t,n+4):o,d?Tt(t,n+4+8*(l+c)):a,1];s<2&&k(13)}return[i,o,a,0]};function ie(t,n){for(var e={},s=t.length-22;x(t,s)!=101010256;--s)(!s||t.length-s>65558)&&k(13);var i=I(t,s+8);if(!i)return{};var o=x(t,s+16),a=x(t,s-20)==117853008;if(a){var c=x(t,s-12);a=x(t,c)==101075792,a&&(i=x(t,c+32),o=x(t,c+48))}for(var l=n&&n.filter,d=0;d<i;++d){var u=tr(t,o,a),f=u[0],m=u[1],D=u[2],R=u[3],O=u[4],H=u[5],E=Qn(t,H);o=O,(!l||l({name:R,size:m,originalSize:D,compression:f}))&&(f?f==8?e[R]=Jn(t.subarray(E,E+m),{out:new w(D)}):k(14,"unknown compression type "+f):e[R]=It(t,E,E+m))}return e}async function nr(){let t=await C.find("HeroesOldenEra_Data/StreamingAssets/Core.zip",null,!0);if(console.log("file:",t),!t)return C.log("!Invalid zip!"),{};let n=await rr(t);return ie(n)}async function rr(t){if(typeof t.arrayBuffer=="function"){let n=await t.arrayBuffer();return new Uint8Array(n)}return new Uint8Array(t)}var oe=nr;function sr(t,n,e,s){e!=null&&(Array.isArray(e)&&!e.length||s!==void 0&&String(e)===String(s)||(n.includes("_mult")&&typeof e=="number"&&!String(e).includes(".")&&(e+=".0"),t[n]=e))}var r=sr;var ir=new TextDecoder;function or(t,n,e=null,s=!1){let i={};for(let o in t)if(o.match(n)){if(e&&o.match(e))continue;let a=t[o],c=ir.decode(a);if(c.match(/^\s*[{[]/)){let l=JSON.parse(c),d=Object.keys(l);if(d.length===1){let u=l[d[0]];Array.isArray(u)?i[o]=u:C.log("Array required, skipping item!",o),i[o]=u}else i[o]=l}else i[o]=c}if(s){let o=Object.values(i)[0];return o===void 0&&C.log("Cannot offer a direct result for this pattern!",n),o}return i}var p=or;var ar=(t,n,...e)=>{if(!t){let s=new Error(n);throw s.extra=e,s}},h=ar;function cr(...t){C.log(...t)}var g=cr;function lr(t){t=t.replace(/\/\/.*/g,""),t=t.replace(/\/\*[\s\S]*?\*\//g,"");let n={},e=t.split("}");if(e.pop(),!e.length)return g("No function!"),{};for(let s of e){let[i,o]=G(ur,s);if(o){let a=o.extra||[];g("Failed to compile!",o.message,...a)}else Object.assign(n,i)}return n}function ur(t){let n=t.split("{");h(n.length===2,"Function must have 2 parts!",t);let s=n[0].trim().split(" ");h(s.length===2,"Header must have 2 parts!",t);let i=s[1];return h(at(i),"Invalid function name!",t),{[i]:{type:s[0],body:fr(n[1],i)}}}function fr(t,n){let e=[],s=t.split(")");s.pop(),h(s.length>0,"No lines!",n);for(let i of s)e.push(dr(i,n));return e}function dr(t,n){let e=t.split("(");h(e.length===2,"Invalid line!",n,t);let s=e[0].trim();h(at(s),"Invalid action!",n,t);let i=e[1].split(","),o=i.shift().trim();return h(at(o),"Invalid variable!",n,t),{variable:o,action:s,params:pr(i,n,t)}}function pr(t,n,e){let s=[];for(let i of t){let o=i.trim();o.startsWith('"')?(h(o.endsWith('"'),"Unexpected quotes!",n,e),o=o.substring(1,o.length-1)):o.match(/^\d+$/)?o=Number(o):(h(at(o),"Invalid variable!",n,e),o="#"+o),s.push(o)}return s}function at(t){return!!t.match(/^[A-Za-z][A-Za-z0-9_]*$/)}var ae=lr;function _r(t,n){if(n=n.replaceAll("[",".").replaceAll("]",""),n=n.startsWith(".")?n.substring(1):n,!n)return t;let e=n.split(".");for(let s of e)if(t&&s in t)t=t[s];else return;return t}var z=_r;var mr=t=>typeof t=="number"&&t!==1/0&&t!==-1/0&&!isNaN(t),U=mr;var hr={CurrentUnitData:[b,1],CurrentUnitConfig:[b,1],CurrentUnitStats:[b,1],CurrentAbility:[b,1],CurrentHero:[b,1],CurrentMagicBattleRoot:[b,1],CurrentMagicBattle:[b,1],CurrentMagicWorld:[b,1],CurrentSkillParameter:[b,1],CurrentSubSkill:[b,1],CurrentItem:[b,1],CurrentHeroSpecializationConfig:[b,1],CurrentItemSet:[b,1],CurrentFractionLawConfig:[b,1],SpellpowerForCurrentMagic:[yr,0],CurrentMagicLevel:[br,0],CurrentSkillLevel:[Dr,0],Add:[kr,2],Sub:[wr,2],Mul:[Sr,2],Div:[Ar,2],Avg:[Cr,2],Floor:[xr,1],Text:[Tr,1],DbBuff:[zr,2],DbSideBuff:[Br,2],DbObstacle:[Ir,2],DbTrap:[Ur,2],DbAbility:[Lr,3],Invoke:[Mr,1]};function ce(t,n,e,s=!1){s&&console.log(`${t}():`),h(t in n,"Unknown function!",t);let i=n[t];h(i.body.at(-1).variable==="return","Must end with return variable!",i);let o={};for(let a of i.body){let c=a.action,l={action:c,data:e,about:c,repository:n,isDebug:s},[d,u]=hr[c]||[];h(d,"Unknown action!",a,l.about),h(u===-1||a.params.length===u,"Mismatched param count!",l.about);let f=vr(a.params,o,l.about);f.push(l),o[a.variable]=d.apply(null,f),s&&console.log(l.about,a.params,JSON.stringify(o,null,4))}return gr(o.return,i.type)}function vr(t,n,e){let s=[];for(let i of t)if(typeof i=="string"&&i.charAt(0)==="#"){let o=i.substring(1);h(o in n,"Unknown variable!",e,o),s.push(n[o])}else s.push(i);return s}function Z(t,n,e){let s=z(t,n);return h(s!==void 0,"Unresolved path!",t,e.about,n),s}function gr(t,n){switch(n){case"int":return Math.floor(t);case"modInt":return Math.abs(Math.round(t));case"modPercentNumeric":let e=Math.round(Math.abs(t*100));return e=isNaN(e)?t:e,e;case"modFloatPercentF1Numeric":let s=Math.abs(t*100).toFixed(1);return s.includes(".")?s.replace(/\.0$/,""):s;case"string":return String(t);default:h(!1,"Unknown type!",n)}}function b(t,n){let{action:e}=n,s=n.data[e];return h(s,`Missing "${e}" from data!`,n.about),Z(s,t,n)}function yr(){return 1}function br(t){return t.data.CurrentMagicLevel}function Dr(t){return t.data.CurrentSkillLevel}function kr(t,n,e){return t=Number(t),n=Number(n),h(U(t),"Expecting number!",e.about,t),h(U(n),"Expecting number!",e.about,n),t+n}function wr(t,n,e){return t=Number(t),n=Number(n),h(U(t),"Expecting number!",e.about,t),h(U(n),"Expecting number!",e.about,n),t-n}function Sr(t,n,e){return t=Number(t),n=Number(n),h(U(t),"Expecting number!",e.about,t),h(U(n),"Expecting number!",e.about,n),t*n}function Ar(t,n,{about:e}){return t=Number(t),t===0?0:(n=Number(n),h(U(t),"Invalid numerator!",e,t),h(n&&U(n),"Invalid denominator!",e,n),t/n)}function Cr(...t){let{about:n}=t.pop(),e=0;for(let s of t){let i=Number(s);h(U(i),"Expecting number!",n,s),e+=i}return e/t.length}function xr(t,{about:n}){return t=Number(t),h(typeof t=="number","Invalid target!",n,t),Math.floor(t)}function Tr(t){return t.toString()}function zr(t,n,e){let{buffs:s}=e.data,i=s[t];return h(i,"No such buff!",e.about,t),Z(i,n,e)}function Br(t,n,e){let{buffs:s,sideBuffs:i}=e.data,o=i[t];h(o,"No such sideBuff!",e.about,t);let a=s[o.sid];return h(a,"No such buff!",e.about,o.sid),Z(a,n,e)}function Ir(t,n,e){let{obstacles:s}=e.data,i=s[t];return h(i,"No such obstacle!",e.about,t),Z(i,n,e)}function Ur(t,n,e){let{traps:s}=e.data,i=s[t];return h(i,"No such trap!",e.about,t),Z(i,n,e)}function Lr(t,n,e,s){let{abilities:i}=s.data,o=i[t];h(o,"No such ability!",s.about,t,n);let a=o.levels[n];return h(a,"No such level!",s.about,t,n),Z(a,e,s)}function Mr(t,n){let{repository:e,data:s,isDebug:i}=n;return h(e[t],"No such function to invoke!",n.about,t),ce(t,e,s,i)}var le=ce;var Pr=(t,n=null,e=!1)=>{let s={};if(n===null){let i=t.length;for(let o=0;o<i;o++)s[t[o]]=o}else{let i=t.length;for(let o=0;o<i;o++){let a=t[o];s[a[n]]=e?o:a}}return s},F=Pr;function J(t,n){if(P(t)||(t={}),!P(n))return{...t};let e={...t};for(let s of Object.keys(n)){let i=t[s],o=n[s];if(P(i)&&P(o))e[s]=J(i,o);else if(Array.isArray(i)&&Array.isArray(o)){let a=Math.max(i.length,o.length),c=[];for(let l=0;l<a;l++){let d=i[l],u=o[l];l in o?P(d)&&P(u)?c[l]=J(d,u):c[l]=P(u)?J({},u):u:c[l]=P(d)?J({},d):d}e[s]=c}else P(o)?e[s]=J({},o):e[s]=Array.isArray(o)?o.slice():o}return e}function P(t){return t!==null&&typeof t=="object"&&t.constructor===Object}var ct=J;function Rr(t){switch(t.id){case"arena_sub_skill_faction_unfrozen_2_old":case"campaign_sub_skill_faction_unfrozen_2_old":case"sub_skill_faction_unfrozen_2_old":case"campaign_sub_skill_protection_4_old":case"sub_skill_protection_4_old":t.bonuses[0].parameters.push(0),t.bonuses[0].parameters.push(0);break;case"skill_summon_1_bonus":case"skill_summon_2_bonus":case"skill_summon_3_bonus":t.data.stats.hp=0;break;case"magic_shade_cloak_effect_0":t.data.stats.outAllDmgMod=1;break}}var lt=Rr;var ut=new Set([]),Ut={en:"english",pt_br:"BRportugese",cs:"czech",fr:"french",de:"german",hu:"hungarian",it:"italian",ja:"japanese",ko:"korean",pl:"polish",ru:"russian",es:"spanish",tr:"turkish",uk:"ukrainian","zh-hans":"zhCN","zh-hant":"zhTW"},Er={CurrentUnitData:{fullStacks:0,tempFullStacks:0,startBattleFullStacks:0,unit:{stats:{finalSummonBonusPercent:0,outComingBuffDuration:0,finalAbilityDamageBonusPercent:0}}},CurrentUnitConfig:{passives:[{actions:[{damageDealer:{minStackDmg:0,maxStackDmg:0}}]}]},CurrentAbility:{damageDealer:{statDmgMult:1,buff:{durationPerStack:[0,0]}}},CurrentHero:{level:1,heroStat:{viewRadius:3}}},jr=100,Lt,nt,Mt,ue,fe,de,pe,_e,me;function Fr(t){h(nt,"Please first build the cache!"),Lt=0,Array.isArray(t)||(t=[t]);let n=[];for(let e of t){let s=Vr(e);for(let i in Ut){if(ut.size&&i!=="en")continue;let o=nt[i],a={_type:"TranslationDef"};if(r(a,"target_id",e.target_id),r(a,"type",e.type),r(a,"subtype",e.subtype),r(a,"variant",e.variant),r(a,"language",i),o.has(e.name)){let c=ft(e.name,e,o,s);r(a,"name",Yr(c,i))}o.has(e.description)&&r(a,"description",ft(e.description,e,o,s)),o.has(e.bonus_description)&&r(a,"bonus_description",ft(e.bonus_description,e,o,s)),(a.name||a.description||a.bonus_description)&&n.push(a)}}return n}function he(t){nt={};for(let n in Ut){let e=p(t,new RegExp("Lang/"+Ut[n]+"/")),s=new Map;s._lang=n;for(let i in e){let o=e[i];for(let a of o){if(Object.keys(a).toString()!=="sid,text"){g("Unexpected token structure!",a);continue}let c=Jr(a.text,a.sid);s.set(a.sid,c)}}nt[n]=s}Nr(t),Or(t),Hr(t),$r(t),qr(t),Wr(t),Gr(t)}function dt(t){return nt.en.has(t)}function Nr(t){let n=p(t,new RegExp("Lang/args/"));Mt=new Map;for(let e in n){let s=n[e];for(let i of s){if(Object.keys(i).toString()!=="sid,args"){g("Unexpected args item structure!",i);continue}Mt.set(i.sid,i.args)}}}function Or(t){let n=p(t,new RegExp("DB/info/.*script$")),e=Object.values(n).join(`
/**/
`);ue=ae(e)}function Hr(t){let n=p(t,"DB/buffs"),e=Object.values(n).flat();e.map(s=>lt(s)),fe=F(e,"id")}function $r(t){let n=p(t,"DB/side_buffs"),e=Object.values(n).flat();de=F(e,"id")}function qr(t){let n=p(t,"DB/field_objects/obstacles"),e=Object.values(n).flat();pe=F(e,"id")}function Wr(t){let n=p(t,"DB/field_objects/traps"),e=Object.values(n).flat();_e=F(e,"id")}function Gr(t){let n=p(t,"DB/heroes_abilities/heroes_abilities_base"),e=Object.values(n).flat();me=F(e,"id")}function Vr(t){let n={};return n=ct(n,Er),n=ct(n,{buffs:fe,sideBuffs:de,obstacles:pe,traps:_e,abilities:me}),n=ct(n,t._data),n}function ft(t,n,e,s,i=!1){if(!t)return;if(!e.has(t)){console.log(`Cannot find "${t}" in translation cache!`);return}let{target_id:o}=n;i=i||ut.size&&(ut.has(o)||ut.has(t))&&e._lang==="en";let a=e.get(t);i&&console.log("==========="+t),i&&console.log("Before:",a);let c=a;return c.includes("{")&&(c=c.replace(/\{(\d)}/g,(l,d)=>{let u=Zr(t,d,e,n,s,i);return u===void 0?l:u}),c.includes("{")&&g("Still has braces!",a,c)),i&&console.log("After:",c),(c.includes("NaN")||c.includes("undefined"))&&g("Something went wrong!",o,t),c}function Zr(t,n,e,s,i,o){let a=Mt.get(t);if(!a)return g("No args found!",s,t);let c=a[n],[l,d]=c.split("|");if(d)return e.get(d)?ft(d,s,e,i,o):g("Redirect not found!",t,d);let[u,f]=G(le,l,ue,i,o);if(f){Lt++;let m=f.extra||[];g("Failed to evaluate!"),g(`${t}: ${e.get(t)}`),g(f.message,...m),Lt>=jr&&h(!1);return}return o&&console.log("evaluated:",u),u}function Jr(t){return t=t.replace(/\r/g,""),t=t.replace(/\n/g,"<br/>"),t=t.replace(/ /g," "),t=t.replace(/‑/g,"-"),t=t.replace(/<b>/g,"'''"),t=t.replace(/<\/b>/g,"'''"),t=t.replace(/<i>/g,"''"),t=t.replace(/<\/i>/g,"''"),t=t.replace(/​/g,""),t=t.replace(/­/g,""),t}function Yr(t,n){return n==="en"?t.replaceAll("\u2019","'"):t}var _=Fr;function Kr(t,n){let e=[];for(let s=0;s<t.bonuses?.length;s++){let i=t.bonuses[s],o={_type:"BonusDef"};r(o,"parent_type",n),r(o,"parent_id",t.id),r(o,"ordinal",s),r(o,"type",i.type),r(o,"parameters",i.parameters),r(o,"battle_type",i.battleType),r(o,"activation_level",i.activationLevel),r(o,"receiver_role",i.receiverRole),r(o,"upgrade_increment",i.upgrade?.increment),r(o,"upgrade_level_step",i.upgrade?.levelStep),r(o,"receivers",i.receivers),r(o,"receiver_allegiance",i.receiverAllegiance),r(o,"action_area",i.actionArea),r(o,"fraction",i.fraction),"upgrade_increment"in o&&(String(o.upgrade_increment).includes(".")||(o.upgrade_increment+=".0")),e.push(o)}return e}var S=Kr;var Xr=t=>typeof t!="object"||t===null?t:Pt(t),Pt=t=>{if(Array.isArray(t)){let n=t.slice(),e=n.length;for(let s=0;s<e;s++){let i=t[s];typeof i=="object"&&i!==null&&(n[s]=Pt(i))}return n}else{let n=Object.assign({},t);for(let e in t){let s=t[e];typeof s=="object"&&s!==null&&(n[e]=Pt(s))}return n}},pt=Xr;var ve=new Set([]);function Qr(t){let n={},e=p(t,"DB/items/items/.*?json");for(let s in e){let i=e[s];for(let o of i){let{id:a}=o;ve.size&&!ve.has(a)||(n["Artifact~"+a]=ts(o,s))}}return n}function ts(t,n){let e={_type:"ArtifactDef"};r(e,"id",t.id),r(e,"name_sid",t.name),r(e,"description_sid",t.description),r(e,"upgrade_description_sid",t.upgradeDescription),r(e,"narrative_description_sid",t.narrativeDescription),r(e,"icon",t.icon),r(e,"slot",t.slot_),r(e,"rarity",t.rarity),r(e,"artifact_set_id",t.itemSet),r(e,"goods_value",t.goodsValue),r(e,"max_level",t.maxLevel),r(e,"cost_base",t.costBase),r(e,"cost_per_level",t.costPerLevel),r(e,"reward_for_destroy",t.rewardForDestroy),r(e,"is_special_item",!!t.isSpecialItem),r(e,"use_expand_tooltip",ns(t)),r(e,"can_destroy",t.canDestroy),r(e,"can_apply_bonus_always",t.canApplyBonusAlways),r(e,"source_path",n);let s={level:1,config:es(t)},i=_([{target_id:e.id,type:"artifact",name:e.name_sid,description:e.description_sid,_data:{CurrentItem:s}},{target_id:e.id,type:"artifact_upgrade",description:e.upgrade_description_sid,_data:{CurrentItem:s}},{target_id:e.id,type:"artifact_narrative",description:e.narrative_description_sid,_data:{CurrentItem:s}}]),o=S(t,"artifact");return[e,...i,...o]}function es(t){let n=pt(t);return n.bonuses||(n.bonuses=[]),n.bonuses[0]||n.bonuses.push({}),n.bonuses[0].upgrade||(n.bonuses[0].upgrade={}),n.bonuses[0].upgrade.hasOwnProperty("increment")||(n.bonuses[0].upgrade.increment=1),n.bonuses[1]||n.bonuses.push({}),n.bonuses[1].upgrade||(n.bonuses[1].upgrade={}),n.bonuses[1].upgrade.hasOwnProperty("increment")||(n.bonuses[1].upgrade.increment=1),n}function ns(t){let{useExpandTooltip:n}=t;if(n)return n==="true"}var ge=Qr;function rs(t,n){return n.global?[...t.matchAll(n)]:t.match(n)||[]}var y=rs;var ye=new Set([]);function ss(t){let n={},e=p(t,"DB/weeks_info.json",null,!0),s=p(t,"DB/weeks/");for(let i in s){let o=s[i];for(let a of o){let{id:c}=a;ye.size&&!ye.has(c)||(n["AstrologistEvent~"+c]=is(a,i,e))}}return n}function is(t,n,e){let s={_type:"AstrologistEventDef"},i=y(t.id,/([a-z]+)_\d+$/)[1];r(s,"id",t.id),r(s,"category",i),r(s,"name_sid",t.name),r(s,"desc_sid",t.desc),r(s,"icon",t.icon),r(s,"buff_sid",t.buffSid),r(s,"roll_chance",e[i+"s"].find(a=>a.sid===t.id).rollChance),r(s,"count_to_return",i==="week"?e.countToReturnWeek:e.countToReturnMonth),r(s,"source_path",n);let o=_({target_id:s.id,type:"astrologist_event",name:s.name_sid,description:s.desc_sid,_data:{}});return[s,...o]}var be=ss;var De={melee:"melee",remote:"reach",ranged:"ranged"};function os(t){let n={},e=p(t,"Lang/english/texts/unitsAbility.json",null,!0);for(let s in De){let i=De[s];n["AttackArchetype~"+i]=ke(i,`base_passive_${s}_attack`);for(let{sid:o}of e){let a=new RegExp(`^base_passive_${s}_attack(.*?)_name$`),[,c]=y(o,a);if(c!==void 0){let l=s+"_attack"+c;n["AttackArchetype~"+l]=ke(l,`base_passive_${l}`)}}}return n}function ke(t,n){let e={_type:"EntryDef"};r(e,"type","attack_archetype"),r(e,"subtype",t),r(e,"name_sid",n+"_name"),r(e,"desc_sid",n+"_description");let s=_({target_id:t,type:"attack_archetype",subtype:t,name:e.name_sid,description:e.desc_sid});return[e,...s]}var we=os;var Se={area_strike:"base_passive_strike_rumble_1",area_strike_falloff:"base_passive_strike_rumble_2",cone_strike:"base_passive_strike_tri_reach_1",dragonbreath_strike:"base_passive_strike_reach_1",dragonbreath_strike_falloff:"base_passive_strike_reach_2",sweeping_strike:"base_passive_strike_swipe_1",sweeping_strike_falloff:"base_passive_strike_swipe_2",whirlwind_strike:"base_passive_strike_swirl_1",whirlwind_strike_falloff:"base_passive_strike_swirl_2"};function as(){let t={};for(let n in Se){let e=Se[n];t["AttackPassive~"+n]=cs(n,e)}return t}function cs(t,n){let e={_type:"AttackPassiveDef"};r(e,"attack_passive_id",t),r(e,"pattern_token",y(n,/strike_(.*?)_\d$/)[1]),r(e,"rank",y(n,/\d$/)[0]),r(e,"name_sid",n+"_name"),r(e,"desc_sid",n+"_description");let s=_({target_id:t,type:"attack_passive",name:e.name_sid,description:e.desc_sid});return[e,...s]}var Ae=as;var Ce=new Set([]);function ls(t){let n={},e=p(t,"DB/objects_logic/cities/");for(let s in e){let i=e[s];if(i.length!==1){g("Unexpected cities count!",s);continue}let o=i[0];for(let a in o){let c=o[a];if(Array.isArray(c))for(let l of c){let{sid:d}=l,u=o.fraction+"_"+d;if(!(!d||Ce.size&&!Ce.has(u)))if(a==="hires"){let f=o.fraction+"_Build_creature_dwellings";n["Building~"+f]=n["Building~"+f]||[],n["Building~"+f].push(...xe(l,s,o,a))}else n["Building~"+u]=xe(l,s,o,a)}}}return n}function xe(t,n,e,s){let i=[];for(let o=0;o<t.icons.length;o++)i.push(...us(t,n,e,s,o));return i}function us(t,n,e,s,i){let o=i+1,a=t.parametersPerLevel[i];if(!a)return[];let c={_type:"BuildingDef"};r(c,"id",e.fraction+"_"+t.sid+"_L"+o),r(c,"faction",e.fraction),r(c,"category",s),r(c,"sid",t.sid),r(c,"level",o),r(c,"name_sid",t.names[i]),r(c,"desc_sid",t.descriptions[i]),r(c,"narrative_desc_sid",t.narrativeDescriptions[i]),r(c,"icon",t.icons[i]),r(c,"background_image",t.backgroundImages[i]),r(c,"is_constructed_on_start",o===1?t.isConstructedOnStart:void 0),r(c,"level_on_start",o===1?t.levelOnStart:void 0),r(c,"scene_slot",o===1?t.sceneSlot:void 0),r(c,"node_pos_x",a?.nodePos?.xPos),r(c,"node_pos_y",a?.nodePos?.yPos),r(c,"prereqs",fs(a.prevBuildings)),r(c,"gold_cost",a.costs.find(d=>d.name==="gold")?.cost),r(c,"wood_cost",a.costs.find(d=>d.name==="wood")?.cost),r(c,"ore_cost",a.costs.find(d=>d.name==="ore")?.cost),r(c,"crystals_cost",a.costs.find(d=>d.name==="crystals")?.cost),r(c,"gemstones_cost",a.costs.find(d=>d.name==="gemstones")?.cost),r(c,"mercury_cost",a.costs.find(d=>d.name==="mercury")?.cost),r(c,"graal_cost",a.costs.find(d=>d.name==="graal")?.cost),r(c,"dust_cost",a.costs.find(d=>d.name==="dust")?.cost),r(c,"units_hire_sid",t.unitsHire?.units[0].sids[0]),r(c,"units_weekly",t.unitsHire?.units[0].weeklyIncrement),r(c,"source_path",n);let l=_({target_id:c.id,type:"building",name:c.name_sid,description:c.desc_sid,_data:{}});return[c,...l]}function fs(t){let n=[];for(let{sid:e,level:s}of t)n.push(e+"_L"+s);return n.length?n:void 0}var Te=ls;function ds(t,n){let{domain:e}=n,s={};for(let i in t){let o=ps(n,i,t[i]);s[e+"~"+i]=_s(i,o)}return s}function ps(t,n,e){let s={prefix:"",name_suffix:"_name",desc_suffix:"_description"};return Object.assign(s,t),e===!0?e={id:n}:typeof e=="string"&&(e={id:e}),Object.assign(s,e),s}function _s(t,n){let{type:e,id:s,prefix:i,name_suffix:o,desc_suffix:a,suppressDescription:c,path:l,trimColon:d}=n,u={_type:"EntryDef"};r(u,"type",e),r(u,"subtype",t),r(u,"name_sid",i+s+o),r(u,"desc_sid",c?void 0:i+s+a),r(u,"source_path",l);let f=_({target_id:u.subtype,type:u.type,subtype:u.subtype,name:u.name_sid,description:u.desc_sid});if(d)for(let m of f)m.name&&(m.name=m.name.replace(/[::\s]*$/,"")),m.description&&(m.description=m.description.replace(/[::\s]*$/,""));return[u,...f]}var L=ds;var ms={construct:!0,demon:!0,dragon:!0,embodiment:!0,living:!0,magic_creature:!0,undead:!0};function hs(){return L(ms,{domain:"CreatureType",type:"creature_type",prefix:"base_class_",name_suffix:""})}var ze=hs;function vs(t){let n={},e=p(t,"DB/difficulties.json",null,!0)||[];for(let s of e)n["Difficulty~"+s.sid]=gs(s,"DB/difficulties.json");return n}function gs(t,n){let e={_type:"DifficultyDef"};r(e,"id",t.sid),r(e,"name_sid",t.nameSid),r(e,"neutral_power_multiplier",t.neutralPowerMultiplier),r(e,"player_gold",t.playerStartResources.gold),r(e,"player_wood",t.playerStartResources.wood),r(e,"player_ore",t.playerStartResources.ore),r(e,"player_gemstones",t.playerStartResources.gemstones),r(e,"player_crystals",t.playerStartResources.crystals),r(e,"player_mercury",t.playerStartResources.mercury),r(e,"player_dust",t.playerStartResources.alchemicalDust),r(e,"ai_gold",t.aiStartResources.gold),r(e,"ai_wood",t.aiStartResources.wood),r(e,"ai_ore",t.aiStartResources.ore),r(e,"ai_gemstones",t.aiStartResources.gemstones),r(e,"ai_crystals",t.aiStartResources.crystals),r(e,"ai_mercury",t.aiStartResources.mercury),r(e,"ai_dust",t.aiStartResources.alchemicalDust),r(e,"source_path",n);let s={_type:"TranslationDef"};return r(s,"target_id",t.sid),r(s,"type","difficulty"),r(s,"language","en"),r(s,"description",t.descriptionSid),[e,s]}var Be=vs;var Ie=new Set([]),Ue={army:1,faction:0};function ys(t){let n={},e=p(t,"DB/fractions/");for(let s in e){let i=e[s];for(let o of i){let{id:a}=o;Ie.size&&!Ie.has(a)||(n["Faction~"+a]=bs(o,s))}}return n}function bs(t,n){let e={_type:"FactionDef"};r(e,"id",t.id),r(e,"icon",t.icon),r(e,"icon_faction_laws",t.iconFractionLaws),r(e,"biome",t.biome),r(e,"resource",t.resourceName),r(e,"name_sid",t.name),r(e,"desc_sid",t.desc),r(e,"source_path",n);let s=_({target_id:e.id,type:"faction",name:e.name_sid,description:e.desc_sid,_data:{}}),i=[];for(let c of t.cityNames)i.push(...Ds(c));let o=[],a=[];for(let[c,l]of t.fractionLawsLines.entries())o.push(...ks(l,c+1,t.id)),a.push(...ws(l.groups,c+1,t.id));return[e,...s,...i,...o,...a]}function Ds(t){let[,n,e]=y(t,/^([a-z]+)_.*?_(\d+)$/),s=n+"_"+e,i={_type:"EntryDef"};r(i,"type","FactionCityName"),r(i,"subtype",s),r(i,"name_sid",t);let o=_({target_id:s,type:"FactionCityName",subtype:s,name:i.name_sid});return[i,...o]}function ks(t,n,e){let s={_type:"FactionLawTierDef"};return r(s,"faction",e),r(s,"tier",n),r(s,"count_to_unlock",t.countToUnlock),[s]}function ws(t,n,e){let s=[];for(let i in Ue){let o=Ue[i];for(let[a,c]of t[o].laws.entries()){let l={_type:"LawTreePositionDef"};r(l,"faction",e),r(l,"tier",n),r(l,"side",i),r(l,"slot",a),r(l,"law_id",c),s.push(l)}}return s}var _t=ys;var Le=new Set([]);function Ss(t){let n={},e=As(t),s=Cs(t),i={addedSpells:e,replacedSpells:s},o=p(t,"DB/heroes/"),a=xs(o),c=Ts(a);for(let l in o){let d=o[l];for(let u of d){let{id:f}=u;if(Le.size&&!Le.has(f))continue;let m=u.classType+"_"+u.fraction,D=Re(l)?c[m]:a[m];n["Hero~"+f]=Pe(u,m,l,D,i)}}return n}function As(t){let n={},e=p(t,"DB/heroes_skills/skills/");for(let s in e){let i=e[s];for(let o of i){let a=o.parametersPerLevel||[];for(let[c,l]of a.entries()){let d=l.bonuses||[];for(let u of d)if(u.type==="heroMagicAddition"){let f=o.id+"_L"+(c+1);n[f]=n[f]||[],n[f].push(u.parameters[0])}}}}return n}function Cs(t){let n={},e=p(t,"DB/heroes_specializations/");for(let s in e){let i=e[s];for(let o of i)for(let a of o.bonuses)a.type==="heroMagicReplace"&&(n[o.id]=n[o.id]||[],n[o.id].push(a.parameters))}return n}function xs(t){let n={};for(let e in t){if(Re(e))continue;let s=t[e];for(let i of s){let o=i.classType+"_"+i.fraction;n[o]||(n[o]=Pe(i,o,e)[0])}}return n}function Ts(t){let n=pt(t);for(let e in n){let s=n[e];delete s.view_radius,delete s.stats_num,delete s.magic_casts_per_round,delete s.enable_tactics,delete s.tactics_placement_size,delete s.enable_hero_native_biome,delete s.offence,delete s.defence,delete s.spell_power,delete s.intelligence,delete s.luck,delete s.morale}return n}function Pe(t,n,e,s={},i=null){let o={_type:"HeroDef"};r(o,"id",t.id),r(o,"name_sid",t.name||t.id),r(o,"motto_sid",t.motto||t.id+"_motto"),r(o,"desc_sid",t.description||t.id+"_description"),r(o,"class_id",n),r(o,"faction",t.fraction),r(o,"class_type",t.classType),r(o,"icon",t.icon),r(o,"specialization_id",t.specialization),r(o,"source_path",e),r(o,"start_skills",Rt(t.startSkills,"sid")),r(o,"start_skill_levels",Rt(t.startSkills,"skillLevel")),r(o,"start_magics",Rt(t.startMagics,"sidConfig")||"temp"),r(o,"start_level",t.startLevel,1),r(o,"attacks_times_before",t.attacksTimesBefore,s.attacks_times_before),r(o,"mesh",t.mesh,s.mesh),r(o,"mount",t.mounts,s.mount),r(o,"skills_roll_variant",t.skillsRollVariant,s.skills_roll_variant),r(o,"view_radius",t.stats?.viewRadius,s.view_radius),r(o,"stats_num",t.stats?.statsNum,s.stats_num),r(o,"magic_casts_per_round",t.stats?.magicCastsPerRound,s.magic_casts_per_round),r(o,"enable_tactics",t.stats?.enableTactics,s.enable_tactics),r(o,"tactics_placement_size",t.stats?.tacticsPlacementSize,s.tactics_placement_size),r(o,"enable_hero_native_biome",t.stats?.enableHeroNativeBiome,s.enable_hero_native_biome),r(o,"offence",t.stats?.offence,s.offence),r(o,"defence",t.stats?.defence,s.defence),r(o,"spell_power",t.stats?.spellPower,s.spell_power),r(o,"intelligence",t.stats?.intelligence,s.intelligence),r(o,"luck",t.stats?.luck,s.luck),r(o,"morale",t.stats?.moral,s.morale),r(o,"roll_lvl1_attack",N(t,1,0)||0),r(o,"roll_lvl1_defense",N(t,1,1)||0),r(o,"roll_lvl1_power",N(t,1,2)||0),r(o,"roll_lvl1_knowledge",N(t,1,3)||0),r(o,"roll_lvl24_attack",N(t,24,0)||0),r(o,"roll_lvl24_defense",N(t,24,1)||0),r(o,"roll_lvl24_power",N(t,24,2)||0),r(o,"roll_lvl24_knowledge",N(t,24,3)||0),zs(o,s),Bs(o,i);let a=_([{target_id:o.id,type:"hero",name:o.name_sid,description:o.desc_sid},{target_id:o.id,type:"hero_motto",description:o.motto_sid}]),c=[];for(let[l,d]of t.startSquad.entries())c.push(Me(d,l+1,t.id,"primary"));for(let[l,d]of t.startSquadAlt.entries())c.push(Me(d,l+1,t.id,"alt"));return[o,...a,...c]}function zs(t,n){let e=Object.keys(t).filter(i=>i.startsWith("roll")),s=0;for(let i of e)s+=t[i]===n[i]?1:0;if(s===e.length)for(let i of e)delete t[i]}function Bs(t,n){let{specialization_id:e,start_skills:s=[],start_skill_levels:i=[]}=t;t.start_magics=t.start_magics==="temp"?[]:t.start_magics;let{start_magics:o}=t;if(n){let{addedSpells:a,replacedSpells:c}=n,l=c[e]||[];for(let[d,u]of s.entries()){let f=u+"_L"+i[d],m=a[f];m&&o.unshift(...m)}for(let[d,u]of o.entries())for(let f of l)if(f[0]===u){o[d]=f[1];break}}o.length||delete t.start_magics}function Re(t){return t.includes("campaign")||t.includes("custom")}function Rt(t,n){let e=t.map(s=>s[n]);return e.length?e:void 0}function N(t,n,e){if(!t.statsRolls)return;let s=t.statsRolls.find(i=>i.levelFrom===n)?.rollChances[e].c;return s===void 0&&(s=0),s}function Me(t,n,e,s){let i={_type:"HeroStartSquadDef"};return r(i,"hero_id",e),r(i,"variant",s),r(i,"slot",n),r(i,"unit_id",t.sid),r(i,"min",t.min),r(i,"max",t.max),i}var mt=Ss;var Is=t=>typeof t=="object"&&t!==null,Ee=Is;var Us=t=>Object.values(t).length,je=Us;function Ls(t){let n={},e=p(t,"DB/heroes/.*?json","campaign|custom"),s=Ms(e);je(s)!==12&&g("Unexpected hero classes count!");for(let i in s){let o=s[i],a=[{target_id:i,type:"hero_class",name:i+"_name",description:o.class_type+"_desc"}];n["HeroClass~"+i]=[o,..._(a)]}return n}function Ms(t){let n={};for(let e in t){let s=t[e];s.length!==1&&g("Unexpected hero list count!",e);let i=s[0];if(!Ee(i)){g("Hero must be pojo!",i);continue}let o=Ps(i),{id:a}=o;if(a in n){let c=JSON.stringify(n[a]),l=JSON.stringify(o);c!==l&&g("Fresh class is not identical to old class!",c,e,l)}else n[a]=o}return n}function Ps(t){let{fraction:n,classType:e}=t,s=e+"_"+n,i={_type:"HeroClassDef"};return r(i,"id",s),r(i,"name_sid",s+"_name"),r(i,"desc_sid",e+"_desc"),r(i,"faction",n),r(i,"class_type",e),r(i,"mesh",t.mesh),r(i,"mount",t.mounts),r(i,"native_biome",t.nativeBiome),r(i,"skills_roll_variant",t.skillsRollVariant),r(i,"cost_gold",t.costGold),r(i,"start_level",t.startLevel),r(i,"attacks_times_before",t.attacksTimesBefore),r(i,"view_radius",t.stats?.viewRadius),r(i,"stats_num",t.stats?.statsNum),r(i,"magic_casts_per_round",t.stats?.magicCastsPerRound),r(i,"enable_tactics",t.stats?.enableTactics),r(i,"tactics_placement_size",t.stats?.tacticsPlacementSize),r(i,"enable_hero_native_biome",t.stats?.enableHeroNativeBiome),r(i,"offence",t.stats?.offence),r(i,"defence",t.stats?.defence),r(i,"spell_power",t.stats?.spellPower),r(i,"intelligence",t.stats?.intelligence),r(i,"luck",t.stats?.luck),r(i,"morale",t.stats?.moral),r(i,"roll_lvl1_attack",z(t,"statsRolls[0].rollChances[0].c")),r(i,"roll_lvl1_defense",z(t,"statsRolls[0].rollChances[1].c")),r(i,"roll_lvl1_power",z(t,"statsRolls[0].rollChances[2].c")),r(i,"roll_lvl1_knowledge",z(t,"statsRolls[0].rollChances[3].c")),r(i,"roll_lvl24_attack",z(t,"statsRolls[1].rollChances[0].c")),r(i,"roll_lvl24_defense",z(t,"statsRolls[1].rollChances[1].c")),r(i,"roll_lvl24_power",z(t,"statsRolls[1].rollChances[2].c")),r(i,"roll_lvl24_knowledge",z(t,"statsRolls[1].rollChances[3].c")),i}var Fe=Ls;var Ne=new Set([]);function Rs(t){let n={},e=p(t,"DB/heroes_specializations/");for(let s in e){let i=e[s];for(let o of i){let{id:a}=o;Ne.size&&!Ne.has(a)||(n["HeroSpecialization~"+a]=Es(o,s))}}return n}function Es(t,n){let e={_type:"HeroSpecializationDef"};r(e,"id",t.id),r(e,"name_sid",t.name),r(e,"desc_sid",t.desc),r(e,"icon",t.icon),r(e,"source_path",n);let s=_({target_id:e.id,type:"hero_specialization",name:e.name_sid,description:e.desc_sid,_data:{CurrentHeroSpecializationConfig:t}}),i=S(t,"hero_specialization");return[e,...s,...i]}var Oe=Rs;var js={defence:!0,intelligence:!0,luck:!0,morale:!0,offence:!0,spellPower:!0};function Fs(){return L(js,{domain:"HeroStat",type:"hero_stat",path:"Lang/english/texts/ui.json"})}var He=Fs;var $e=new Set([]);function Ns(t){let n={},e=p(t,"DB/heroes_sub_classes/.*?json");for(let s in e){let i=e[s];for(let o of i){let{id:a}=o;$e.size&&!$e.has(a)||(n["HeroSubClass~"+a]=Os(o,s))}}return n}function Os(t,n){let e={_type:"HeroSubClassDef"};r(e,"id",t.id),r(e,"name_sid",t.name),r(e,"desc_sid",t.desc),r(e,"icon",t.icon),r(e,"faction",t.faction),r(e,"class_type",t.classType),r(e,"activation_skill_1_sid",t.activationConditions[0].skillSid),r(e,"activation_skill_1_level",t.activationConditions[0].skillLevel),r(e,"activation_skill_2_sid",t.activationConditions[1].skillSid),r(e,"activation_skill_2_level",t.activationConditions[1].skillLevel),r(e,"activation_skill_3_sid",t.activationConditions[2].skillSid),r(e,"activation_skill_3_level",t.activationConditions[2].skillLevel),r(e,"activation_skill_4_sid",t.activationConditions[3].skillSid),r(e,"activation_skill_4_level",t.activationConditions[3].skillLevel),r(e,"activation_skill_5_sid",t.activationConditions[4].skillSid),r(e,"activation_skill_5_level",t.activationConditions[4].skillLevel),r(e,"source_path",n);let s=_({target_id:e.id,type:"hero_sub_class",name:e.name_sid,description:e.desc_sid,_data:{}}),i=S(t,"hero_sub_class");return[e,...s,...i]}var qe=Ns;var We=new Set([]);function Hs(t){let n={},e=p(t,"DB/items/item_sets/");for(let s in e){let i=e[s];for(let o of i){let{id:a}=o;We.size&&!We.has(a)||(n["ItemSet~"+a]=$s(o,s))}}return n}function $s(t,n){let e={_type:"ItemSetDef"};r(e,"id",t.id),r(e,"name_sid",t.name),r(e,"items_in_set",t.itemsInSet),r(e,"source_path",n);let s=_({target_id:e.id,type:"item_set",name:e.name_sid,_data:{}}),i=[],o=t.bonuses||[];for(let[a,c]of o.entries())i.push(...qs(c,a,t));return[e,...s,...i]}function qs(t,n,e){let s={_type:"ItemSetTierDef"};r(s,"id",e.id+"_tier_"+n),r(s,"set_id",e.id),r(s,"ordinal",n),r(s,"required_amount",t.requiredItemsAmount),r(s,"description_sid",t.desc);let i=_({target_id:s.id,type:"item_set_tier",description:s.description_sid,_data:{CurrentItemSet:{config:e}}}),o={id:s.id,bonuses:t.heroBonuses},a=S(o,"item_set_tier");return[s,...i,...a]}var Ge=Hs;var Ve=new Set([]);function Ws(t){let n={},e=Gs(t),s=p(t,"DB/fractions_laws/");for(let i in s){let o=s[i];for(let a of o){let{id:c}=a;Ve.size&&!Ve.has(c)||(n["Law~"+c]=Vs(a,i,e))}}return n}function Gs(t){let n={},e=_t(t);for(let s in e){let i=e[s];for(let o of i)o.law_id&&(n[o.law_id]=o)}return n}function Vs(t,n,e){let[,s]=y(t.id,/_(\d+)$/),{parametersPerLevel:i=[]}=t,o={_type:"LawDef"};r(o,"id",t.id),r(o,"faction",e[t.id]?.faction),r(o,"ordinal",s),r(o,"tier",e[t.id]?.tier),r(o,"name_sid",t.name),r(o,"desc_sid",t.desc),r(o,"icon",t.icon),r(o,"max_level",i.length),r(o,"test",n.includes("test")),r(o,"source_path",n);let a=_({target_id:o.id,type:"law",name:o.name_sid}),c=[];for(let[l,d]of i.entries())c.push(...Zs(d,l+1,t));return[o,...a,...c]}function Zs(t,n,e){let s={_type:"LawLevelDef"};r(s,"law_id",e.id),r(s,"level",n),r(s,"cost",t.cost);let i=_({target_id:e.id,type:"law_level",variant:n,description:e.desc,_data:{CurrentFractionLawConfig:t}}),o={...t,id:e.id+"_L"+n},a=S(o,"law_level");return[s,...i,...a]}var Ze=Ws;var Je=new Set([]);function Js(t){let n={},e=p(t,"DB/objects_logic/",/artifacts|campaign|cities|blocks/);for(let s in e){let i=e[s];for(let o of i){let{id:a}=o;if(Je.size&&!Je.has(a))continue;let c=Ys(o,s);c&&(n["MapObject~"+a]=c)}}return n}function Ys(t,n){let e=y(n,/(\w+)\/[^\/]+$/)[1],s=t.guardUnits?.map(c=>`${c.sid}:${c.amount}`),i=Ks(t.id+"_name");if(e==="todo"||n.includes("event_banks")&&!i)return;let o={_type:"MapObjectDef"};r(o,"id",t.id),r(o,"category",e),r(o,"name_sid",i&&t.id+"_name"),r(o,"desc_sid",i&&t.id+"_description"),r(o,"narrative_desc_sid",i&&t.id+"_narrativeDescription"),r(o,"goods_value",t.goodsValue),r(o,"ai_value",t.aiValue),r(o,"custom_guard_value",t.customGuardValue),r(o,"view_radius",t.viewRadius),r(o,"ai_ignore",t.aiIgnore),r(o,"resource_name",t.resName),r(o,"resource_value",t.resValue),r(o,"guard_units",s),r(o,"fraction",t.fraction),r(o,"tier",t.tier),r(o,"units_hire_sid",t.unitsData?.units[0].sids[0]),r(o,"units_weekly",t.unitsData?.units[0].weeklyIncrement),r(o,"bonus_growth",t.bonuses?.find(c=>c.type==="cityUnitsIncrementFromBarrack")?.parameters[1]),r(o,"source_path",n);let a=_([{target_id:o.id,type:"map_object",name:o.name_sid,description:o.desc_sid,_data:{}},{target_id:o.id,type:"map_object_narrative",description:o.narrative_desc_sid}]);return[o,...a]}function Ks(t){if(!t.includes("scroll_box")&&dt(t))return!0}var Ye=Js;var Xs={fly:"flyer",teleport:"blink"};function Qs(){return L(Xs,{domain:"Movement",type:"movement",prefix:"base_passive_"})}var Ke=Qs;var Xe=new Set([]);function ti(t){let n={},e=p(t,"DB/res/");for(let s in e){let i=e[s];for(let o of i){let{id:a}=o;Xe.size&&!Xe.has(a)||(n["Resource~"+a]=ei(o,s))}}return n}function ei(t,n){let e={_type:"EntryDef"};r(e,"type","resource"),r(e,"subtype",t.id),r(e,"icon",t.icon),r(e,"name_sid",t.name),r(e,"desc_sid",t.desc),r(e,"narrative_description_sid",t.narrativeDesc),r(e,"source_path",n);let s=_({target_id:e.subtype,type:"resource",subtype:e.subtype,name:e.name_sid,description:e.desc_sid,_data:{}});return[e,...s]}var Qe=ti;var tn=new Set([]),nn={"pseudo_skills.json":"pseudo","skills.json":"production","skills_arena.json":"arena","skills_campaign.json":"campaign","sub_skills.json":"production","sub_skills_arena.json":"arena","sub_skills_campaign.json":"campaign","sub_skills_test.json":"test"},en=["DB/heroes_skills/sub_skills/sub_skills_arena.json","DB/heroes_skills/sub_skills/sub_skills_campaign.json","DB/heroes_skills/sub_skills/sub_skills.json","DB/heroes_skills/sub_skills/sub_skills_test.json"];function ni(t){let n={},e=ri(t),s=p(t,"DB/heroes_skills/skills/.*?json");for(let i in s){let o=s[i];for(let a of o){let{id:c}=a;tn.size&&!tn.has(c)||(n["Skill~"+c]=ii(a,i,e))}}return n["Skill~_orphan_sub_skills"]=ci(n,e),n}function ri(t){let n={},e=p(t,"DB/heroes_skills/sub_skills/.*?json");for(let s in e){let i=e[s];for(let o of i){let{id:a}=o;n[a]=si(o,s)}}return n}function si(t,n){lt(t);let e=t.id.replace(/sub_/,"");e=e.replace(/_\d/,""),e=e.replace(/_old/,""),e=e.replace(/_new/,"");let s={_type:"SubSkillDef"};r(s,"id",t.id),r(s,"variant",nn[n.split("/").pop()]),r(s,"parent_skill_id",e),r(s,"name_sid",t.name),r(s,"desc_sid",t.desc),r(s,"icon",t.icon),r(s,"source_path",n);let i=_({target_id:s.id,type:"sub_skill",name:s.name_sid,description:s.desc_sid,_data:{CurrentSubSkill:t}}),o=S(t,"sub_skill");return[s,...i,...o]}function ii(t,n,e){let s=[];s.push(...oi(t,n));for(let a=0;a<t.parametersPerLevel.length;a++){let c=t.parametersPerLevel[a];s.push(...ai(t,c,a+1))}let i=new Set;for(let a=0;a<t.parametersPerLevel.length;a++){let{subSkills:c=[]}=t.parametersPerLevel[a];for(let l of c){if(!(l in e)){g("Not found in prepared subskills!",l);continue}i.add(l)}}return Array.from(i).sort().forEach(a=>s.push(...e[a])),s}function oi(t,n){let e={_type:"SkillDef"};r(e,"id",t.id),r(e,"variant",nn[n.split("/").pop()]),r(e,"skill_type",t.skillType),r(e,"is_pseudo",e.variant==="pseudo"),r(e,"name_sid",t.name),r(e,"desc_sid",t.desc),r(e,"max_level",t.parametersPerLevel.length),r(e,"source_path",n);let s=_({target_id:t.id,type:"skill",name:e.name_sid,description:e.desc_sid,_data:{CurrentSkillParameter:t.parametersPerLevel[0],CurrentSkillLevel:1}});return[e,...s]}function ai(t,n,e){let s=[],i={_type:"SkillLevelDef"};r(i,"skill_id",t.id),r(i,"level",e),r(i,"name_sid",n.name),r(i,"desc_sid",n.desc),r(i,"icon",n.icon),r(i,"offered_sub_skills",n.subSkills),s.push(i);let o=_({target_id:t.id,type:"skill_level",variant:e,name:i.name_sid,description:i.desc_sid,_data:{CurrentSkillParameter:n,CurrentSkillLevel:e}});s.push(...o),n.id=t.id+"_L"+e;let a=S(n,"skill_level");return s.push(...a),s}function ci(t,n){for(let i in t){let o=t[i];for(let a of o)a._type==="SubSkillDef"&&delete n[a.id]}let e=Object.values(n).sort(li),s=[];for(let i of e)delete i[0].parent_skill_id,s.push(...i);return s.comment="<!-- Catch-all page for sub-skills not referenced by any skill's subSkills[] list (test entries + legacy arena variants). -->",s}function li(t,n){let e=en.indexOf(t[0].source_path),s=en.indexOf(n[0].source_path);return e!==s?e-s:t[0].id.localeCompare(n[0].id)}var rn=ni;var sn=new Set([]);function ui(t){let n={},e=p(t,"DB/foo/.*?json");for(let s in e){let i=e[s];for(let o of i){let{id:a}=o;sn.size&&!sn.has(a)||(n["Foo~"+a]=fi(o,s))}}return n}function fi(t,n){let e={_type:"FooDef"};r(e,"id",t.id),r(e,"name_sid",t.name),r(e,"description_sid",t.description),r(e,"source_path",n);let s=_({target_id:e.id,type:"foo",name:e.name_sid,description:e.description_sid,_data:{}});return[e,...s]}var on=ui;var di={human:"humans",undead:"necros",nature:"nature",demon:"demons",unfrozen:"unfrozen",dungeon:"dungeon"};function pi(t){let n={},e=_i(t),s=p(t,"DB/heroes_skills/skills_by_level_replace",null,!0);for(let i of s)n["SkillRollReplacement~"+i.id]=mi(i,e);return n}function _i(t){let n={},e=mt(t);for(let s in e){let i=e[s][0];n[i.id]=i}return n}function mi(t,n){let e=n[t.id],s=di[e.faction],i=e.class_type,o=[],a=t.defaultList[0].rollChances[0];for(let c of t.defaultList[0].levels){let l={_type:"SkillRollReplacementDef"};r(l,"hero_id",t.id),r(l,"arena_table_id",`arenaGame_${s}_${i}_skills_table`),r(l,"level",c),r(l,"skill_id",a.sid),r(l,"weight",a.chance),o.push(l)}return o}var an=pi;var cn=new Set([]),hi={humans:"human",necros:"undead",nature:"nature",demons:"demon",unfrozen:"unfrozen",dungeon:"dungeon"};function vi(t){let n={},e=p(t,"DB/heroes_skills/skills_by_level_tables/[^/]*$");for(let s in e){let i=e[s];for(let o of i){let{id:a}=o;cn.size&&!cn.has(a)||(n["SkillRollTable~"+a]=gi(o,s))}}return n}function gi(t,n){let[,e,s]=y(t.id,/([a-z]+)_([a-z]+)_skills_table$/),i=hi[e],o={_type:"SkillRollTableDef"};r(o,"id",t.id),r(o,"class_id",s+"_"+i),r(o,"faction",i),r(o,"class_type",s),r(o,"mode",t.id.split("_").length===5?"arena":"standard"),r(o,"source_path",n);let a=[],c={default:t.defaultList.find(l=>l.levels[0]===1)?.rollChances,magic_levels:t.specialList.find(l=>l.levels[0]===4)?.rollChances,signature_levels:t.specialList.find(l=>l.levels[0]===5)?.rollChances,level_20_mega:t.specialList.find(l=>l.levels[0]===20)?.rollChances};for(let l in c){let d=c[l]||[];d.sort(yi);for(let u of d)a.push(bi(u,l,t.id))}return[o,...a]}function yi(t,n){let e=t.chance,s=n.chance;return e!==s?e>s?-1:1:t.sid.localeCompare(n.sid)}function bi(t,n,e){let s={_type:"SkillRollWeightDef"};return r(s,"table_id",e),r(s,"band_kind",n),r(s,"skill_id",t.sid),r(s,"weight",t.chance),s}var ln=vi;var un=new Set([]);function Di(t){let n={},e=p(t,"DB/magics/.*?json","test_");for(let s in e){let i=e[s];for(let o of i){let{id:a}=o;un.size&&!un.has(a)||(n["Spell~"+a]=ki(o,s))}}return n}function ki(t,n){let e=[];e.push(...wi(t,n));for(let s=0;s<t.description.length;s++)e.push(...Si(t,s+1));return e}function wi(t,n){let e={_type:"SpellDef"};r(e,"id",t.id),r(e,"name_sid",t.name),r(e,"school",t.school_),r(e,"rank",t.rank),r(e,"used_on_map",t.usedOnMap),r(e,"icon",t.icon),r(e,"magic_type_description",t.magicTypeDescription),r(e,"is_special_magic",!!t.isSpecialMagic),r(e,"is_unique_magic",!!t.isUniqueMagic),r(e,"normal_magic_sid",t.normalMagicSid),r(e,"learn_cost_star_dust",t.learnCost?.find(i=>i.name==="starDust")?.cost),r(e,"learn_cost_gemstones",t.learnCost?.find(i=>i.name==="gemstones")?.cost),r(e,"learn_cost_crystals",t.learnCost?.find(i=>i.name==="crystals")?.cost),r(e,"learn_cost_mercury",t.learnCost?.find(i=>i.name==="mercury")?.cost),r(e,"excaption_in_tooltip_sid",t.excaptionInTooltip),r(e,"up_effect_description_sid",t.upEffectDescription),r(e,"energy_type",t.energyType),r(e,"source_path",n);let s=_({target_id:t.id,type:"spell",name:t.name});return[e,...s]}function Si(t,n){let e={_type:"SpellRankDef"};r(e,"spell_id",t.id),r(e,"level",n),r(e,"description_sid",t.description[n-1]),r(e,"bonus_description_sid",t.bonusDescriptions?.[n-2]?.description),r(e,"mana_cost",t.manaCost[n-1]),r(e,"upgrade_cost",t.upgradeCost[n-2]);let s=_({target_id:t.id,type:"spell_rank",variant:n,description:t.description[n-1],bonus_description:t.bonusDescriptions?.[n-2]?.description,_data:{CurrentMagicBattleRoot:t,CurrentMagicBattle:Ai(t,n),CurrentMagicWorld:Ci(t,n),CurrentMagicLevel:n}});return[e,...s]}function Ai(t,n){let e=t.battleMagic?.magicDealers||[{}],s=t.battleMagic?.dealersPerLevels||[];for(let o=0;o<4;o++)s[o]||(s[o]=0);let i=s[n-1];return e[i]}function Ci(t,n){let e=t.worldMagic?.magicSettings||[{}],s=t.worldMagic?.settingPerLevels||[];for(let o=0;o<4;o++)s[o]||(s[o]=0);let i=s[n-1];return e[i]}var fn=Di;var dn=new Set([]);function xi(t){let n={},e=Ti(t),s=p(t,"DB/heroes_skills/skills/pseudo_skills.json");for(let i in s){let o=s[i];for(let a of o){let{id:c}=a;dn.size&&!dn.has(c)||(n["StatBonusRoll~"+c]=zi(a,e))}}return n}function Ti(t){let e=p(t,"/humans_might_skills_table.json",null,!0)[0].defaultList.find(s=>s.levels[0]===-2).rollChances;return F(e,"sid")}function zi(t,n){let e={_type:"StatBonusRollDef"};r(e,"id",t.id),r(e,"stat",t.parametersPerLevel[0].bonuses[0].parameters[0]),r(e,"magnitude",t.parametersPerLevel[0].bonuses[0].parameters[1]),r(e,"weight",n[t.id].chance),r(e,"name_sid",t.name),r(e,"desc_sid",t.desc);let s=_({target_id:e.id,type:"stat_bonus_roll",name:e.name_sid,description:e.desc_sid,_data:{}});return[e,...s]}var pn=xi;var Bi={army_laws:!0,biography:"hero_window_ui_narrative",creature:{id:"arenaUnitCount",path:"Lang/english/texts/menu.json"},experience:"hero_exp_name",faction:{id:"fractions",path:"Lang/english/texts/menu.json"},faction_laws:!0,starting_army:{id:"lobby_units",path:"Lang/english/texts/menu.json"},starting_skills:{id:"lobby_skills",path:"Lang/english/texts/menu.json"},starting_spells:{id:"lobby_spells",path:"Lang/english/texts/menu.json"},stats:"hero_stats_reward_name",tier:"tooltipRang",unit_window_narrative:!0};function Ii(){return L(Bi,{domain:"UI",type:"ui",prefix:"",name_suffix:"",suppressDescription:!0,trimColon:!0,path:"Lang/english/texts/ui.json"})}var _n=Ii;var mn=new Set([]);function Ui(t){let n={},e=p(t,"DB/foo/.*?json");for(let s in e){let i=e[s];for(let o of i){let{id:a}=o;mn.size&&!mn.has(a)||(n["Foo~"+a]=Li(o,s))}}return n}function Li(t,n){let e={_type:"FooDef"};r(e,"id",t.id),r(e,"name_sid",t.name),r(e,"description_sid",t.description),r(e,"source_path",n);let s=_({target_id:e.id,type:"foo",name:e.name_sid,description:e.description_sid,_data:{}});return[e,...s]}var hn=Ui;var Mi=new Set(["human","undead","nature","demon","unfrozen","dungeon","neutral"]);function Pi(t,n){if(t.startsWith("base_")||t.startsWith("common_"))return!0;let e=t.split("_").shift();return n.startsWith(e)?!1:Mi.has(e)}var Y=Pi;var vn=new Set([]),ht={melee:"melee_attack",shoot:"ranged_attack",range:"remote_attack"};function Ri(t){let n={},e=p(t,/units_logics/),s=p(t,/units_views/);for(let i in e){let o=e[i][0].id;if(vn.size&&!vn.has(o))continue;let a=i.replace("_logics/","_views/").replace("_l.","_v.");if(!s[a]){g("Missing path!",a);continue}let c=e[i],l=s[a];c.length!==1&&l.length!==1&&g("Unexpected logic/view count!",i),n["Unit~"+o]=Ei(c[0],l[0],i)}return n}function Ei(t,n,e){let s=[],i=[],o=ji(t,n,e,i);return s.push(o),s.push(...$i(t,n,i)),s.push(...Wi(t)),s.push(...Gi(t)),s.push(...qi(t)),s.push(...Vi(t,n,i)),s.push(Zi(t,o)),s.push(..._(i)),s}function ji(t,n,e,s){let i={_type:"UnitDef"},o=t.id.replace(/_upg$|_alt$/,""),a=!dt(t.id+"_name");return r(i,"id",t.id),r(i,"unused",a?!0:null),r(i,"faction",t.fraction),r(i,"tier",t.tier),r(i,"source_path",e),r(i,"name_sid",t.id+"_name"),r(i,"desc_sid",t.id+"_narrativeDescription"),r(i,"base_sid",o===t.id?null:o),r(i,"upgrade_sid",t.upgradeSid),r(i,"hp",t.stats.hp),r(i,"offence",t.stats.offence),r(i,"defence",t.stats.defence),r(i,"damage_min",t.stats.damageMin),r(i,"damage_max",t.stats.damageMax),r(i,"initiative",t.stats.initiative),r(i,"speed",t.stats.speed),r(i,"luck",t.stats.luck),r(i,"morale",t.stats.moral),r(i,"energy_per_cast",t.stats.energyPerCast),r(i,"energy_per_round",t.stats.energyPerRound),r(i,"energy_per_take_damage",t.stats.energyPerTakeDamage),r(i,"action_points",t.stats.actionPoints),r(i,"num_counters",t.stats.numCounters),r(i,"morale_min",t.stats.moralMin),r(i,"morale_max",t.stats.moralMax),r(i,"luck_min",t.stats.luckMin),r(i,"luck_max",t.stats.luckMax),r(i,"move_type",t.stats.moveType||"ground"),r(i,"creature_type",Fi(t)),r(i,"immunities",Ni(t)),r(i,"disablers",Oi(t)),r(i,"shared_abilities",Hi(n)),r(i,"gold_cost",$(t,"gold")),r(i,"wood_cost",$(t,"wood")),r(i,"ore_cost",$(t,"ore")),r(i,"mercury_cost",$(t,"mercury")),r(i,"dust_cost",$(t,"dust")),r(i,"crystal_cost",$(t,"crystals")),r(i,"gemstone_cost",$(t,"gemstones")),r(i,"native_biome",t.nativeBiome),r(i,"ai_archetype",t.ai),r(i,"tags",t.tags),r(i,"leave_corpse",t.leaveCorpse===!1?!1:null),r(i,"squad_value",t.squadValue),r(i,"exp_bonus",t.expBonus),s.push({target_id:t.id,type:"unit",name:i.name_sid,description:i.desc_sid}),i}function Fi(t){let{passives:n=[]}=t;for(let e of n){let s=e?.data?.immunities||[];for(let i of s){let{tags:o=[]}=i,a=o.find(c=>c.endsWith("_immunities"));if(a)return a.replace("_immunities","")}}}function Ni(t){let n=[],{passives:e=[]}=t;for(let s of e){let i=s?.data?.immunities||[];for(let o of i){let{tags:a=[]}=o;for(let c of a)(c==="avatar_immunities"||!c.endsWith("_immunities"))&&n.push(c)}}return n}function Oi(t){let n=[],{passives:e=[]}=t;for(let s of e){let i=s?.data?.disablers||[];for(let o of i)o.mech&&n.push(o.mech)}return n}function Hi(t){return[...t.alternativeAttacks||[],...t.abilities||[],...t.passives||[]].filter(s=>Y(s.name,t.id)).map(s=>s.name)}function $(t,n){let{costResArray:e=[]}=t.unitCost||{};for(let s of e)if(s.name===n)return s.cost}function $i(t,n,e){let s=[],i=[...t.alternativeAttacks||[],...t.abilities||[]],o=[...n.alternativeAttacks||[],...n.abilities||[]],a=0;for(let c=0;c<o.length;c++){let l=i[c]||{},d=o[c];if(Y(d.name,t.id))continue;a++;let u={_type:"UnitAbilityActiveDef"};r(u,"ability_id",t.id+"_"+a),r(u,"unit_id",t.id),r(u,"ability_type","active"),r(u,"ordinal",a),r(u,"name_sid",d.name),r(u,"desc_sid",d.description),r(u,"active_type",d.abilityType),r(u,"info_description",d.infoDescription),r(u,"excaption_in_tooltip",d.excaptionInTooltip),r(u,"attack_type",l.attackType_),r(u,"rank",l.rank),r(u,"cd",l.cd),r(u,"energy_level",l.energyLevel),r(u,"action_cost",l.actionCost),r(u,"charges",l.charges),r(u,"move_type_active",l.moveType),r(u,"dont_use_energy",l.dontUseEnergy),r(u,"disable_for_ai",l.disableForAi),r(u,"use_all_energy_levels",l.useAllEnergyLevels),r(u,"never_disable",l.neverDisable);let f=l.damageDealer||{};r(u,"untargeted_cast",f.untargetedCast),r(u,"instacast",f.instacast),r(u,"attack_pattern_sid",f.attackPatternSid),r(u,"damage_target",f.damageTarget_),r(u,"damage_type",f.damageType_),r(u,"stat_dmg_mult",f.statDmgMult),r(u,"trigger_counter",f.triggerCounter),r(u,"min_damage_per_energy_level",f.minDamagePerEnergyLevel),r(u,"max_damage_per_energy_level",f.maxDamagePerEnergyLevel),r(u,"use_speed_as_shoot_range",f.useSpeedAsShootRange),r(u,"temp_self_buff",f.tempSelfBuff),r(u,"multitarget_type",f.multitargetType),r(u,"num_targets",f.numTargets),r(u,"min_base_dmg",f.minBaseDmg),r(u,"max_base_dmg",f.maxBaseDmg),r(u,"min_stack_dmg",f.minStackDmg),r(u,"max_stack_dmg",f.maxStackDmg),r(u,"damage_multipler_per_hero_level",f.damageMultiplerPerHeroLevel),r(u,"buff_sid",f.buff?.sid),r(u,"buff_target",f.buffTarget_),r(u,"buff_duration",f.buff?.duration),r(u,"buff_charges",f.buff?.charges),r(u,"shoot_range",f.shootRange),r(u,"shoot_threshold",f.shootThreshold),r(u,"shoot_red_count",f.shootRedCount),r(u,"shoot_dmg_buff",f.shootDmgBuff),r(u,"cast_target",f.castTargetParams?.castTarget_),r(u,"cast_selection",f.castTargetParams?.selection),r(u,"cast_target_condition",f.castTargetParams?.targetCondition_),r(u,"cast_target_tags",f.castTargetParams?.targetTags),r(u,"affect_target",f.affectTargetParams?.castTarget_),r(u,"affect_selection",f.affectTargetParams?.selection),r(u,"affect_target_condition",f.affectTargetParams?.targetCondition_),r(u,"affect_target_tags",f.affectTargetParams?.targetTags),s.push(u),e.push({target_id:u.ability_id,type:"unit_ability",name:u.name_sid,description:u.desc_sid,_data:{CurrentAbility:l,CurrentUnitConfig:t,CurrentUnitStats:t.stats}})}return s}function qi(t){let n=[],e=t.globalPassives||[];for(let s=0;s<e.length;s++){let i=e[s],o=s+1,a={_type:"UnitAbilityGlobalDef"};r(a,"ability_id",t.id+"_global_passive_"+o),r(a,"unit_id",t.id),r(a,"ability_type","global_passive"),r(a,"ordinal",o),r(a,"name_sid",a.ability_id+"_name"),r(a,"global_target",i.target),r(a,"global_power",i.power),r(a,"global_tag",i.tag),r(a,"affected_stat",Object.keys(i.data?.stats||{})[0]),r(a,"affected_stat_amount",i.data?.stats?.[a.affected_stat]),"affected_stat_amount"in a&&(a.affected_stat_amount+=".0"),n.push(a)}return n}function Wi(t){let n=[],e=t.aura?[t.aura]:[];for(let s=0;s<e.length;s++){let i=e[s],o=s+1,a={_type:"UnitAbilityAuraDef"};r(a,"ability_id",t.id+"_aura_"+o),r(a,"unit_id",t.id),r(a,"ability_type","aura"),r(a,"ordinal",o),r(a,"name_sid",a.ability_id+"_name"),r(a,"aura_target",i.target),r(a,"aura_power",i.power),r(a,"aura_radius",i.radius),r(a,"aura_tag",i.tag);let c=i.data?.stats||{},l=Object.keys(c)[0];r(a,"affected_stat",l),typeof c[l]=="number"&&r(a,"affected_stat_amount",c[l]+".0"),n.push(a)}return n}function Gi(t){let n=[],e=t.conditionalPassives||[];for(let s=0;s<e.length;s++){let i=e[s],o=s+1,a={_type:"UnitAbilityConditionalDef"};r(a,"ability_id",t.id+"_conditional_passive_"+o),r(a,"unit_id",t.id),r(a,"ability_type","conditional_passive"),r(a,"ordinal",o),r(a,"name_sid",a.ability_id+"_name"),r(a,"condition_check",i.condition?.[0]),r(a,"condition_target",i.condition?.[1]),r(a,"condition_value",i.condition?.[2]);let c=i.stats||{},l=Object.keys(c)[0];r(a,"affected_stat",l),typeof c[l]=="number"&&r(a,"affected_stat_amount",c[l]+".0"),n.push(a)}return n}function Vi(t,n,e){let s=[],i=n.passives,o=0;for(let a=0;a<i.length;a++){let c=i[a];if(Y(c.name,t.id))continue;o++;let l={_type:"UnitAbilityPassiveDef"};r(l,"ability_id",t.id+"_passive_"+o),r(l,"unit_id",t.id),r(l,"ability_type","passive"),r(l,"ordinal",o),r(l,"name_sid",c.name),r(l,"desc_sid",c.description),r(l,"excaption_in_tooltip",c.excaptionInTooltip),s.push(l),e.push({target_id:l.ability_id,type:"unit_ability",name:l.name_sid,description:l.desc_sid,_data:{CurrentUnitConfig:t,CurrentUnitStats:t.stats}})}return s}function Zi(t,n){let e={_type:"UnitAttackDef"};r(e,"unit_id",t.id);let s=t.defaultAttacks?.[0]||{};r(e,"default_attack_type",Ji(s.attackType_,n)),r(e,"default_damage_target",s.damageDealer?.damageTarget_,"enemy"),r(e,"default_affect_target",s.damageDealer?.affectTargetParams.castTarget_,"enemy"),r(e,"default_trigger_counter",s.damageDealer?.triggerCounter,!0),r(e,"default_dont_trigger_energy_regen",s.damageDealer?.dontTriggerEnergyRegen),r(e,"default_buff_sid",s.damageDealer?.buff?.sid),r(e,"default_buff_target",s.damageDealer?.buffTarget_),r(e,"default_buff_duration",s.damageDealer?.buff?.duration);let i=t.counterAttacks?.[0]||{};r(e,"counter_attack_type",ht[i.attackType_]),r(e,"counter_stat_dmg_mult",i.damageDealer?.statDmgMult,1),r(e,"counter_buff_sid",i.damageDealer?.buff?.sid),r(e,"counter_buff_target",i.damageDealer?.buffTarget_),r(e,"counter_buff_duration",i.damageDealer?.buff?.duration),r(e,"counter_damage_target",i.damageDealer?.damageTarget_,"enemy"),r(e,"counter_affect_target",i.damageDealer?.affectTargetParams.castTarget_,"enemy"),r(e,"counter_dont_trigger_energy_regen",i.damageDealer?.dontTriggerEnergyRegen),r(e,"counter_is_armed_ability",Et(i.damageDealer?.tags));let o=t.alternativeAttacks?.[0]||{};r(e,"alt_attack_type",ht[o.attackType_]),r(e,"alt_stat_dmg_mult",o.damageDealer?.statDmgMult,.5),r(e,"alt_damage_target",o.damageDealer?.damageTarget_,"enemy"),r(e,"alt_affect_target",o.damageDealer?.affectTargetParams.castTarget_,"enemy"),r(e,"alt_trigger_counter",o.damageDealer?.triggerCounter,!1),r(e,"alt_buff_sid",o.damageDealer?.buff?.sid),r(e,"alt_buff_target",o.damageDealer?.buffTarget_),r(e,"alt_buff_duration",o.damageDealer?.buff?.duration),r(e,"alt_cd",o.cd),r(e,"alt_dont_use_energy",o.dontUseEnergy),r(e,"alt_never_disable",o.neverDisable),r(e,"alt_return_to_start_after_attack",o.returnToStartAfterAttack),r(e,"alt_temp_self_buff",o.damageDealer?.tempSelfBuff),r(e,"alt_is_armed_ability",Et(o.damageDealer?.tags));let a=t.alternativeAttacks?.[1]||{};return r(e,"alt2_attack_type",ht[a.attackType_]),r(e,"alt2_stat_dmg_mult",a.damageDealer?.statDmgMult,.5),r(e,"alt2_trigger_counter",a.damageDealer?.triggerCounter,!1),r(e,"alt2_buff_sid",a.damageDealer?.buff?.sid),r(e,"alt2_buff_target",a.damageDealer?.buffTarget_),r(e,"alt2_buff_duration",a.damageDealer?.buff?.duration),r(e,"alt2_cd",a.cd),r(e,"alt2_dont_use_energy",a.dontUseEnergy),r(e,"alt2_multitarget_type",a.damageDealer?.multitargetType),r(e,"alt2_num_targets",a.damageDealer?.numTargets),r(e,"alt2_is_armed_ability",Et(a.damageDealer?.tags)),e}function Et(t){if(Array.isArray(t)){for(let n of t)if(n.startsWith("armed_ability"))return!0}}function Ji(t,n){if(t=ht[t],!t)return;let{shared_abilities:e=[]}=n;for(let s of e)if(s.startsWith("base_passive_"+t))return s.replace("base_passive_","").replace("_name","");return t}var gn=Ri;function Yi(t){let n={},e=Ki(t);e.length||g("No ability type ids found!"),n["UnitLabels~ability_type"]=jt(e,"ability_type");let s=Xi(t);s.length||g("No info_description ids found!"),n["UnitLabels~info_description"]=jt(s,"info_description");let i=Qi(t);return i.length||g("No immunityIds found!"),n["UnitLabels~immunity"]=jt(i,"immunity"),n}function Ki(t){let n=[],e=p(t,/english.texts.unitsAbility.json$/,null,!0);for(let{sid:s}of e)s.startsWith("Ability_type_")&&n.push(s);return n}function Xi(t){let n=new Set,e=p(t,/units_views/);for(let s in e){let i=e[s][0],o=[...i.alternativeAttacks||[],...i.abilities||[]];for(let{infoDescription:a}of o)a&&n.add(a)}return Array.from(n)}function Qi(t){let n=new Set,e=p(t,/units_views/);for(let s in e){let i=e[s][0],o=[...i.alternativeAttacks||[],...i.abilities||[]];for(let{excaptionInTooltip:a}of o)a&&n.add(a)}return Array.from(n)}function jt(t,n){let e=t.map(i=>({target_id:i,type:n,name:i}));return _(e)}var yn=Yi;function to(t){return!(t.startsWith("base_class_")||t.startsWith("base_passive_flyer_")||t.startsWith("base_passive_blink_")||t.match(/base_passive_[a-z]+_attack_/))}var bn=to;var Dn=new Set([]);function eo(t){let n={},e=no(t);for(let s in e)n["UnitShared~"+s]=so(s,e[s]);return n}function no(t){let n={},e=p(t,/units_logics/),s=p(t,/units_views/);for(let i in e){let o=e[i][0].id;if(Dn.size&&!Dn.has(o))continue;let a=i.replace("_logics/","_views/").replace("_l.","_v."),c=e[i],l=s[a],d=ro(c[0],l[0]);Object.assign(n,d)}return n}function ro(t,n){let e={},{id:s,passives:i=[],alternativeAttacks:o=[],abilities:a=[]}=n,c=[...o,...a,...i];for(let l of c){let{name:d,description:u,abilityType:f}=l;if(Y(d,s)&&bn(d)){f&&(f==="Ability_type_attack_alt"||f==="Ability_type_attack_mod"||g("Unexpected ability!",n,l));let m=d.replace(/_name$/,"");e[m]={name:d,description:u,type:f,logic:t}}}return e}function so(t,{name:n,description:e,type:s,logic:i}){let o=!!s,a=[],c={_type:o?"UnitAbilityActiveDef":"UnitAbilityPassiveDef"};r(c,"ability_id",t),o&&r(c,"active_type",s),r(c,"name_sid",n),r(c,"desc_sid",e),o&&r(c,"cd",-1),a.push(c);let l=_([{target_id:t,type:"unit_ability",name:n,description:e,_data:{CurrentUnitConfig:i,CurrentUnitStats:i.stats}}]);return a.push(...l),a}var kn=eo;var io={damage:{id:"unitStat_damage",desc_suffix:"_description_detailed"},defence:"unitStat_defence",hp:{id:"unit_health",desc_suffix:"_description_detailed"},initiative:{id:"unitStat_initiative",desc_suffix:"_description_detailed"},luck:"unitStat_luck",moral:"unitStat_moral",offence:"unitStat_offence",speed:{id:"unitStat_speed",desc_suffix:"_description_detailed"}};function oo(){return L(io,{domain:"UnitStat",type:"unit_stat",name_suffix:"",path:"Lang/english/texts/ui.json"})}var wn=oo;var Sn=new Set([]),ao=[ge,be,we,Ae,Te,ze,Be,_t,mt,Fe,Oe,He,qe,Ge,Ze,Ye,Ke,Qe,rn,on,an,ln,fn,pn,_n,hn,gn,yn,kn,wn];async function An(t){t&&C.redirect(t);let n=await oe();he(n);let e={};for(let i of ao)(!Sn.size||Sn.has(i))&&Object.assign(e,i(n));let s={};for(let i in e){let o="Data/"+i+".wiki";s[o]=co(e[i])}return s}function co(t){let n=[];n.push("<!-- Bot-managed page. Edit the source in obelisk-bot, not here. -->"),t.comment&&n.push(t.comment);for(let e of t)n.push(lo(e));return n.push("[[Category:Game Data Import]]"),n.join(`

`).trim()}function lo(t){let n=[];n.push(`{{${t._type}`),delete t._type;for(let e in t)n.push(`| ${e.trim()} = ${uo(t[e])}`);return n.push("}}"),n.join(`
`)}function uo(t){switch(typeof t){case"boolean":return t?"yes":"no";case"string":return t;case"number":return t.toString();default:return Array.isArray(t)?t.join(","):(C.log("Unexpected value type!",typeof t,t),String(t))}}C.initialize(An);var _u=An;})();