MediaWiki:DiffTool.js
From Heroes of Might and Magic: Olden Era Official Wiki
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.
(()=>{var Mt=new Proxy(()=>{},{get:()=>Mt,apply:()=>Mt}),he=Mt;var ge=new Map;async function yr(t,n){let e=await br(t,n);return ge.set(e,n),e.on("message",wr.bind(null,e)),{run:async()=>await Dr(e,"run")}}async function br(t,n){let e=new he.Worker(t);return e.on("error",()=>n.log("!Worker error!")),new Promise(r=>{let i=o=>{o?.type==="ready"&&(e.off("message",i),r(e))};e.on("message",i)})}async function wr(t,n){let e=ge.get(t),{type:r,payload:i}=n;if(typeof e[r]!="function")return;let o=e[r](i);o!==void 0&&t.postMessage({type:r,payload:o})}async function Dr(t,n,e){return new Promise(r=>{let i=o=>{o.type===n&&(t.off("message",i),r(o.payload))};t.on("message",i),t.postMessage({type:n,payload:e})})}var ve=yr;var ye=new Map;async function kr(t,n){let e=await Sr(t,n);return ye.set(e,n),e.addEventListener("message",Ar.bind(null,e)),{run:async()=>await xr(e,"run")}}async function Sr(t,n){let e=new Worker(`data:application/javascript,importScripts('${t}?${Math.random()}');`);return e.addEventListener("error",()=>n.log("!Worker error!")),new Promise(r=>{let i=o=>{(o.data&&typeof o.data=="object"?o.data:{}).type==="ready"&&(e.removeEventListener("message",i),r(e))};e.addEventListener("message",i)})}async function Ar(t,n){let e=ye.get(t),{type:r,payload:i}=n.data;if(typeof e[r]!="function")return;let o=e[r](i);o!==void 0&&t.postMessage({type:r,payload:o})}async function xr(t,n,e){return new Promise(r=>{let i=o=>{let a=o.data&&typeof o.data=="object"?o.data:{};a.type===n&&(t.removeEventListener("message",i),r(a.payload))};t.addEventListener("message",i),t.postMessage({type:n,payload:e})})}var be=kr;async function Cr(t,n){if(typeof t=="string"){let e=t;return typeof process<"u"&&process.versions?.node!==null?await ve(e,n):await be(e,n)}else return await Tr(t,n)}async function Tr(t,n){return{run:()=>t(n)}}var we=Cr;var De=console.log,Lr=!1,Br=[];function zr(...t){if(Lr){let n=[];for(let e of t)n.push(typeof e=="object"?JSON.stringify(e,null,4):e);Br.push(n.join(`
`))}De(...t)}function ke(t){De=t}var E=zr;function Er(t,n){return n.global?[...t.matchAll(n)]:t.match(n)||[]}var D=Er;var Ir=/campaign|arena|tutorial/,Pr={TranslationDef:jr,BonusDef:Nr,SkillLevelDef:Fr,EntryDef:null,AttackPassiveDef:null,LawTreePositionDef:Hr,FactionLawTierDef:null,HeroStartSquadDef:Or,LawLevelDef:$r,SkillRollReplacementDef:null,SpellRankDef:Wr,SkillRollWeightDef:qr,StatBonusRollDef:Gr,UnitAbilityActiveDef:it,UnitAttackDef:Vr,UnitAbilityPassiveDef:it,UnitAbilityConditionalDef:it,UnitAbilityGlobalDef:it,UnitAbilityAuraDef:it};function Mr(t){let n=[];for(let r in t){let i=Rr(t[r]);n.push(...i)}let e={};for(let r of n){let{meta:i,id:o,...a}=r;if(!o){E("Definition lacks id!",i.raw);continue}if(o.match(Ir))continue;let c=e[o]||{};for(let l in a){if(l in c){E(`Field "${l}" already exists!`,i.raw,c);continue}c[l]=a[l]}e[o]=c}return e}function Rr(t){let n=[],e=D(t,/\{\{(.*?Def)([\s\S]*?)}}/g);for(let r of e){let i=r[0],o=r[1],a=r[2],c=D(a,/\|(.*?)=([^|]*)/g),l={name:o,raw:i},d={};for(let u of c){let[,_,b]=u;d[_.trim()]=b.trim()}let f=Ur(d,l);f&&n.push(f)}return n}function Ur(t,n){let e=Pr[n.name];if(e===null)return;let r=e?e(t):{...t};if(r)return r.meta=n,r}function jr(t){let{target_id:n,type:e,subtype:r,variant:i,language:o,...a}=t,c="$"+W(o,e,r,i),l={id:n.replace("_specialization","")};for(let d in a)l[c+"_"+d]=a[d];return l}function Nr(t){let{parent_id:n,parent_type:e,ordinal:r,type:i,...o}=t,a=W(e,r,i),c={id:n};for(let l in o)c[a+"_"+l]=o[l];return c}function Fr(t){let{skill_id:n,level:e,...r}=t,i=W("level",e),o={id:n};for(let a in r)o[i+"_"+a]=r[a];return o}function Hr(t){let{law_id:n,...e}=t,r="tree",i={id:n};for(let o in e)i[r+"_"+o]=e[o];return i}function Or(t){let{hero_id:n,variant:e,slot:r,...i}=t,o=W("squad",e,r),a={id:n};for(let c in i)a[o+"_"+c]=i[c];return a}function $r(t){let{law_id:n,level:e,...r}=t,i=W("level",e),o={id:n};for(let a in r)o[i+"_"+a]=r[a];return o}function Wr(t){let{spell_id:n,level:e,...r}=t,i=W("level",e),o={id:n};for(let a in r)o[i+"_"+a]=r[a];return o}function qr(t){let{skill_id:n,table_id:e,band_kind:r,...i}=t,o=W("roll",e,r),a={id:n};for(let c in i)a[o+"_"+c]=i[c];return a}function Gr(t){let{name_sid:n,desc_sid:e,...r}=t;return r}function it(t){let{unit_id:n,ordinal:e,ability_type:r,...i}=t;if(!n)return;let o=W("ability",r,e),a={id:n};for(let c in i)a[o+"_"+c]=i[c];return a}function Vr(t){let{unit_id:n,...e}=t;return{id:n,...e}}function W(...t){return t.filter(e=>!!e).join("_")}var Rt=Mr;function Zr(t,n,e,r){e!=null&&(Array.isArray(e)&&!e.length||r!==void 0&&String(e)===String(r)||(n.includes("_mult")&&typeof e=="number"&&!String(e).includes(".")&&(e+=".0"),t[n]=e))}var s=Zr;var Se="GENERAL",Jr=new Set([Se,"en","pt_br","cs","fr ","de","hu","it","ja","ko","pl","ru","es","tr","uk","zh-hans","zh-hant"]);function Kr(t,n,e){let r=[];r.push("{{PatchDef"),r.push(` | id = ${t}`),r.push(` | date = ${n}`),r.push("}}");let i=Yr(e);for(let o of Jr){let a=i[o];if(a?.length){r.push(`== ${o} ==<!-- ========================================================= -->`);for(let c of a){let l={};s(l,"patch",t),s(l,"id",c.id),s(l,"field",c.field),s(l,"summary",c.summary),s(l,"lang",c.lang),r.push("{{PatchNoteDef");for(let d in l)r.push(` | ${d} = ${l[d]}`);r.push("}}")}}}return r.join(`
`)}function Yr(t){let n={};for(let e of t){let{field:r}=e,i=Se;if(r.startsWith("$")){r=r.substring("$".length);let o=r.split("_");i=o.shift(),r=o.join("_"),e={...e,field:r,lang:i}}n[i]=n[i]||[],n[i].push(e)}return n}var Ae=Kr;var Xr=["zh","ja","ko","en"];function Qr(t,n){if(t===void 0&&n===void 0)return"";if(t===void 0)return Ut("",n);if(n===void 0)return Ut(t,"");let e=new Intl.Segmenter(Xr,{granularity:"word"}),r=Array.from(e.segment(t),y=>y.segment),i=Array.from(e.segment(n),y=>y.segment),o=r.length,a=i.length,c=new Int32Array((o+1)*(a+1)),l=(y,w)=>y*(a+1)+w;for(let y=1;y<=o;y++)for(let w=1;w<=a;w++)c[l(y,w)]=r[y-1]===i[w-1]?c[l(y-1,w-1)]+1:Math.max(c[l(y-1,w)],c[l(y,w-1)]);let d=o,f=a,u=[];for(;d>0||f>0;)d>0&&f>0&&r[d-1]===i[f-1]?(u.push({type:"eq",val:r[d-1]}),d--,f--):f>0&&(d===0||c[l(d,f-1)]>=c[l(d-1,f)])?(u.push({type:"add",val:i[f-1]}),f--):(u.push({type:"del",val:r[d-1]}),d--);u.reverse();let _="",b="",k="",B=()=>{(b||k)&&(_+=Ut(b,k),b="",k="")};for(let y of u)y.type==="eq"?(B(),_+=y.val):y.type==="del"?b+=y.val:y.type==="add"&&(k+=y.val);return B(),_}function Ut(t,n){return"\u276E"+t+"\u25B8"+n+"\u276F"}var xe=Qr;function ti(t={},n={}){let e=[],r=new Set([...Object.keys(t),...Object.keys(n)]);for(let i of r){let o=xe(t[i],n[i]);o!==String(t[i])&&e.push({field:i,summary:o})}return e}var Ce=ti;function ei(t={},n={}){let e=[],r=new Set([...Object.keys(t),...Object.keys(n)]);for(let i of r){let o=Ce(t[i],n[i]);for(let a of o)e.push({id:i,...a})}return e}var Te=ei;var jt,Nt;async function ni(t,n,e,r,i){Nt=e,ke(Nt.log);let o=Date.now();E("Beginning comparison...");let a=await we(r,ri);jt=t;let c=Date.now();E("Parsing the first archive...");let l=await a.run();E(`Finished parsing the first archive in ${Date.now()-c} ms.`),jt=n;let d=Date.now();E("Parsing the second archive...");let f=await a.run();E(`Finished parsing the second archive in ${Date.now()-d} ms.`),E("Starting comparison...");let u=Date.now(),_=Rt(l),b=Rt(f),k=Te(_,b),B=Ae(i.id,i.date,k);return E(`Finished comparison in ${Date.now()-u} ms.`),E(`Finished all processes in ${Date.now()-o} ms.`),B}var ri={find:()=>jt,log:(...t)=>{Nt.log(...t)}},Le=ni;function ii(t,...n){let e=[],{length:r}=t;for(let o=0;o<r;o++)e.push(t[o],n[o]);e.pop();let i=e.join("");return i=i.replaceAll(/\/\*[\s\S]*?\*\//g,""),i=i.replaceAll(/\s\/\/.*/g,""),i}var Be=ii;var K,ze,si={info:"\u2139\uFE0F",warning:"\u26A0\uFE0F",error:"\u26D4"},S="tool-log",oi=Be`
.${S} {
overflow-y: scroll;
height: 200px;
flex-shrink: 0;
}
.${S} table {
width: 100%;
border-collapse: collapse;
margin: 0;
}
.${S} th {
text-align: left;
}
.${S} th,
.${S} td {
border: solid 1px rgba(255, 255, 255, 0.1);
border-left: none;
border-right: none;
vertical-align: top;
padding: 4px;
}
.${S} th {
border-top: none;
}
.${S} table {
border: solid 1px rgba(255, 255, 255, 0.1);
}
.${S} th {
background: rgba(255, 255, 255, 0.1);
}
.${S} td:nth-child(1) {
width: 90px;
}
.${S} td:nth-child(2),
.${S} th:nth-child(2) {
width: 20px;
text-align: center;
}
.${S} td > div > div {
cursor: pointer;
color: yellow;
}
.${S} textarea {
width: calc(100% - 8px);
height: 200px;
}
`;function ai(t,...n){let e=t.endsWith("!")?t.startsWith("!")?"error":"warning":"info";ci(e,t,n)}function Ee(t){K=t,K.classList.add(S),K.innerHTML=`
<style>${oi}</style>
<table class='wikitable'>
<tr>
<th>Timestamp</th>
<th>\u{1F197}</th>
<th>Message</th>
</tr>
</table>`,ze=K.querySelector("table")}function ci(t,n,e){let i=new Date().toLocaleTimeString("en-GB",{hour12:!1,hour:"2-digit",minute:"2-digit",second:"2-digit",fractionalSecondDigits:3}),o=document.createElement("tr");Ft(o,i),Ft(o,si[t]),Ft(o,li(n,e)),ze.appendChild(o),K.scrollTo({top:K.scrollHeight,behavior:"smooth"})}function Ft(t,n){let e=document.createElement("td");n=n instanceof Node?n:document.createTextNode(n),e.appendChild(n),t.appendChild(e)}function li(t,n){if(t=t.replace(/^!/,""),console.log(t,...n),!n.length)return document.createTextNode(t);let e=document.createElement("div"),r=document.createElement("div");r.innerHTML=t,r.onclick=function(){let o=this.nextElementSibling.style.display!=="none";this.nextElementSibling.style.display=o?"none":"block"},e.appendChild(r);let i=document.createElement("textarea");return i.style.display="none",i.innerHTML=fi(n),e.appendChild(i),e}function fi(t){let n=[];for(let e of t)typeof e=="object"&&e?e instanceof Error?n.push(e.stack):n.push(JSON.stringify(e,null,4)):n.push(e);return n.join(`
`)}var st=ai;async function ui(){console.log("todo implement node find")}function di(...t){st(...t)}var pi={find:ui,log:di},Ie=pi;function _i(t,...n){if(typeof t=="function")try{let e=t(...n);return e&&typeof e.then=="function"?e.then(r=>[r,null]).catch(r=>[null,r]):[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 Y=_i;var Pe,dt,Ht,pt,ot;async function mi(t){await vi()&&(Pe=t,dt(yi),_t("ready"))}async function hi(...t){return ot?await ot.find(...t):await bi("find",t)}function Me(...t){if(ot)return ot.log(...t);_t("log",t)}function gi(t){ot=t}async function vi(){if(typeof process<"u"&&process.versions?.node!==null){let n="node:worker_threads",{parentPort:e}=await import(n);if(!e)return;dt=r=>e.on("message",r),Ht=r=>e.off("message",r),pt=r=>e.postMessage(r)}else dt=n=>self.addEventListener("message",n),Ht=n=>self.removeEventListener("message",n),pt=n=>self.postMessage(n);return!0}async function yi(t){let n=t?.data||t,{type:e}=n;switch(e){case"run":let[r,i]=await Y(Pe);if(i){let o=i.extra||[];Me("!Error encountered!",i.message,...o),_t("run",{})}else _t("run",r);break;default:}}function _t(t,n){pt({type:t,payload:n})}async function bi(t,n){return new Promise(e=>{let r=i=>{let o=i?.data||i;o.type===t&&(Ht(r),e(o.payload))};dt(r),pt({type:t,payload:n})})}var wi={initialize:mi,find:hi,log:Me,redirect:gi},I=wi;var T=Uint8Array,X=Uint16Array,Di=Int32Array,Re=new T([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]),Ue=new T([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]),ki=new T([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),je=function(t,n){for(var e=new X(31),r=0;r<31;++r)e[r]=n+=1<<t[r-1];for(var i=new Di(e[30]),r=1;r<30;++r)for(var o=e[r];o<e[r+1];++o)i[o]=o-e[r]<<5|r;return{b:e,r:i}},Ne=je(Re,2),Fe=Ne.b,Si=Ne.r;Fe[28]=258,Si[258]=28;var He=je(Ue,0),Ai=He.b,Uc=He.r,qt=new X(32768);for(g=0;g<32768;++g)H=(g&43690)>>1|(g&21845)<<1,H=(H&52428)>>2|(H&13107)<<2,H=(H&61680)>>4|(H&3855)<<4,qt[g]=((H&65280)>>8|(H&255)<<8)>>1;var H,g,at=(function(t,n,e){for(var r=t.length,i=0,o=new X(n);i<r;++i)t[i]&&++o[t[i]-1];var a=new X(n);for(i=1;i<n;++i)a[i]=a[i-1]+o[i-1]<<1;var c;if(e){c=new X(1<<n);var l=15-n;for(i=0;i<r;++i)if(t[i])for(var d=i<<4|t[i],f=n-t[i],u=a[t[i]-1]++<<f,_=u|(1<<f)-1;u<=_;++u)c[qt[u]>>l]=d}else for(c=new X(r),i=0;i<r;++i)t[i]&&(c[i]=qt[a[t[i]-1]++]>>15-t[i]);return c}),ct=new T(288);for(g=0;g<144;++g)ct[g]=8;var g;for(g=144;g<256;++g)ct[g]=9;var g;for(g=256;g<280;++g)ct[g]=7;var g;for(g=280;g<288;++g)ct[g]=8;var g,Oe=new T(32);for(g=0;g<32;++g)Oe[g]=5;var g;var xi=at(ct,9,1);var Ci=at(Oe,5,1),Ot=function(t){for(var n=t[0],e=1;e<t.length;++e)t[e]>n&&(n=t[e]);return n},M=function(t,n,e){var r=n/8|0;return(t[r]|t[r+1]<<8)>>(n&7)&e},$t=function(t,n){var e=n/8|0;return(t[e]|t[e+1]<<8|t[e+2]<<16)>>(n&7)},Ti=function(t){return(t+7)/8|0},Vt=function(t,n,e){return(n==null||n<0)&&(n=0),(e==null||e>t.length)&&(e=t.length),new T(t.subarray(n,e))};var Li=["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"],C=function(t,n,e){var r=new Error(n||Li[t]);if(r.code=t,Error.captureStackTrace&&Error.captureStackTrace(r,C),!e)throw r;return r},Bi=function(t,n,e,r){var i=t.length,o=r?r.length:0;if(!i||n.f&&!n.l)return e||new T(0);var a=!e,c=a||n.i!=2,l=n.i;a&&(e=new T(i*3));var d=function(pe){var _e=e.length;if(pe>_e){var me=new T(Math.max(_e*2,pe));me.set(e),e=me}},f=n.f||0,u=n.p||0,_=n.b||0,b=n.l,k=n.d,B=n.m,y=n.n,w=i*8;do{if(!b){f=M(t,u,1);var Ct=M(t,u+1,3);if(u+=3,Ct)if(Ct==1)b=xi,k=Ci,B=9,y=5;else if(Ct==2){var Bt=M(t,u,31)+257,se=M(t,u+10,15)+4,oe=Bt+M(t,u+5,31)+1;u+=14;for(var nt=new T(oe),zt=new T(19),z=0;z<se;++z)zt[ki[z]]=M(t,u+z*3,7);u+=se*3;for(var ae=Ot(zt),_r=(1<<ae)-1,mr=at(zt,ae,1),z=0;z<oe;){var ce=mr[M(t,u,_r)];u+=ce&15;var U=ce>>4;if(U<16)nt[z++]=U;else{var Z=0,ft=0;for(U==16?(ft=3+M(t,u,3),u+=2,Z=nt[z-1]):U==17?(ft=3+M(t,u,7),u+=3):U==18&&(ft=11+M(t,u,127),u+=7);ft--;)nt[z++]=Z}}var le=nt.subarray(0,Bt),$=nt.subarray(Bt);B=Ot(le),y=Ot($),b=at(le,B,1),k=at($,y,1)}else C(1);else{var U=Ti(u)+4,Tt=t[U-4]|t[U-3]<<8,Lt=U+Tt;if(Lt>i){l&&C(0);break}c&&d(_+Tt),e.set(t.subarray(U,Lt),_),n.b=_+=Tt,n.p=u=Lt*8,n.f=f;continue}if(u>w){l&&C(0);break}}c&&d(_+131072);for(var hr=(1<<B)-1,gr=(1<<y)-1,Et=u;;Et=u){var Z=b[$t(t,u)&hr],J=Z>>4;if(u+=Z&15,u>w){l&&C(0);break}if(Z||C(2),J<256)e[_++]=J;else if(J==256){Et=u,b=null;break}else{var fe=J-254;if(J>264){var z=J-257,rt=Re[z];fe=M(t,u,(1<<rt)-1)+Fe[z],u+=rt}var It=k[$t(t,u)&gr],Pt=It>>4;It||C(3),u+=It&15;var $=Ai[Pt];if(Pt>3){var rt=Ue[Pt];$+=$t(t,u)&(1<<rt)-1,u+=rt}if(u>w){l&&C(0);break}c&&d(_+131072);var ue=_+fe;if(_<$){var de=o-$,vr=Math.min($,ue);for(de+_<0&&C(3);_<vr;++_)e[_]=r[de+_]}for(;_<ue;++_)e[_]=e[_-$]}}n.l=b,n.p=Et,n.b=_,n.f=f,b&&(f=1,n.m=B,n.d=k,n.n=y)}while(!f);return _!=e.length&&a?Vt(e,0,_):e.subarray(0,_)};var zi=new T(0);var j=function(t,n){return t[n]|t[n+1]<<8},P=function(t,n){return(t[n]|t[n+1]<<8|t[n+2]<<16|t[n+3]<<24)>>>0},Wt=function(t,n){return P(t,n)+P(t,n+4)*4294967296};function Ei(t,n){return Bi(t,{i:2},n&&n.out,n&&n.dictionary)}var Gt=typeof TextDecoder<"u"&&new TextDecoder,Ii=0;try{Gt.decode(zi,{stream:!0}),Ii=1}catch{}var Pi=function(t){for(var n="",e=0;;){var r=t[e++],i=(r>127)+(r>223)+(r>239);if(e+i>t.length)return{s:n,r:Vt(t,e-1)};i?i==3?(r=((r&15)<<18|(t[e++]&63)<<12|(t[e++]&63)<<6|t[e++]&63)-65536,n+=String.fromCharCode(55296|r>>10,56320|r&1023)):i&1?n+=String.fromCharCode((r&31)<<6|t[e++]&63):n+=String.fromCharCode((r&15)<<12|(t[e++]&63)<<6|t[e++]&63):n+=String.fromCharCode(r)}};function Mi(t,n){if(n){for(var e="",r=0;r<t.length;r+=16384)e+=String.fromCharCode.apply(null,t.subarray(r,r+16384));return e}else{if(Gt)return Gt.decode(t);var i=Pi(t),o=i.s,e=i.r;return e.length&&C(8),o}}var Ri=function(t,n){return n+30+j(t,n+26)+j(t,n+28)},Ui=function(t,n,e){var r=j(t,n+28),i=j(t,n+30),o=Mi(t.subarray(n+46,n+46+r),!(j(t,n+8)&2048)),a=n+46+r,c=ji(t,a,i,e,P(t,n+20),P(t,n+24),P(t,n+42)),l=c[0],d=c[1],f=c[2];return[j(t,n+10),l,d,o,a+i+j(t,n+32),f]},ji=function(t,n,e,r,i,o,a){var c=i==4294967295,l=o==4294967295,d=a==4294967295,f=n+e,u=c+l+d;if(r&&u){for(;n+4<f;n+=4+j(t,n+2))if(j(t,n)==1)return[c?Wt(t,n+4+8*l):i,l?Wt(t,n+4):o,d?Wt(t,n+4+8*(l+c)):a,1];r<2&&C(13)}return[i,o,a,0]};function $e(t,n){for(var e={},r=t.length-22;P(t,r)!=101010256;--r)(!r||t.length-r>65558)&&C(13);var i=j(t,r+8);if(!i)return{};var o=P(t,r+16),a=P(t,r-20)==117853008;if(a){var c=P(t,r-12);a=P(t,c)==101075792,a&&(i=P(t,c+32),o=P(t,c+48))}for(var l=n&&n.filter,d=0;d<i;++d){var f=Ui(t,o,a),u=f[0],_=f[1],b=f[2],k=f[3],B=f[4],y=f[5],w=Ri(t,y);o=B,(!l||l({name:k,size:_,originalSize:b,compression:u}))&&(u?u==8?e[k]=Ei(t.subarray(w,w+_),{out:new T(b)}):C(14,"unknown compression type "+u):e[k]=Vt(t,w,w+_))}return e}async function Ni(){let t=await I.find("HeroesOldenEra_Data/StreamingAssets/Core.zip",null,!0);if(!t)return I.log("!Invalid zip!"),{};let n=await Fi(t);return $e(n)}async function Fi(t){if(typeof t.arrayBuffer=="function"){let n=await t.arrayBuffer();return new Uint8Array(n)}return new Uint8Array(t)}var We=Ni;var Hi=new TextDecoder;function Oi(t,n,e=null,r=!1){let i={};for(let o in t)if(o.match(n)){if(e&&o.match(e))continue;let a=t[o],c=Hi.decode(a);if(c.match(/^\s*[{[]/)){let l=JSON.parse(c),d=Object.keys(l);if(d.length===1){let f=l[d[0]];Array.isArray(f)?i[o]=f:I.log("Array required, skipping item!",o),i[o]=f}else i[o]=l}else i[o]=c}if(r){let o=Object.values(i)[0];return o===void 0&&I.log("Cannot offer a direct result for this pattern!",n),o}return i}var p=Oi;var $i=(t,n,...e)=>{if(!t){let r=new Error(n);throw r.extra=e,r}},h=$i;function Wi(...t){I.log(...t)}var v=Wi;function qi(t){t=t.replace(/\/\/.*/g,""),t=t.replace(/\/\*[\s\S]*?\*\//g,"");let n={},e=t.split("}");if(e.pop(),!e.length)return v("No function!"),{};for(let r of e){let[i,o]=Y(Gi,r);if(o){let a=o.extra||[];v("Failed to compile!",o.message,...a)}else Object.assign(n,i)}return n}function Gi(t){let n=t.split("{");h(n.length===2,"Function must have 2 parts!",t);let r=n[0].trim().split(" ");h(r.length===2,"Header must have 2 parts!",t);let i=r[1];return h(mt(i),"Invalid function name!",t),{[i]:{type:r[0],body:Vi(n[1],i)}}}function Vi(t,n){let e=[],r=t.split(")");r.pop(),h(r.length>0,"No lines!",n);for(let i of r)e.push(Zi(i,n));return e}function Zi(t,n){let e=t.split("(");h(e.length===2,"Invalid line!",n,t);let r=e[0].trim();h(mt(r),"Invalid action!",n,t);let i=e[1].split(","),o=i.shift().trim();return h(mt(o),"Invalid variable!",n,t),{variable:o,action:r,params:Ji(i,n,t)}}function Ji(t,n,e){let r=[];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(mt(o),"Invalid variable!",n,e),o="#"+o),r.push(o)}return r}function mt(t){return!!t.match(/^[A-Za-z][A-Za-z0-9_]*$/)}var qe=qi;function Ki(t,n){if(n=n.replaceAll("[",".").replaceAll("]",""),n=n.startsWith(".")?n.substring(1):n,!n)return t;let e=n.split(".");for(let r of e)if(t&&r in t)t=t[r];else return;return t}var R=Ki;var Yi=t=>typeof t=="number"&&t!==1/0&&t!==-1/0&&!isNaN(t),N=Yi;var Xi={CurrentUnitData:[A,1],CurrentUnitConfig:[A,1],CurrentUnitStats:[A,1],CurrentAbility:[A,1],CurrentHero:[A,1],CurrentMagicBattleRoot:[A,1],CurrentMagicBattle:[A,1],CurrentMagicWorld:[A,1],CurrentSkillParameter:[A,1],CurrentSubSkill:[A,1],CurrentItem:[A,1],CurrentHeroSpecializationConfig:[A,1],CurrentItemSet:[A,1],CurrentFractionLawConfig:[A,1],SpellpowerForCurrentMagic:[es,0],CurrentMagicLevel:[ns,0],CurrentSkillLevel:[rs,0],Add:[is,2],Sub:[ss,2],Mul:[os,2],Div:[as,2],Avg:[cs,2],Floor:[ls,1],Text:[fs,1],DbBuff:[us,2],DbSideBuff:[ds,2],DbObstacle:[ps,2],DbTrap:[_s,2],DbAbility:[ms,3],Invoke:[hs,1]};function Ge(t,n,e,r=!1){r&&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:r},[d,f]=Xi[c]||[];h(d,"Unknown action!",a,l.about),h(f===-1||a.params.length===f,"Mismatched param count!",l.about);let u=Qi(a.params,o,l.about);u.push(l),o[a.variable]=d.apply(null,u),r&&console.log(l.about,a.params,JSON.stringify(o,null,4))}return ts(o.return,i.type)}function Qi(t,n,e){let r=[];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),r.push(n[o])}else r.push(i);return r}function Q(t,n,e){let r=R(t,n);return h(r!==void 0,"Unresolved path!",t,e.about,n),r}function ts(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 r=Math.abs(t*100).toFixed(1);return r.includes(".")?r.replace(/\.0$/,""):r;case"string":return String(t);default:h(!1,"Unknown type!",n)}}function A(t,n){let{action:e}=n,r=n.data[e];return h(r,`Missing "${e}" from data!`,n.about),Q(r,t,n)}function es(){return 1}function ns(t){return t.data.CurrentMagicLevel}function rs(t){return t.data.CurrentSkillLevel}function is(t,n,e){return t=Number(t),n=Number(n),h(N(t),"Expecting number!",e.about,t),h(N(n),"Expecting number!",e.about,n),t+n}function ss(t,n,e){return t=Number(t),n=Number(n),h(N(t),"Expecting number!",e.about,t),h(N(n),"Expecting number!",e.about,n),t-n}function os(t,n,e){return t=Number(t),n=Number(n),h(N(t),"Expecting number!",e.about,t),h(N(n),"Expecting number!",e.about,n),t*n}function as(t,n,{about:e}){return t=Number(t),t===0?0:(n=Number(n),h(N(t),"Invalid numerator!",e,t),h(n&&N(n),"Invalid denominator!",e,n),t/n)}function cs(...t){let{about:n}=t.pop(),e=0;for(let r of t){let i=Number(r);h(N(i),"Expecting number!",n,r),e+=i}return e/t.length}function ls(t,{about:n}){return t=Number(t),h(typeof t=="number","Invalid target!",n,t),Math.floor(t)}function fs(t){return t.toString()}function us(t,n,e){let{buffs:r}=e.data,i=r[t];return h(i,"No such buff!",e.about,t),Q(i,n,e)}function ds(t,n,e){let{buffs:r,sideBuffs:i}=e.data,o=i[t];h(o,"No such sideBuff!",e.about,t);let a=r[o.sid];return h(a,"No such buff!",e.about,o.sid),Q(a,n,e)}function ps(t,n,e){let{obstacles:r}=e.data,i=r[t];return h(i,"No such obstacle!",e.about,t),Q(i,n,e)}function _s(t,n,e){let{traps:r}=e.data,i=r[t];return h(i,"No such trap!",e.about,t),Q(i,n,e)}function ms(t,n,e,r){let{abilities:i}=r.data,o=i[t];h(o,"No such ability!",r.about,t,n);let a=o.levels[n];return h(a,"No such level!",r.about,t,n),Q(a,e,r)}function hs(t,n){let{repository:e,data:r,isDebug:i}=n;return h(e[t],"No such function to invoke!",n.about,t),Ge(t,e,r,i)}var Ve=Ge;var gs=(t,n=null,e=!1)=>{let r={};if(n===null){let i=t.length;for(let o=0;o<i;o++)r[t[o]]=o}else{let i=t.length;for(let o=0;o<i;o++){let a=t[o];r[a[n]]=e?o:a}}return r},q=gs;function tt(t,n){if(O(t)||(t={}),!O(n))return{...t};let e={...t};for(let r of Object.keys(n)){let i=t[r],o=n[r];if(O(i)&&O(o))e[r]=tt(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],f=o[l];l in o?O(d)&&O(f)?c[l]=tt(d,f):c[l]=O(f)?tt({},f):f:c[l]=O(d)?tt({},d):d}e[r]=c}else O(o)?e[r]=tt({},o):e[r]=Array.isArray(o)?o.slice():o}return e}function O(t){return t!==null&&typeof t=="object"&&t.constructor===Object}var ht=tt;function vs(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 gt=vs;var vt=new Set([]),Zt={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"},ys={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}}},bs=100,Jt,lt,Kt,Ze,Je,Ke,Ye,Xe,Qe;function ws(t){h(lt,"Please first build the cache!"),Jt=0,Array.isArray(t)||(t=[t]);let n=[];for(let e of t){let r=Ls(e);for(let i in Zt){if(vt.size&&i!=="en")continue;let o=lt[i],a={_type:"TranslationDef"};if(s(a,"target_id",e.target_id),s(a,"type",e.type),s(a,"subtype",e.subtype),s(a,"variant",e.variant),s(a,"language",i),o.has(e.name)){let c=yt(e.name,e,o,r);s(a,"name",Es(c,i))}o.has(e.description)&&s(a,"description",yt(e.description,e,o,r)),o.has(e.bonus_description)&&s(a,"bonus_description",yt(e.bonus_description,e,o,r)),(a.name||a.description||a.bonus_description)&&n.push(a)}}return n}function tn(t){lt={};for(let n in Zt){let e=p(t,new RegExp("Lang/"+Zt[n]+"/")),r=new Map;r._lang=n;for(let i in e){let o=e[i];for(let a of o){if(Object.keys(a).toString()!=="sid,text"){v("Unexpected token structure!",a);continue}let c=zs(a.text,a.sid);r.set(a.sid,c)}}lt[n]=r}Ds(t),ks(t),Ss(t),As(t),xs(t),Cs(t),Ts(t)}function bt(t){return lt.en.has(t)}function Ds(t){let n=p(t,new RegExp("Lang/args/"));Kt=new Map;for(let e in n){let r=n[e];for(let i of r){if(Object.keys(i).toString()!=="sid,args"){v("Unexpected args item structure!",i);continue}Kt.set(i.sid,i.args)}}}function ks(t){let n=p(t,new RegExp("DB/info/.*script$")),e=Object.values(n).join(`
/**/
`);Ze=qe(e)}function Ss(t){let n=p(t,"DB/buffs"),e=Object.values(n).flat();e.map(r=>gt(r)),Je=q(e,"id")}function As(t){let n=p(t,"DB/side_buffs"),e=Object.values(n).flat();Ke=q(e,"id")}function xs(t){let n=p(t,"DB/field_objects/obstacles"),e=Object.values(n).flat();Ye=q(e,"id")}function Cs(t){let n=p(t,"DB/field_objects/traps"),e=Object.values(n).flat();Xe=q(e,"id")}function Ts(t){let n=p(t,"DB/heroes_abilities/heroes_abilities_base"),e=Object.values(n).flat();Qe=q(e,"id")}function Ls(t){let n={};return n=ht(n,ys),n=ht(n,{buffs:Je,sideBuffs:Ke,obstacles:Ye,traps:Xe,abilities:Qe}),n=ht(n,t._data),n}function yt(t,n,e,r,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||vt.size&&(vt.has(o)||vt.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 f=Bs(t,d,e,n,r,i);return f===void 0?l:f}),c.includes("{")&&v("Still has braces!",a,c)),i&&console.log("After:",c),(c.includes("NaN")||c.includes("undefined"))&&v("Something went wrong!",o,t),c}function Bs(t,n,e,r,i,o){let a=Kt.get(t);if(!a)return v("No args found!",r,t);let c=a[n],[l,d]=c.split("|");if(d)return e.get(d)?yt(d,r,e,i,o):v("Redirect not found!",t,d);let[f,u]=Y(Ve,l,Ze,i,o);if(u){Jt++;let _=u.extra||[];v("Failed to evaluate!"),v(`${t}: ${e.get(t)}`),v(u.message,..._),Jt>=bs&&h(!1);return}return o&&console.log("evaluated:",f),f}function zs(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 Es(t,n){return n==="en"?t.replaceAll("\u2019","'"):t}var m=ws;function Is(t,n){let e=[];for(let r=0;r<t.bonuses?.length;r++){let i=t.bonuses[r],o={_type:"BonusDef"};s(o,"parent_type",n),s(o,"parent_id",t.id),s(o,"ordinal",r),s(o,"type",i.type),s(o,"parameters",i.parameters),s(o,"battle_type",i.battleType),s(o,"activation_level",i.activationLevel),s(o,"receiver_role",i.receiverRole),s(o,"upgrade_increment",i.upgrade?.increment),s(o,"upgrade_level_step",i.upgrade?.levelStep),s(o,"receivers",i.receivers),s(o,"receiver_allegiance",i.receiverAllegiance),s(o,"action_area",i.actionArea),s(o,"fraction",i.fraction),"upgrade_increment"in o&&(String(o.upgrade_increment).includes(".")||(o.upgrade_increment+=".0")),e.push(o)}return e}var L=Is;var Ps=t=>typeof t!="object"||t===null?t:Yt(t),Yt=t=>{if(Array.isArray(t)){let n=t.slice(),e=n.length;for(let r=0;r<e;r++){let i=t[r];typeof i=="object"&&i!==null&&(n[r]=Yt(i))}return n}else{let n=Object.assign({},t);for(let e in t){let r=t[e];typeof r=="object"&&r!==null&&(n[e]=Yt(r))}return n}},wt=Ps;var en=new Set([]);function Ms(t){let n={},e=p(t,"DB/items/items/.*?json");for(let r in e){let i=e[r];for(let o of i){let{id:a}=o;en.size&&!en.has(a)||(n["Artifact~"+a]=Rs(o,r))}}return n}function Rs(t,n){let e={_type:"ArtifactDef"};s(e,"id",t.id),s(e,"name_sid",t.name),s(e,"description_sid",t.description),s(e,"upgrade_description_sid",t.upgradeDescription),s(e,"narrative_description_sid",t.narrativeDescription),s(e,"icon",t.icon),s(e,"slot",t.slot_),s(e,"rarity",t.rarity),s(e,"artifact_set_id",t.itemSet),s(e,"goods_value",t.goodsValue),s(e,"max_level",t.maxLevel),s(e,"cost_base",t.costBase),s(e,"cost_per_level",t.costPerLevel),s(e,"reward_for_destroy",t.rewardForDestroy),s(e,"is_special_item",!!t.isSpecialItem),s(e,"use_expand_tooltip",js(t)),s(e,"can_destroy",t.canDestroy),s(e,"can_apply_bonus_always",t.canApplyBonusAlways),s(e,"source_path",n);let r={level:1,config:Us(t)},i=m([{target_id:e.id,type:"artifact",name:e.name_sid,description:e.description_sid,_data:{CurrentItem:r}},{target_id:e.id,type:"artifact_upgrade",description:e.upgrade_description_sid,_data:{CurrentItem:r}},{target_id:e.id,type:"artifact_narrative",description:e.narrative_description_sid,_data:{CurrentItem:r}}]),o=L(t,"artifact");return[e,...i,...o]}function Us(t){let n=wt(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 js(t){let{useExpandTooltip:n}=t;if(n)return n==="true"}var nn=Ms;var rn=new Set([]);function Ns(t){let n={},e=p(t,"DB/weeks_info.json",null,!0),r=p(t,"DB/weeks/");for(let i in r){let o=r[i];for(let a of o){let{id:c}=a;rn.size&&!rn.has(c)||(n["AstrologistEvent~"+c]=Fs(a,i,e))}}return n}function Fs(t,n,e){let r={_type:"AstrologistEventDef"},i=D(t.id,/([a-z]+)_\d+$/)[1];s(r,"id",t.id),s(r,"category",i),s(r,"name_sid",t.name),s(r,"desc_sid",t.desc),s(r,"icon",t.icon),s(r,"buff_sid",t.buffSid),s(r,"roll_chance",e[i+"s"].find(a=>a.sid===t.id).rollChance),s(r,"count_to_return",i==="week"?e.countToReturnWeek:e.countToReturnMonth),s(r,"source_path",n);let o=m({target_id:r.id,type:"astrologist_event",name:r.name_sid,description:r.desc_sid,_data:{}});return[r,...o]}var sn=Ns;var on={melee:"melee",remote:"reach",ranged:"ranged"};function Hs(t){let n={},e=p(t,"Lang/english/texts/unitsAbility.json",null,!0);for(let r in on){let i=on[r];n["AttackArchetype~"+i]=an(i,`base_passive_${r}_attack`);for(let{sid:o}of e){let a=new RegExp(`^base_passive_${r}_attack(.*?)_name$`),[,c]=D(o,a);if(c!==void 0){let l=r+"_attack"+c;n["AttackArchetype~"+l]=an(l,`base_passive_${l}`)}}}return n}function an(t,n){let e={_type:"EntryDef"};s(e,"type","attack_archetype"),s(e,"subtype",t),s(e,"name_sid",n+"_name"),s(e,"desc_sid",n+"_description");let r=m({target_id:t,type:"attack_archetype",subtype:t,name:e.name_sid,description:e.desc_sid});return[e,...r]}var cn=Hs;var ln={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 Os(){let t={};for(let n in ln){let e=ln[n];t["AttackPassive~"+n]=$s(n,e)}return t}function $s(t,n){let e={_type:"AttackPassiveDef"};s(e,"attack_passive_id",t),s(e,"pattern_token",D(n,/strike_(.*?)_\d$/)[1]),s(e,"rank",D(n,/\d$/)[0]),s(e,"name_sid",n+"_name"),s(e,"desc_sid",n+"_description");let r=m({target_id:t,type:"attack_passive",name:e.name_sid,description:e.desc_sid});return[e,...r]}var fn=Os;var un=new Set([]);function Ws(t){let n={},e=p(t,"DB/objects_logic/cities/");for(let r in e){let i=e[r];if(i.length!==1){v("Unexpected cities count!",r);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,f=o.fraction+"_"+d;if(!(!d||un.size&&!un.has(f)))if(a==="hires"){let u=o.fraction+"_Build_creature_dwellings";n["Building~"+u]=n["Building~"+u]||[],n["Building~"+u].push(...dn(l,r,o,a))}else n["Building~"+f]=dn(l,r,o,a)}}}return n}function dn(t,n,e,r){let i=[];for(let o=0;o<t.icons.length;o++)i.push(...qs(t,n,e,r,o));return i}function qs(t,n,e,r,i){let o=i+1,a=t.parametersPerLevel[i];if(!a)return[];let c={_type:"BuildingDef"};s(c,"id",e.fraction+"_"+t.sid+"_L"+o),s(c,"faction",e.fraction),s(c,"category",r),s(c,"sid",t.sid),s(c,"level",o),s(c,"name_sid",t.names[i]),s(c,"desc_sid",t.descriptions[i]),s(c,"narrative_desc_sid",t.narrativeDescriptions[i]),s(c,"icon",t.icons[i]),s(c,"background_image",t.backgroundImages[i]),s(c,"is_constructed_on_start",o===1?t.isConstructedOnStart:void 0),s(c,"level_on_start",o===1?t.levelOnStart:void 0),s(c,"scene_slot",o===1?t.sceneSlot:void 0),s(c,"node_pos_x",a?.nodePos?.xPos),s(c,"node_pos_y",a?.nodePos?.yPos),s(c,"prereqs",Gs(a.prevBuildings)),s(c,"gold_cost",a.costs.find(d=>d.name==="gold")?.cost),s(c,"wood_cost",a.costs.find(d=>d.name==="wood")?.cost),s(c,"ore_cost",a.costs.find(d=>d.name==="ore")?.cost),s(c,"crystals_cost",a.costs.find(d=>d.name==="crystals")?.cost),s(c,"gemstones_cost",a.costs.find(d=>d.name==="gemstones")?.cost),s(c,"mercury_cost",a.costs.find(d=>d.name==="mercury")?.cost),s(c,"graal_cost",a.costs.find(d=>d.name==="graal")?.cost),s(c,"dust_cost",a.costs.find(d=>d.name==="dust")?.cost),s(c,"units_hire_sid",t.unitsHire?.units[0].sids[0]),s(c,"units_weekly",t.unitsHire?.units[0].weeklyIncrement),s(c,"source_path",n);let l=m({target_id:c.id,type:"building",name:c.name_sid,description:c.desc_sid,_data:{}});return[c,...l]}function Gs(t){let n=[];for(let{sid:e,level:r}of t)n.push(e+"_L"+r);return n.length?n:void 0}var pn=Ws;function Vs(t,n){let{domain:e}=n,r={};for(let i in t){let o=Zs(n,i,t[i]);r[e+"~"+i]=Js(i,o)}return r}function Zs(t,n,e){let r={prefix:"",name_suffix:"_name",desc_suffix:"_description"};return Object.assign(r,t),e===!0?e={id:n}:typeof e=="string"&&(e={id:e}),Object.assign(r,e),r}function Js(t,n){let{type:e,id:r,prefix:i,name_suffix:o,desc_suffix:a,suppressDescription:c,path:l,trimColon:d}=n,f={_type:"EntryDef"};s(f,"type",e),s(f,"subtype",t),s(f,"name_sid",i+r+o),s(f,"desc_sid",c?void 0:i+r+a),s(f,"source_path",l);let u=m({target_id:f.subtype,type:f.type,subtype:f.subtype,name:f.name_sid,description:f.desc_sid});if(d)for(let _ of u)_.name&&(_.name=_.name.replace(/[::\s]*$/,"")),_.description&&(_.description=_.description.replace(/[::\s]*$/,""));return[f,...u]}var F=Vs;var Ks={construct:!0,demon:!0,dragon:!0,embodiment:!0,living:!0,magic_creature:!0,undead:!0};function Ys(){return F(Ks,{domain:"CreatureType",type:"creature_type",prefix:"base_class_",name_suffix:""})}var _n=Ys;function Xs(t){let n={},e=p(t,"DB/difficulties.json",null,!0)||[];for(let r of e)n["Difficulty~"+r.sid]=Qs(r,"DB/difficulties.json");return n}function Qs(t,n){let e={_type:"DifficultyDef"};s(e,"id",t.sid),s(e,"name_sid",t.nameSid),s(e,"neutral_power_multiplier",t.neutralPowerMultiplier),s(e,"player_gold",t.playerStartResources.gold),s(e,"player_wood",t.playerStartResources.wood),s(e,"player_ore",t.playerStartResources.ore),s(e,"player_gemstones",t.playerStartResources.gemstones),s(e,"player_crystals",t.playerStartResources.crystals),s(e,"player_mercury",t.playerStartResources.mercury),s(e,"player_dust",t.playerStartResources.alchemicalDust),s(e,"ai_gold",t.aiStartResources.gold),s(e,"ai_wood",t.aiStartResources.wood),s(e,"ai_ore",t.aiStartResources.ore),s(e,"ai_gemstones",t.aiStartResources.gemstones),s(e,"ai_crystals",t.aiStartResources.crystals),s(e,"ai_mercury",t.aiStartResources.mercury),s(e,"ai_dust",t.aiStartResources.alchemicalDust),s(e,"source_path",n);let r={_type:"TranslationDef"};return s(r,"target_id",t.sid),s(r,"type","difficulty"),s(r,"language","en"),s(r,"description",t.descriptionSid),[e,r]}var mn=Xs;var hn=new Set([]),gn={army:1,faction:0};function to(t){let n={},e=p(t,"DB/fractions/");for(let r in e){let i=e[r];for(let o of i){let{id:a}=o;hn.size&&!hn.has(a)||(n["Faction~"+a]=eo(o,r))}}return n}function eo(t,n){let e={_type:"FactionDef"};s(e,"id",t.id),s(e,"icon",t.icon),s(e,"icon_faction_laws",t.iconFractionLaws),s(e,"biome",t.biome),s(e,"resource",t.resourceName),s(e,"name_sid",t.name),s(e,"desc_sid",t.desc),s(e,"source_path",n);let r=m({target_id:e.id,type:"faction",name:e.name_sid,description:e.desc_sid,_data:{}}),i=[];for(let c of t.cityNames)i.push(...no(c));let o=[],a=[];for(let[c,l]of t.fractionLawsLines.entries())o.push(...ro(l,c+1,t.id)),a.push(...io(l.groups,c+1,t.id));return[e,...r,...i,...o,...a]}function no(t){let[,n,e]=D(t,/^([a-z]+)_.*?_(\d+)$/),r=n+"_"+e,i={_type:"EntryDef"};s(i,"type","FactionCityName"),s(i,"subtype",r),s(i,"name_sid",t);let o=m({target_id:r,type:"FactionCityName",subtype:r,name:i.name_sid});return[i,...o]}function ro(t,n,e){let r={_type:"FactionLawTierDef"};return s(r,"faction",e),s(r,"tier",n),s(r,"count_to_unlock",t.countToUnlock),[r]}function io(t,n,e){let r=[];for(let i in gn){let o=gn[i];for(let[a,c]of t[o].laws.entries()){let l={_type:"LawTreePositionDef"};s(l,"faction",e),s(l,"tier",n),s(l,"side",i),s(l,"slot",a),s(l,"law_id",c),r.push(l)}}return r}var Dt=to;var vn=new Set([]);function so(t){let n={},e=oo(t),r=ao(t),i={addedSpells:e,replacedSpells:r},o=p(t,"DB/heroes/"),a=co(o),c=lo(a);for(let l in o){let d=o[l];for(let f of d){let{id:u}=f;if(vn.size&&!vn.has(u))continue;let _=f.classType+"_"+f.fraction,b=wn(l)?c[_]:a[_];n["Hero~"+u]=bn(f,_,l,b,i)}}return n}function oo(t){let n={},e=p(t,"DB/heroes_skills/skills/");for(let r in e){let i=e[r];for(let o of i){let a=o.parametersPerLevel||[];for(let[c,l]of a.entries()){let d=l.bonuses||[];for(let f of d)if(f.type==="heroMagicAddition"){let u=o.id+"_L"+(c+1);n[u]=n[u]||[],n[u].push(f.parameters[0])}}}}return n}function ao(t){let n={},e=p(t,"DB/heroes_specializations/");for(let r in e){let i=e[r];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 co(t){let n={};for(let e in t){if(wn(e))continue;let r=t[e];for(let i of r){let o=i.classType+"_"+i.fraction;n[o]||(n[o]=bn(i,o,e)[0])}}return n}function lo(t){let n=wt(t);for(let e in n){let r=n[e];delete r.view_radius,delete r.stats_num,delete r.magic_casts_per_round,delete r.enable_tactics,delete r.tactics_placement_size,delete r.enable_hero_native_biome,delete r.offence,delete r.defence,delete r.spell_power,delete r.intelligence,delete r.luck,delete r.morale}return n}function bn(t,n,e,r={},i=null){let o={_type:"HeroDef"};s(o,"id",t.id),s(o,"name_sid",t.name||t.id),s(o,"motto_sid",t.motto||t.id+"_motto"),s(o,"desc_sid",t.description||t.id+"_description"),s(o,"class_id",n),s(o,"faction",t.fraction),s(o,"class_type",t.classType),s(o,"icon",t.icon),s(o,"specialization_id",t.specialization),s(o,"source_path",e),s(o,"start_skills",Xt(t.startSkills,"sid")),s(o,"start_skill_levels",Xt(t.startSkills,"skillLevel")),s(o,"start_magics",Xt(t.startMagics,"sidConfig")||"temp"),s(o,"start_level",t.startLevel,1),s(o,"attacks_times_before",t.attacksTimesBefore,r.attacks_times_before),s(o,"mesh",t.mesh,r.mesh),s(o,"mount",t.mounts,r.mount),s(o,"skills_roll_variant",t.skillsRollVariant,r.skills_roll_variant),s(o,"view_radius",t.stats?.viewRadius,r.view_radius),s(o,"stats_num",t.stats?.statsNum,r.stats_num),s(o,"magic_casts_per_round",t.stats?.magicCastsPerRound,r.magic_casts_per_round),s(o,"enable_tactics",t.stats?.enableTactics,r.enable_tactics),s(o,"tactics_placement_size",t.stats?.tacticsPlacementSize,r.tactics_placement_size),s(o,"enable_hero_native_biome",t.stats?.enableHeroNativeBiome,r.enable_hero_native_biome),s(o,"offence",t.stats?.offence,r.offence),s(o,"defence",t.stats?.defence,r.defence),s(o,"spell_power",t.stats?.spellPower,r.spell_power),s(o,"intelligence",t.stats?.intelligence,r.intelligence),s(o,"luck",t.stats?.luck,r.luck),s(o,"morale",t.stats?.moral,r.morale),s(o,"roll_lvl1_attack",G(t,1,0)||0),s(o,"roll_lvl1_defense",G(t,1,1)||0),s(o,"roll_lvl1_power",G(t,1,2)||0),s(o,"roll_lvl1_knowledge",G(t,1,3)||0),s(o,"roll_lvl24_attack",G(t,24,0)||0),s(o,"roll_lvl24_defense",G(t,24,1)||0),s(o,"roll_lvl24_power",G(t,24,2)||0),s(o,"roll_lvl24_knowledge",G(t,24,3)||0),fo(o,r),uo(o,i);let a=m([{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(yn(d,l+1,t.id,"primary"));for(let[l,d]of t.startSquadAlt.entries())c.push(yn(d,l+1,t.id,"alt"));return[o,...a,...c]}function fo(t,n){let e=Object.keys(t).filter(i=>i.startsWith("roll")),r=0;for(let i of e)r+=t[i]===n[i]?1:0;if(r===e.length)for(let i of e)delete t[i]}function uo(t,n){let{specialization_id:e,start_skills:r=[],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,f]of r.entries()){let u=f+"_L"+i[d],_=a[u];_&&o.unshift(..._)}for(let[d,f]of o.entries())for(let u of l)if(u[0]===f){o[d]=u[1];break}}o.length||delete t.start_magics}function wn(t){return t.includes("campaign")||t.includes("custom")}function Xt(t,n){let e=t.map(r=>r[n]);return e.length?e:void 0}function G(t,n,e){if(!t.statsRolls)return;let r=t.statsRolls.find(i=>i.levelFrom===n)?.rollChances[e].c;return r===void 0&&(r=0),r}function yn(t,n,e,r){let i={_type:"HeroStartSquadDef"};return s(i,"hero_id",e),s(i,"variant",r),s(i,"slot",n),s(i,"unit_id",t.sid),s(i,"min",t.min),s(i,"max",t.max),i}var kt=so;var po=t=>typeof t=="object"&&t!==null,Dn=po;var _o=t=>Object.values(t).length,kn=_o;function mo(t){let n={},e=p(t,"DB/heroes/.*?json","campaign|custom"),r=ho(e);kn(r)!==12&&v("Unexpected hero classes count!");for(let i in r){let o=r[i],a=[{target_id:i,type:"hero_class",name:i+"_name",description:o.class_type+"_desc"}];n["HeroClass~"+i]=[o,...m(a)]}return n}function ho(t){let n={};for(let e in t){let r=t[e];r.length!==1&&v("Unexpected hero list count!",e);let i=r[0];if(!Dn(i)){v("Hero must be pojo!",i);continue}let o=go(i),{id:a}=o;if(a in n){let c=JSON.stringify(n[a]),l=JSON.stringify(o);c!==l&&v("Fresh class is not identical to old class!",c,e,l)}else n[a]=o}return n}function go(t){let{fraction:n,classType:e}=t,r=e+"_"+n,i={_type:"HeroClassDef"};return s(i,"id",r),s(i,"name_sid",r+"_name"),s(i,"desc_sid",e+"_desc"),s(i,"faction",n),s(i,"class_type",e),s(i,"mesh",t.mesh),s(i,"mount",t.mounts),s(i,"native_biome",t.nativeBiome),s(i,"skills_roll_variant",t.skillsRollVariant),s(i,"cost_gold",t.costGold),s(i,"start_level",t.startLevel),s(i,"attacks_times_before",t.attacksTimesBefore),s(i,"view_radius",t.stats?.viewRadius),s(i,"stats_num",t.stats?.statsNum),s(i,"magic_casts_per_round",t.stats?.magicCastsPerRound),s(i,"enable_tactics",t.stats?.enableTactics),s(i,"tactics_placement_size",t.stats?.tacticsPlacementSize),s(i,"enable_hero_native_biome",t.stats?.enableHeroNativeBiome),s(i,"offence",t.stats?.offence),s(i,"defence",t.stats?.defence),s(i,"spell_power",t.stats?.spellPower),s(i,"intelligence",t.stats?.intelligence),s(i,"luck",t.stats?.luck),s(i,"morale",t.stats?.moral),s(i,"roll_lvl1_attack",R(t,"statsRolls[0].rollChances[0].c")),s(i,"roll_lvl1_defense",R(t,"statsRolls[0].rollChances[1].c")),s(i,"roll_lvl1_power",R(t,"statsRolls[0].rollChances[2].c")),s(i,"roll_lvl1_knowledge",R(t,"statsRolls[0].rollChances[3].c")),s(i,"roll_lvl24_attack",R(t,"statsRolls[1].rollChances[0].c")),s(i,"roll_lvl24_defense",R(t,"statsRolls[1].rollChances[1].c")),s(i,"roll_lvl24_power",R(t,"statsRolls[1].rollChances[2].c")),s(i,"roll_lvl24_knowledge",R(t,"statsRolls[1].rollChances[3].c")),i}var Sn=mo;var An=new Set([]);function vo(t){let n={},e=p(t,"DB/heroes_specializations/");for(let r in e){let i=e[r];for(let o of i){let{id:a}=o;An.size&&!An.has(a)||(n["HeroSpecialization~"+a]=yo(o,r))}}return n}function yo(t,n){let e={_type:"HeroSpecializationDef"};s(e,"id",t.id),s(e,"name_sid",t.name),s(e,"desc_sid",t.desc),s(e,"icon",t.icon),s(e,"source_path",n);let r=m({target_id:e.id,type:"hero_specialization",name:e.name_sid,description:e.desc_sid,_data:{CurrentHeroSpecializationConfig:t}}),i=L(t,"hero_specialization");return[e,...r,...i]}var xn=vo;var bo={defence:!0,intelligence:!0,luck:!0,morale:!0,offence:!0,spellPower:!0};function wo(){return F(bo,{domain:"HeroStat",type:"hero_stat",path:"Lang/english/texts/ui.json"})}var Cn=wo;var Tn=new Set([]);function Do(t){let n={},e=p(t,"DB/heroes_sub_classes/.*?json");for(let r in e){let i=e[r];for(let o of i){let{id:a}=o;Tn.size&&!Tn.has(a)||(n["HeroSubClass~"+a]=ko(o,r))}}return n}function ko(t,n){let e={_type:"HeroSubClassDef"};s(e,"id",t.id),s(e,"name_sid",t.name),s(e,"desc_sid",t.desc),s(e,"icon",t.icon),s(e,"faction",t.faction),s(e,"class_type",t.classType),s(e,"activation_skill_1_sid",t.activationConditions[0].skillSid),s(e,"activation_skill_1_level",t.activationConditions[0].skillLevel),s(e,"activation_skill_2_sid",t.activationConditions[1].skillSid),s(e,"activation_skill_2_level",t.activationConditions[1].skillLevel),s(e,"activation_skill_3_sid",t.activationConditions[2].skillSid),s(e,"activation_skill_3_level",t.activationConditions[2].skillLevel),s(e,"activation_skill_4_sid",t.activationConditions[3].skillSid),s(e,"activation_skill_4_level",t.activationConditions[3].skillLevel),s(e,"activation_skill_5_sid",t.activationConditions[4].skillSid),s(e,"activation_skill_5_level",t.activationConditions[4].skillLevel),s(e,"source_path",n);let r=m({target_id:e.id,type:"hero_sub_class",name:e.name_sid,description:e.desc_sid,_data:{}}),i=L(t,"hero_sub_class");return[e,...r,...i]}var Ln=Do;var Bn=new Set([]);function So(t){let n={},e=p(t,"DB/items/item_sets/");for(let r in e){let i=e[r];for(let o of i){let{id:a}=o;Bn.size&&!Bn.has(a)||(n["ItemSet~"+a]=Ao(o,r))}}return n}function Ao(t,n){let e={_type:"ItemSetDef"};s(e,"id",t.id),s(e,"name_sid",t.name),s(e,"items_in_set",t.itemsInSet),s(e,"source_path",n);let r=m({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(...xo(c,a,t));return[e,...r,...i]}function xo(t,n,e){let r={_type:"ItemSetTierDef"};s(r,"id",e.id+"_tier_"+n),s(r,"set_id",e.id),s(r,"ordinal",n),s(r,"required_amount",t.requiredItemsAmount),s(r,"description_sid",t.desc);let i=m({target_id:r.id,type:"item_set_tier",description:r.description_sid,_data:{CurrentItemSet:{config:e}}}),o={id:r.id,bonuses:t.heroBonuses},a=L(o,"item_set_tier");return[r,...i,...a]}var zn=So;var En=new Set([]);function Co(t){let n={},e=To(t),r=p(t,"DB/fractions_laws/");for(let i in r){let o=r[i];for(let a of o){let{id:c}=a;En.size&&!En.has(c)||(n["Law~"+c]=Lo(a,i,e))}}return n}function To(t){let n={},e=Dt(t);for(let r in e){let i=e[r];for(let o of i)o.law_id&&(n[o.law_id]=o)}return n}function Lo(t,n,e){let[,r]=D(t.id,/_(\d+)$/),{parametersPerLevel:i=[]}=t,o={_type:"LawDef"};s(o,"id",t.id),s(o,"faction",e[t.id]?.faction),s(o,"ordinal",r),s(o,"tier",e[t.id]?.tier),s(o,"name_sid",t.name),s(o,"desc_sid",t.desc),s(o,"icon",t.icon),s(o,"max_level",i.length),s(o,"test",n.includes("test")),s(o,"source_path",n);let a=m({target_id:o.id,type:"law",name:o.name_sid}),c=[];for(let[l,d]of i.entries())c.push(...Bo(d,l+1,t));return[o,...a,...c]}function Bo(t,n,e){let r={_type:"LawLevelDef"};s(r,"law_id",e.id),s(r,"level",n),s(r,"cost",t.cost);let i=m({target_id:e.id,type:"law_level",variant:n,description:e.desc,_data:{CurrentFractionLawConfig:t}}),o={...t,id:e.id+"_L"+n},a=L(o,"law_level");return[r,...i,...a]}var In=Co;var Pn=new Set([]);function zo(t){let n={},e=p(t,"DB/objects_logic/",/artifacts|campaign|cities|blocks/);for(let r in e){let i=e[r];for(let o of i){let{id:a}=o;if(Pn.size&&!Pn.has(a))continue;let c=Eo(o,r);c&&(n["MapObject~"+a]=c)}}return n}function Eo(t,n){let e=D(n,/(\w+)\/[^\/]+$/)[1],r=t.guardUnits?.map(c=>`${c.sid}:${c.amount}`),i=Io(t.id+"_name");if(e==="todo"||n.includes("event_banks")&&!i)return;let o={_type:"MapObjectDef"};s(o,"id",t.id),s(o,"category",e),s(o,"name_sid",i&&t.id+"_name"),s(o,"desc_sid",i&&t.id+"_description"),s(o,"narrative_desc_sid",i&&t.id+"_narrativeDescription"),s(o,"goods_value",t.goodsValue),s(o,"ai_value",t.aiValue),s(o,"custom_guard_value",t.customGuardValue),s(o,"view_radius",t.viewRadius),s(o,"ai_ignore",t.aiIgnore),s(o,"resource_name",t.resName),s(o,"resource_value",t.resValue),s(o,"guard_units",r),s(o,"fraction",t.fraction),s(o,"tier",t.tier),s(o,"units_hire_sid",t.unitsData?.units[0].sids[0]),s(o,"units_weekly",t.unitsData?.units[0].weeklyIncrement),s(o,"bonus_growth",t.bonuses?.find(c=>c.type==="cityUnitsIncrementFromBarrack")?.parameters[1]),s(o,"source_path",n);let a=m([{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 Io(t){if(!t.includes("scroll_box")&&bt(t))return!0}var Mn=zo;var Po={fly:"flyer",teleport:"blink"};function Mo(){return F(Po,{domain:"Movement",type:"movement",prefix:"base_passive_"})}var Rn=Mo;var Un=new Set([]);function Ro(t){let n={},e=p(t,"DB/res/");for(let r in e){let i=e[r];for(let o of i){let{id:a}=o;Un.size&&!Un.has(a)||(n["Resource~"+a]=Uo(o,r))}}return n}function Uo(t,n){let e={_type:"EntryDef"};s(e,"type","resource"),s(e,"subtype",t.id),s(e,"icon",t.icon),s(e,"name_sid",t.name),s(e,"desc_sid",t.desc),s(e,"narrative_description_sid",t.narrativeDesc),s(e,"source_path",n);let r=m({target_id:e.subtype,type:"resource",subtype:e.subtype,name:e.name_sid,description:e.desc_sid,_data:{}});return[e,...r]}var jn=Ro;var Nn=new Set([]),Hn={"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"},Fn=["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 jo(t){let n={},e=No(t),r=p(t,"DB/heroes_skills/skills/.*?json");for(let i in r){let o=r[i];for(let a of o){let{id:c}=a;Nn.size&&!Nn.has(c)||(n["Skill~"+c]=Ho(a,i,e))}}return n["Skill~_orphan_sub_skills"]=Wo(n,e),n}function No(t){let n={},e=p(t,"DB/heroes_skills/sub_skills/.*?json");for(let r in e){let i=e[r];for(let o of i){let{id:a}=o;n[a]=Fo(o,r)}}return n}function Fo(t,n){gt(t);let e=t.id.replace(/sub_/,"");e=e.replace(/_\d/,""),e=e.replace(/_old/,""),e=e.replace(/_new/,"");let r={_type:"SubSkillDef"};s(r,"id",t.id),s(r,"variant",Hn[n.split("/").pop()]),s(r,"parent_skill_id",e),s(r,"name_sid",t.name),s(r,"desc_sid",t.desc),s(r,"icon",t.icon),s(r,"source_path",n);let i=m({target_id:r.id,type:"sub_skill",name:r.name_sid,description:r.desc_sid,_data:{CurrentSubSkill:t}}),o=L(t,"sub_skill");return[r,...i,...o]}function Ho(t,n,e){let r=[];r.push(...Oo(t,n));for(let a=0;a<t.parametersPerLevel.length;a++){let c=t.parametersPerLevel[a];r.push(...$o(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)){v("Not found in prepared subskills!",l);continue}i.add(l)}}return Array.from(i).sort().forEach(a=>r.push(...e[a])),r}function Oo(t,n){let e={_type:"SkillDef"};s(e,"id",t.id),s(e,"variant",Hn[n.split("/").pop()]),s(e,"skill_type",t.skillType),s(e,"is_pseudo",e.variant==="pseudo"),s(e,"name_sid",t.name),s(e,"desc_sid",t.desc),s(e,"max_level",t.parametersPerLevel.length),s(e,"source_path",n);let r=m({target_id:t.id,type:"skill",name:e.name_sid,description:e.desc_sid,_data:{CurrentSkillParameter:t.parametersPerLevel[0],CurrentSkillLevel:1}});return[e,...r]}function $o(t,n,e){let r=[],i={_type:"SkillLevelDef"};s(i,"skill_id",t.id),s(i,"level",e),s(i,"name_sid",n.name),s(i,"desc_sid",n.desc),s(i,"icon",n.icon),s(i,"offered_sub_skills",n.subSkills),r.push(i);let o=m({target_id:t.id,type:"skill_level",variant:e,name:i.name_sid,description:i.desc_sid,_data:{CurrentSkillParameter:n,CurrentSkillLevel:e}});r.push(...o),n.id=t.id+"_L"+e;let a=L(n,"skill_level");return r.push(...a),r}function Wo(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(qo),r=[];for(let i of e)delete i[0].parent_skill_id,r.push(...i);return r.comment="<!-- Catch-all page for sub-skills not referenced by any skill's subSkills[] list (test entries + legacy arena variants). -->",r}function qo(t,n){let e=Fn.indexOf(t[0].source_path),r=Fn.indexOf(n[0].source_path);return e!==r?e-r:t[0].id.localeCompare(n[0].id)}var On=jo;var $n=new Set([]);function Go(t){let n={},e=p(t,"DB/foo/.*?json");for(let r in e){let i=e[r];for(let o of i){let{id:a}=o;$n.size&&!$n.has(a)||(n["Foo~"+a]=Vo(o,r))}}return n}function Vo(t,n){let e={_type:"FooDef"};s(e,"id",t.id),s(e,"name_sid",t.name),s(e,"description_sid",t.description),s(e,"source_path",n);let r=m({target_id:e.id,type:"foo",name:e.name_sid,description:e.description_sid,_data:{}});return[e,...r]}var Wn=Go;var Zo={human:"humans",undead:"necros",nature:"nature",demon:"demons",unfrozen:"unfrozen",dungeon:"dungeon"};function Jo(t){let n={},e=Ko(t),r=p(t,"DB/heroes_skills/skills_by_level_replace",null,!0);for(let i of r)n["SkillRollReplacement~"+i.id]=Yo(i,e);return n}function Ko(t){let n={},e=kt(t);for(let r in e){let i=e[r][0];n[i.id]=i}return n}function Yo(t,n){let e=n[t.id],r=Zo[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"};s(l,"hero_id",t.id),s(l,"arena_table_id",`arenaGame_${r}_${i}_skills_table`),s(l,"level",c),s(l,"skill_id",a.sid),s(l,"weight",a.chance),o.push(l)}return o}var qn=Jo;var Gn=new Set([]),Xo={humans:"human",necros:"undead",nature:"nature",demons:"demon",unfrozen:"unfrozen",dungeon:"dungeon"};function Qo(t){let n={},e=p(t,"DB/heroes_skills/skills_by_level_tables/[^/]*$");for(let r in e){let i=e[r];for(let o of i){let{id:a}=o;Gn.size&&!Gn.has(a)||(n["SkillRollTable~"+a]=ta(o,r))}}return n}function ta(t,n){let[,e,r]=D(t.id,/([a-z]+)_([a-z]+)_skills_table$/),i=Xo[e],o={_type:"SkillRollTableDef"};s(o,"id",t.id),s(o,"class_id",r+"_"+i),s(o,"faction",i),s(o,"class_type",r),s(o,"mode",t.id.split("_").length===5?"arena":"standard"),s(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(ea);for(let f of d)a.push(na(f,l,t.id))}return[o,...a]}function ea(t,n){let e=t.chance,r=n.chance;return e!==r?e>r?-1:1:t.sid.localeCompare(n.sid)}function na(t,n,e){let r={_type:"SkillRollWeightDef"};return s(r,"table_id",e),s(r,"band_kind",n),s(r,"skill_id",t.sid),s(r,"weight",t.chance),r}var Vn=Qo;var Zn=new Set([]);function ra(t){let n={},e=p(t,"DB/magics/.*?json","test_");for(let r in e){let i=e[r];for(let o of i){let{id:a}=o;Zn.size&&!Zn.has(a)||(n["Spell~"+a]=ia(o,r))}}return n}function ia(t,n){let e=[];e.push(...sa(t,n));for(let r=0;r<t.description.length;r++)e.push(...oa(t,r+1));return e}function sa(t,n){let e={_type:"SpellDef"};s(e,"id",t.id),s(e,"name_sid",t.name),s(e,"school",t.school_),s(e,"rank",t.rank),s(e,"used_on_map",t.usedOnMap),s(e,"icon",t.icon),s(e,"magic_type_description",t.magicTypeDescription),s(e,"is_special_magic",!!t.isSpecialMagic),s(e,"is_unique_magic",!!t.isUniqueMagic),s(e,"normal_magic_sid",t.normalMagicSid),s(e,"learn_cost_star_dust",t.learnCost?.find(i=>i.name==="starDust")?.cost),s(e,"learn_cost_gemstones",t.learnCost?.find(i=>i.name==="gemstones")?.cost),s(e,"learn_cost_crystals",t.learnCost?.find(i=>i.name==="crystals")?.cost),s(e,"learn_cost_mercury",t.learnCost?.find(i=>i.name==="mercury")?.cost),s(e,"excaption_in_tooltip_sid",t.excaptionInTooltip),s(e,"up_effect_description_sid",t.upEffectDescription),s(e,"energy_type",t.energyType),s(e,"source_path",n);let r=m({target_id:t.id,type:"spell",name:t.name});return[e,...r]}function oa(t,n){let e={_type:"SpellRankDef"};s(e,"spell_id",t.id),s(e,"level",n),s(e,"description_sid",t.description[n-1]),s(e,"bonus_description_sid",t.bonusDescriptions?.[n-2]?.description),s(e,"mana_cost",t.manaCost[n-1]),s(e,"upgrade_cost",t.upgradeCost[n-2]);let r=m({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:aa(t,n),CurrentMagicWorld:ca(t,n),CurrentMagicLevel:n}});return[e,...r]}function aa(t,n){let e=t.battleMagic?.magicDealers||[{}],r=t.battleMagic?.dealersPerLevels||[];for(let o=0;o<4;o++)r[o]||(r[o]=0);let i=r[n-1];return e[i]}function ca(t,n){let e=t.worldMagic?.magicSettings||[{}],r=t.worldMagic?.settingPerLevels||[];for(let o=0;o<4;o++)r[o]||(r[o]=0);let i=r[n-1];return e[i]}var Jn=ra;var Kn=new Set([]);function la(t){let n={},e=fa(t),r=p(t,"DB/heroes_skills/skills/pseudo_skills.json");for(let i in r){let o=r[i];for(let a of o){let{id:c}=a;Kn.size&&!Kn.has(c)||(n["StatBonusRoll~"+c]=ua(a,e))}}return n}function fa(t){let e=p(t,"/humans_might_skills_table.json",null,!0)[0].defaultList.find(r=>r.levels[0]===-2).rollChances;return q(e,"sid")}function ua(t,n){let e={_type:"StatBonusRollDef"};s(e,"id",t.id),s(e,"stat",t.parametersPerLevel[0].bonuses[0].parameters[0]),s(e,"magnitude",t.parametersPerLevel[0].bonuses[0].parameters[1]),s(e,"weight",n[t.id].chance),s(e,"name_sid",t.name),s(e,"desc_sid",t.desc);let r=m({target_id:e.id,type:"stat_bonus_roll",name:e.name_sid,description:e.desc_sid,_data:{}});return[e,...r]}var Yn=la;var da={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 pa(){return F(da,{domain:"UI",type:"ui",prefix:"",name_suffix:"",suppressDescription:!0,trimColon:!0,path:"Lang/english/texts/ui.json"})}var Xn=pa;var Qn=new Set([]);function _a(t){let n={},e=p(t,"DB/foo/.*?json");for(let r in e){let i=e[r];for(let o of i){let{id:a}=o;Qn.size&&!Qn.has(a)||(n["Foo~"+a]=ma(o,r))}}return n}function ma(t,n){let e={_type:"FooDef"};s(e,"id",t.id),s(e,"name_sid",t.name),s(e,"description_sid",t.description),s(e,"source_path",n);let r=m({target_id:e.id,type:"foo",name:e.name_sid,description:e.description_sid,_data:{}});return[e,...r]}var tr=_a;var ha=new Set(["human","undead","nature","demon","unfrozen","dungeon","neutral"]);function ga(t,n){if(t.startsWith("base_")||t.startsWith("common_"))return!0;let e=t.split("_").shift();return n.startsWith(e)?!1:ha.has(e)}var et=ga;var er=new Set([]),St={melee:"melee_attack",shoot:"ranged_attack",range:"remote_attack"};function va(t){let n={},e=p(t,/units_logics/),r=p(t,/units_views/);for(let i in e){let o=e[i][0].id;if(er.size&&!er.has(o))continue;let a=i.replace("_logics/","_views/").replace("_l.","_v.");if(!r[a]){v("Missing path!",a);continue}let c=e[i],l=r[a];c.length!==1&&l.length!==1&&v("Unexpected logic/view count!",i),n["Unit~"+o]=ya(c[0],l[0],i)}return n}function ya(t,n,e){let r=[],i=[],o=ba(t,n,e,i);return r.push(o),r.push(...Aa(t,n,i)),r.push(...Ca(t)),r.push(...Ta(t)),r.push(...xa(t)),r.push(...La(t,n,i)),r.push(Ba(t,o)),r.push(...m(i)),r}function ba(t,n,e,r){let i={_type:"UnitDef"},o=t.id.replace(/_upg$|_alt$/,""),a=!bt(t.id+"_name");return s(i,"id",t.id),s(i,"unused",a?!0:null),s(i,"faction",t.fraction),s(i,"tier",t.tier),s(i,"source_path",e),s(i,"name_sid",t.id+"_name"),s(i,"desc_sid",t.id+"_narrativeDescription"),s(i,"base_sid",o===t.id?null:o),s(i,"upgrade_sid",t.upgradeSid),s(i,"hp",t.stats.hp),s(i,"offence",t.stats.offence),s(i,"defence",t.stats.defence),s(i,"damage_min",t.stats.damageMin),s(i,"damage_max",t.stats.damageMax),s(i,"initiative",t.stats.initiative),s(i,"speed",t.stats.speed),s(i,"luck",t.stats.luck),s(i,"morale",t.stats.moral),s(i,"energy_per_cast",t.stats.energyPerCast),s(i,"energy_per_round",t.stats.energyPerRound),s(i,"energy_per_take_damage",t.stats.energyPerTakeDamage),s(i,"action_points",t.stats.actionPoints),s(i,"num_counters",t.stats.numCounters),s(i,"morale_min",t.stats.moralMin),s(i,"morale_max",t.stats.moralMax),s(i,"luck_min",t.stats.luckMin),s(i,"luck_max",t.stats.luckMax),s(i,"move_type",t.stats.moveType||"ground"),s(i,"creature_type",wa(t)),s(i,"immunities",Da(t)),s(i,"disablers",ka(t)),s(i,"shared_abilities",Sa(n)),s(i,"gold_cost",V(t,"gold")),s(i,"wood_cost",V(t,"wood")),s(i,"ore_cost",V(t,"ore")),s(i,"mercury_cost",V(t,"mercury")),s(i,"dust_cost",V(t,"dust")),s(i,"crystal_cost",V(t,"crystals")),s(i,"gemstone_cost",V(t,"gemstones")),s(i,"native_biome",t.nativeBiome),s(i,"ai_archetype",t.ai),s(i,"tags",t.tags),s(i,"leave_corpse",t.leaveCorpse===!1?!1:null),s(i,"squad_value",t.squadValue),s(i,"exp_bonus",t.expBonus),r.push({target_id:t.id,type:"unit",name:i.name_sid,description:i.desc_sid}),i}function wa(t){let{passives:n=[]}=t;for(let e of n){let r=e?.data?.immunities||[];for(let i of r){let{tags:o=[]}=i,a=o.find(c=>c.endsWith("_immunities"));if(a)return a.replace("_immunities","")}}}function Da(t){let n=[],{passives:e=[]}=t;for(let r of e){let i=r?.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 ka(t){let n=[],{passives:e=[]}=t;for(let r of e){let i=r?.data?.disablers||[];for(let o of i)o.mech&&n.push(o.mech)}return n}function Sa(t){return[...t.alternativeAttacks||[],...t.abilities||[],...t.passives||[]].filter(r=>et(r.name,t.id)).map(r=>r.name)}function V(t,n){let{costResArray:e=[]}=t.unitCost||{};for(let r of e)if(r.name===n)return r.cost}function Aa(t,n,e){let r=[],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(et(d.name,t.id))continue;a++;let f={_type:"UnitAbilityActiveDef"};s(f,"ability_id",t.id+"_"+a),s(f,"unit_id",t.id),s(f,"ability_type","active"),s(f,"ordinal",a),s(f,"name_sid",d.name),s(f,"desc_sid",d.description),s(f,"active_type",d.abilityType),s(f,"info_description",d.infoDescription),s(f,"excaption_in_tooltip",d.excaptionInTooltip),s(f,"attack_type",l.attackType_),s(f,"rank",l.rank),s(f,"cd",l.cd),s(f,"energy_level",l.energyLevel),s(f,"action_cost",l.actionCost),s(f,"charges",l.charges),s(f,"move_type_active",l.moveType),s(f,"dont_use_energy",l.dontUseEnergy),s(f,"disable_for_ai",l.disableForAi),s(f,"use_all_energy_levels",l.useAllEnergyLevels),s(f,"never_disable",l.neverDisable);let u=l.damageDealer||{};s(f,"untargeted_cast",u.untargetedCast),s(f,"instacast",u.instacast),s(f,"attack_pattern_sid",u.attackPatternSid),s(f,"damage_target",u.damageTarget_),s(f,"damage_type",u.damageType_),s(f,"stat_dmg_mult",u.statDmgMult),s(f,"trigger_counter",u.triggerCounter),s(f,"min_damage_per_energy_level",u.minDamagePerEnergyLevel),s(f,"max_damage_per_energy_level",u.maxDamagePerEnergyLevel),s(f,"use_speed_as_shoot_range",u.useSpeedAsShootRange),s(f,"temp_self_buff",u.tempSelfBuff),s(f,"multitarget_type",u.multitargetType),s(f,"num_targets",u.numTargets),s(f,"min_base_dmg",u.minBaseDmg),s(f,"max_base_dmg",u.maxBaseDmg),s(f,"min_stack_dmg",u.minStackDmg),s(f,"max_stack_dmg",u.maxStackDmg),s(f,"damage_multipler_per_hero_level",u.damageMultiplerPerHeroLevel),s(f,"buff_sid",u.buff?.sid),s(f,"buff_target",u.buffTarget_),s(f,"buff_duration",u.buff?.duration),s(f,"buff_charges",u.buff?.charges),s(f,"shoot_range",u.shootRange),s(f,"shoot_threshold",u.shootThreshold),s(f,"shoot_red_count",u.shootRedCount),s(f,"shoot_dmg_buff",u.shootDmgBuff),s(f,"cast_target",u.castTargetParams?.castTarget_),s(f,"cast_selection",u.castTargetParams?.selection),s(f,"cast_target_condition",u.castTargetParams?.targetCondition_),s(f,"cast_target_tags",u.castTargetParams?.targetTags),s(f,"affect_target",u.affectTargetParams?.castTarget_),s(f,"affect_selection",u.affectTargetParams?.selection),s(f,"affect_target_condition",u.affectTargetParams?.targetCondition_),s(f,"affect_target_tags",u.affectTargetParams?.targetTags),r.push(f),e.push({target_id:f.ability_id,type:"unit_ability",name:f.name_sid,description:f.desc_sid,_data:{CurrentAbility:l,CurrentUnitConfig:t,CurrentUnitStats:t.stats}})}return r}function xa(t){let n=[],e=t.globalPassives||[];for(let r=0;r<e.length;r++){let i=e[r],o=r+1,a={_type:"UnitAbilityGlobalDef"};s(a,"ability_id",t.id+"_global_passive_"+o),s(a,"unit_id",t.id),s(a,"ability_type","global_passive"),s(a,"ordinal",o),s(a,"name_sid",a.ability_id+"_name"),s(a,"global_target",i.target),s(a,"global_power",i.power),s(a,"global_tag",i.tag),s(a,"affected_stat",Object.keys(i.data?.stats||{})[0]),s(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 Ca(t){let n=[],e=t.aura?[t.aura]:[];for(let r=0;r<e.length;r++){let i=e[r],o=r+1,a={_type:"UnitAbilityAuraDef"};s(a,"ability_id",t.id+"_aura_"+o),s(a,"unit_id",t.id),s(a,"ability_type","aura"),s(a,"ordinal",o),s(a,"name_sid",a.ability_id+"_name"),s(a,"aura_target",i.target),s(a,"aura_power",i.power),s(a,"aura_radius",i.radius),s(a,"aura_tag",i.tag);let c=i.data?.stats||{},l=Object.keys(c)[0];s(a,"affected_stat",l),typeof c[l]=="number"&&s(a,"affected_stat_amount",c[l]+".0"),n.push(a)}return n}function Ta(t){let n=[],e=t.conditionalPassives||[];for(let r=0;r<e.length;r++){let i=e[r],o=r+1,a={_type:"UnitAbilityConditionalDef"};s(a,"ability_id",t.id+"_conditional_passive_"+o),s(a,"unit_id",t.id),s(a,"ability_type","conditional_passive"),s(a,"ordinal",o),s(a,"name_sid",a.ability_id+"_name"),s(a,"condition_check",i.condition?.[0]),s(a,"condition_target",i.condition?.[1]),s(a,"condition_value",i.condition?.[2]);let c=i.stats||{},l=Object.keys(c)[0];s(a,"affected_stat",l),typeof c[l]=="number"&&s(a,"affected_stat_amount",c[l]+".0"),n.push(a)}return n}function La(t,n,e){let r=[],i=n.passives,o=0;for(let a=0;a<i.length;a++){let c=i[a];if(et(c.name,t.id))continue;o++;let l={_type:"UnitAbilityPassiveDef"};s(l,"ability_id",t.id+"_passive_"+o),s(l,"unit_id",t.id),s(l,"ability_type","passive"),s(l,"ordinal",o),s(l,"name_sid",c.name),s(l,"desc_sid",c.description),s(l,"excaption_in_tooltip",c.excaptionInTooltip),r.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 r}function Ba(t,n){let e={_type:"UnitAttackDef"};s(e,"unit_id",t.id);let r=t.defaultAttacks?.[0]||{};s(e,"default_attack_type",za(r.attackType_,n)),s(e,"default_damage_target",r.damageDealer?.damageTarget_,"enemy"),s(e,"default_affect_target",r.damageDealer?.affectTargetParams.castTarget_,"enemy"),s(e,"default_trigger_counter",r.damageDealer?.triggerCounter,!0),s(e,"default_dont_trigger_energy_regen",r.damageDealer?.dontTriggerEnergyRegen),s(e,"default_buff_sid",r.damageDealer?.buff?.sid),s(e,"default_buff_target",r.damageDealer?.buffTarget_),s(e,"default_buff_duration",r.damageDealer?.buff?.duration);let i=t.counterAttacks?.[0]||{};s(e,"counter_attack_type",St[i.attackType_]),s(e,"counter_stat_dmg_mult",i.damageDealer?.statDmgMult,1),s(e,"counter_buff_sid",i.damageDealer?.buff?.sid),s(e,"counter_buff_target",i.damageDealer?.buffTarget_),s(e,"counter_buff_duration",i.damageDealer?.buff?.duration),s(e,"counter_damage_target",i.damageDealer?.damageTarget_,"enemy"),s(e,"counter_affect_target",i.damageDealer?.affectTargetParams.castTarget_,"enemy"),s(e,"counter_dont_trigger_energy_regen",i.damageDealer?.dontTriggerEnergyRegen),s(e,"counter_is_armed_ability",Qt(i.damageDealer?.tags));let o=t.alternativeAttacks?.[0]||{};s(e,"alt_attack_type",St[o.attackType_]),s(e,"alt_stat_dmg_mult",o.damageDealer?.statDmgMult,.5),s(e,"alt_damage_target",o.damageDealer?.damageTarget_,"enemy"),s(e,"alt_affect_target",o.damageDealer?.affectTargetParams.castTarget_,"enemy"),s(e,"alt_trigger_counter",o.damageDealer?.triggerCounter,!1),s(e,"alt_buff_sid",o.damageDealer?.buff?.sid),s(e,"alt_buff_target",o.damageDealer?.buffTarget_),s(e,"alt_buff_duration",o.damageDealer?.buff?.duration),s(e,"alt_cd",o.cd),s(e,"alt_dont_use_energy",o.dontUseEnergy),s(e,"alt_never_disable",o.neverDisable),s(e,"alt_return_to_start_after_attack",o.returnToStartAfterAttack),s(e,"alt_temp_self_buff",o.damageDealer?.tempSelfBuff),s(e,"alt_is_armed_ability",Qt(o.damageDealer?.tags));let a=t.alternativeAttacks?.[1]||{};return s(e,"alt2_attack_type",St[a.attackType_]),s(e,"alt2_stat_dmg_mult",a.damageDealer?.statDmgMult,.5),s(e,"alt2_trigger_counter",a.damageDealer?.triggerCounter,!1),s(e,"alt2_buff_sid",a.damageDealer?.buff?.sid),s(e,"alt2_buff_target",a.damageDealer?.buffTarget_),s(e,"alt2_buff_duration",a.damageDealer?.buff?.duration),s(e,"alt2_cd",a.cd),s(e,"alt2_dont_use_energy",a.dontUseEnergy),s(e,"alt2_multitarget_type",a.damageDealer?.multitargetType),s(e,"alt2_num_targets",a.damageDealer?.numTargets),s(e,"alt2_is_armed_ability",Qt(a.damageDealer?.tags)),e}function Qt(t){if(Array.isArray(t)){for(let n of t)if(n.startsWith("armed_ability"))return!0}}function za(t,n){if(t=St[t],!t)return;let{shared_abilities:e=[]}=n;for(let r of e)if(r.startsWith("base_passive_"+t))return r.replace("base_passive_","").replace("_name","");return t}var nr=va;function Ea(t){let n={},e=Ia(t);e.length||v("No ability type ids found!"),n["UnitLabels~ability_type"]=te(e,"ability_type");let r=Pa(t);r.length||v("No info_description ids found!"),n["UnitLabels~info_description"]=te(r,"info_description");let i=Ma(t);return i.length||v("No immunityIds found!"),n["UnitLabels~immunity"]=te(i,"immunity"),n}function Ia(t){let n=[],e=p(t,/english.texts.unitsAbility.json$/,null,!0);for(let{sid:r}of e)r.startsWith("Ability_type_")&&n.push(r);return n}function Pa(t){let n=new Set,e=p(t,/units_views/);for(let r in e){let i=e[r][0],o=[...i.alternativeAttacks||[],...i.abilities||[]];for(let{infoDescription:a}of o)a&&n.add(a)}return Array.from(n)}function Ma(t){let n=new Set,e=p(t,/units_views/);for(let r in e){let i=e[r][0],o=[...i.alternativeAttacks||[],...i.abilities||[]];for(let{excaptionInTooltip:a}of o)a&&n.add(a)}return Array.from(n)}function te(t,n){let e=t.map(i=>({target_id:i,type:n,name:i}));return m(e)}var rr=Ea;function Ra(t){return!(t.startsWith("base_class_")||t.startsWith("base_passive_flyer_")||t.startsWith("base_passive_blink_")||t.match(/base_passive_[a-z]+_attack_/))}var ir=Ra;var sr=new Set([]);function Ua(t){let n={},e=ja(t);for(let r in e)n["UnitShared~"+r]=Fa(r,e[r]);return n}function ja(t){let n={},e=p(t,/units_logics/),r=p(t,/units_views/);for(let i in e){let o=e[i][0].id;if(sr.size&&!sr.has(o))continue;let a=i.replace("_logics/","_views/").replace("_l.","_v."),c=e[i],l=r[a],d=Na(c[0],l[0]);Object.assign(n,d)}return n}function Na(t,n){let e={},{id:r,passives:i=[],alternativeAttacks:o=[],abilities:a=[]}=n,c=[...o,...a,...i];for(let l of c){let{name:d,description:f,abilityType:u}=l;if(et(d,r)&&ir(d)){u&&(u==="Ability_type_attack_alt"||u==="Ability_type_attack_mod"||v("Unexpected ability!",n,l));let _=d.replace(/_name$/,"");e[_]={name:d,description:f,type:u,logic:t}}}return e}function Fa(t,{name:n,description:e,type:r,logic:i}){let o=!!r,a=[],c={_type:o?"UnitAbilityActiveDef":"UnitAbilityPassiveDef"};s(c,"ability_id",t),o&&s(c,"active_type",r),s(c,"name_sid",n),s(c,"desc_sid",e),o&&s(c,"cd",-1),a.push(c);let l=m([{target_id:t,type:"unit_ability",name:n,description:e,_data:{CurrentUnitConfig:i,CurrentUnitStats:i.stats}}]);return a.push(...l),a}var or=Ua;var Ha={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 Oa(){return F(Ha,{domain:"UnitStat",type:"unit_stat",name_suffix:"",path:"Lang/english/texts/ui.json"})}var ar=Oa;var cr=new Set([]),$a=[nn,sn,cn,fn,pn,_n,mn,Dt,kt,Sn,xn,Cn,Ln,zn,In,Mn,Rn,jn,On,Wn,qn,Vn,Jn,Yn,Xn,tr,nr,rr,or,ar];async function lr(t){t&&I.redirect(t);let n=await We();tn(n);let e={};for(let i of $a)(!cr.size||cr.has(i))&&Object.assign(e,i(n));let r={};for(let i in e){let o="Data/"+i+".wiki";r[o]=Wa(e[i])}return r}function Wa(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(qa(e));return n.push("[[Category:Game Data Import]]"),n.join(`
`).trim()}function qa(t){let n=[];n.push(`{{${t._type}`),delete t._type;for(let e in t)n.push(`| ${e.trim()} = ${Ga(t[e])}`);return n.push("}}"),n.join(`
`)}function Ga(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(","):(I.log("Unexpected value type!",typeof t,t),String(t))}}I.initialize(lr);var fr=lr;var Va=fr,ee,ne,re,ie,At,ur;async function dr(){let t=document.querySelector(".diff-root");t?Za(t):document.readyState!=="complete"?window.addEventListener("load",pr):console.warn("Cannot find root!")}async function pr(){window.removeEventListener("load",pr),await dr()}function Za(t){t.innerHTML=`
Patch version: <input class='patchId' /><br>
Patch date: <input class='patchDate'/><br>
<br>
Archive A: <input class='inputA' type='file'/><br>
Archive B: <input class='inputB' type='file'/><br>
<br>
<button class='btnCompare' disabled>Compare</button><br>
<br>
Output:<br>
<textarea class='output' style='height:200px;'></textarea>
<br>
Log:<br>
<div class='toolLog'></div>
`,t.querySelector(".patchId").addEventListener("change",Ja),t.querySelector(".patchDate").addEventListener("change",Ka),t.querySelector(".inputA").addEventListener("change",Ya),t.querySelector(".inputB").addEventListener("change",Xa),At=t.querySelector(".btnCompare"),At.addEventListener("click",Qa),ur=t.querySelector(".output"),Ee(t.querySelector(".toolLog")),st("Initialized.")}function Ja(t){ee=t.target.value,xt()}function Ka(t){ne=t.target.value,xt()}function Ya(t){re=t.target.files[0],xt()}function Xa(t){ie=t.target.files[0],xt()}function xt(){ee&&ne&&re&&ie?(At.disabled=!1,st('You may now click "Compare" to obtain the output...')):At.disabled=!0}async function Qa(){let n=await Le(re,ie,Ie,Va,{id:ee,date:ne});ur.value=n}dr();})();


