@idosgames/game-kit 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +3 -3
- package/dist/index.d.cts +197 -6
- package/dist/index.d.ts +197 -6
- package/dist/index.js +2 -2
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {b,l,
|
|
2
|
-
`||i==="\r"){t++;continue}if(i>="0"&&i<="9"||i==="."&&/[0-9]/.test(e[t+1]??"")){let o=/^(?:\d+\.?\d*|\.\d+)(?:[eE][+-]?\d+)?/.exec(e.slice(t));if(!o)throw new Xt("bad number",e,t);s.push({t:"num",v:Number(o[0]),at:t}),t+=o[0].length;continue}if(i==="'"||i==='"'){let o=e.indexOf(i,t+1);if(o<0)throw new Xt("unclosed string",e,t);s.push({t:"str",v:e.slice(t+1,o),at:t}),t=o+1;continue}if(/[A-Za-z_$]/.test(i)){let o=/^[A-Za-z_$][A-Za-z0-9_$]*(?:\.[A-Za-z_$][A-Za-z0-9_$]*)*/.exec(e.slice(t));if(!o)throw new Xt("bad name",e,t);s.push({t:"id",v:o[0],at:t}),t+=o[0].length;continue}let n=Zl.find(o=>e.startsWith(o,t));if(!n)throw new Xt(`unexpected "${i}"`,e,t);s.push({t:"op",v:n,at:t}),t+=n.length;}return s.push({t:"end",at:e.length}),s}var ac={"||":1,"&&":2,"==":3,"!=":3,"<":4,"<=":4,">":4,">=":4,"+":5,"-":5,"*":6,"/":6,"%":6,"^":8};function ed(e){let s=Ql(e),t=0,i=()=>s[t],n=()=>s[t++],o=w=>{let W=i();return W.t==="op"&&W.v===w},d=w=>{let W=n();if(W.t!=="op"||W.v!==w)throw new Xt(`expected "${w}"`,e,W.at)},p=w=>{if(w>fa)throw new Xt("formula is nested too deep",e,i().at);let W=E(0,w+1);if(!o("?"))return W;n();let te=p(w+1);d(":");let ue=p(w+1);return {k:"cond",c:W,a:te,b:ue}},E=(w,W)=>{if(W>fa)throw new Xt("formula is nested too deep",e,i().at);let te=O(W+1);for(;;){let ue=i();if(ue.t!=="op")break;let F=ac[ue.v];if(F===void 0||F<w)break;n();let ie=ue.v==="^"?E(F,W+1):E(F+1,W+1);te={k:"bin",op:ue.v,a:te,b:ie};}return te},O=w=>{if(w>fa)throw new Xt("formula is nested too deep",e,i().at);return o("-")||o("!")?{k:"un",op:n().v,a:E(ac["^"],w+1)}:D(w+1)},D=w=>{let W=n();if(W.t==="num")return {k:"num",v:W.v};if(W.t==="str")return {k:"str",v:W.v};if(W.t==="op"&&W.v==="("){let te=p(w+1);return d(")"),te}if(W.t==="id"){if(W.v==="true")return {k:"bool",v:true};if(W.v==="false")return {k:"bool",v:false};if(o("(")){if(!Object.prototype.hasOwnProperty.call(pa,W.v))throw new Xt(`unknown function "${W.v}"`,e,W.at);n();let te=[];if(!o(")"))for(;;){if(te.push(p(w+1)),o(",")){n();continue}break}return d(")"),{k:"call",fn:W.v,args:te}}return {k:"var",path:W.v.split(".")}}throw new Xt(W.t==="end"?"unexpected end":"unexpected token",e,W.at)},T=p(0),N=i();if(N.t!=="end")throw new Xt("unexpected token",e,N.at);return T}function td(e,s){let t=e;for(let i of s){if(t===null||typeof t!="object"||!Object.prototype.hasOwnProperty.call(t,i))return 0;t=t[i];}return typeof t=="number"||typeof t=="string"||typeof t=="boolean"?t:0}function Ut(e,s){switch(e.k){case "num":case "str":case "bool":return e.v;case "var":return td(s,e.path);case "un":return e.op==="-"?-Qe(Ut(e.a,s)):!wn(Ut(e.a,s));case "cond":return wn(Ut(e.c,s))?Ut(e.a,s):Ut(e.b,s);case "call":return Qe(pa[e.fn](...e.args.map(t=>Qe(Ut(t,s)))));case "bin":{if(e.op==="&&")return wn(Ut(e.a,s))&&wn(Ut(e.b,s));if(e.op==="||")return wn(Ut(e.a,s))||wn(Ut(e.b,s));let t=Ut(e.a,s),i=Ut(e.b,s);switch(e.op){case "==":return typeof t=="string"||typeof i=="string"?String(t)===String(i):Qe(t)===Qe(i);case "!=":return typeof t=="string"||typeof i=="string"?String(t)!==String(i):Qe(t)!==Qe(i);case "<":return Qe(t)<Qe(i);case "<=":return Qe(t)<=Qe(i);case ">":return Qe(t)>Qe(i);case ">=":return Qe(t)>=Qe(i);case "+":return typeof t=="string"||typeof i=="string"?`${t}${i}`:Qe(t)+Qe(i);case "-":return Qe(t)-Qe(i);case "*":return Qe(t)*Qe(i);case "/":{let n=Qe(i);return n===0?0:Qe(t)/n}case "%":{let n=Qe(i);return n===0?0:Qe(t)%n}case "^":return Qe(Math.pow(Qe(t),Qe(i)))}return 0}}}function An(e,s){switch(e.k){case "var":s.add(e.path.join("."));return;case "un":An(e.a,s);return;case "bin":An(e.a,s),An(e.b,s);return;case "cond":An(e.c,s),An(e.a,s),An(e.b,s);return;case "call":for(let t of e.args)An(t,s);return;default:return}}var Ao=new Map;function nn(e){let s=Ao.get(e);if(s)return s;if(e.length>sc)throw new Xt("formula is too long",e,sc);let t=ed(e),i=new Set;An(t,i);let n={source:e,reads:[...i],eval:o=>Ut(t,o),num:o=>Qe(Ut(t,o)),bool:o=>wn(Ut(t,o))};return Ao.size>5e3&&Ao.clear(),Ao.set(e,n),n}function ua(e){try{return nn(e),null}catch(s){return s instanceof Error?s.message:String(s)}}function ma(e,s,t=0){return e===void 0?t:typeof e=="number"?Number.isFinite(e)?e:t:nn(e).num(s)}var jr=gn("effect"),nd=/^[a-z][a-z0-9_]*$/,ic=e=>{let s=e.name;if(typeof s!="string"||!nd.test(s))throw new Error(`effect ${e.type}: bad var name`);return s},cc=[{id:"set-var",version:1,required:["name","value"],formulas:["value"],run(e,s){let t=s.value,i=typeof t=="string"?nn(t).eval(e.scope):typeof t=="number"||typeof t=="boolean"?t:0;e.world.vars[ic(s)]=i;}},{id:"add-var",version:1,required:["name","amount"],formulas:["amount","min","max"],run(e,s){let t=ic(s),i=e.world.vars[t],n=(typeof i=="number"?i:0)+e.num(s.amount);s.min!==void 0&&(n=Math.max(n,e.num(s.min))),s.max!==void 0&&(n=Math.min(n,e.num(s.max))),e.world.vars[t]=n;}},{id:"emit",version:1,required:["topic"],run(e,s){let t=s.topic;if(typeof t!="string"||t.length===0)throw new Error("effect emit: topic required");let i=s.payload,n={};if(i&&typeof i=="object")for(let[o,d]of Object.entries(i))n[o]=typeof d=="string"?nn(d).eval(e.scope):d;e.world.emit(t,n);}}];function Kr(e){for(let s of cc)e.has(jr,s.id)||e.define(jr,s);}function Lo(e,s,t,i){let n=new Set;e.forEach((o,d)=>{let p=`${t}.${d}`;if(!o||typeof o!="object"){i.push({level:"error",path:p,code:"RULE_SHAPE",message:"a rule must be an object"});return}if(typeof o.id!="string"||o.id.length===0?i.push({level:"error",path:`${p}.id`,code:"RULE_ID",message:"a rule needs an id"}):n.has(o.id)?i.push({level:"error",path:`${p}.id`,code:"RULE_DUPLICATE",message:`rule "${o.id}" is defined twice`}):n.add(o.id),(typeof o.on!="string"||o.on.length===0)&&i.push({level:"error",path:`${p}.on`,code:"RULE_TRIGGER",message:"a rule needs an event topic in `on`"}),o.when!==void 0)try{nn(String(o.when));}catch(E){i.push({level:"error",path:`${p}.when`,code:"RULE_FORMULA",message:E.message});}if(!Array.isArray(o.do)||o.do.length===0){i.push({level:"error",path:`${p}.do`,code:"RULE_EFFECTS",message:"a rule needs at least one effect"});return}o.do.forEach((E,O)=>{let D=`${p}.do.${O}`,T=typeof E?.type=="string"?s.get(jr,E.type):void 0;if(!T){i.push({level:"error",path:`${D}.type`,code:"EFFECT_UNKNOWN",message:`unknown effect "${String(E?.type)}"`});return}for(let N of T.required??[])E[N]===void 0&&i.push({level:"error",path:`${D}.${N}`,code:"EFFECT_PARAM",message:`effect "${T.id}" needs "${N}"`});for(let N of T.formulas??[]){let w=E[N];if(typeof w=="string")try{nn(w);}catch(W){i.push({level:"error",path:`${D}.${N}`,code:"RULE_FORMULA",message:W.message});}}});});}function ha(e,s,t,i={}){let n=s.map(p=>({def:p,...p.when!==void 0?{when:nn(p.when)}:{},effects:p.do.map(E=>({spec:E,def:t.require(jr,E.type)})),hits:0,runs:0,lastRunAt:Number.NEGATIVE_INFINITY})),o=new Map;for(let p of n){let E=o.get(p.def.on)??[];E.push(p),o.set(p.def.on,E);}let d=[...o.entries()].map(([p,E])=>e.on(p,O=>{for(let D of E){if(D.def.once&&D.runs>0)continue;let T={event:O,vars:e.vars,tick:e.tick,time:e.time};if(D.when&&!D.when.bool(T)||(D.hits++,D.def.every!==void 0&&D.def.every>1&&D.hits%D.def.every!==0)||D.def.cooldown!==void 0&&e.time-D.lastRunAt<D.def.cooldown)continue;D.runs++,D.lastRunAt=e.time;let N={world:e,rule:D.def,event:O,scope:T,num:(w,W=0)=>typeof w=="number"||typeof w=="string"?ma(w,T,W):W};for(let w of D.effects)try{w.def.run(N,w.spec);}catch(W){i.onError?.(D.def,W);}}}));return ()=>d.forEach(p=>p())}var ya=e=>e.some(s=>s.level==="error");function Po(e,s,t,i){let n={};for(let[o,d]of Object.entries(e))n[o]=d.default;if(!s)return n;for(let[o,d]of Object.entries(s)){let p=e[o],E=`${t}.${o}`;if(!p){i.push({level:"warning",path:E,code:"PARAM_UNKNOWN",message:`unknown parameter "${o}"`});continue}switch(p.type){case "number":{if(typeof d!="number"||!Number.isFinite(d)){i.push({level:"warning",path:E,code:"PARAM_TYPE",message:"expected a number, default used"});break}let O=p.integer?Math.round(d):d;p.min!==void 0&&O<p.min&&(O=p.min),p.max!==void 0&&O>p.max&&(O=p.max),O!==d&&i.push({level:"warning",path:E,code:"PARAM_CLAMPED",message:`${d} \u2192 ${O}`}),n[o]=O;break}case "enum":typeof d=="string"&&p.values.includes(d)?n[o]=d:i.push({level:"warning",path:E,code:"PARAM_ENUM",message:`not one of ${p.values.join(", ")}, default used`});break;case "boolean":typeof d=="boolean"?n[o]=d:i.push({level:"warning",path:E,code:"PARAM_TYPE",message:"expected true/false, default used"});break;case "string":if(typeof d=="string"){let O=p.maxLength??500;n[o]=d.length>O?d.slice(0,O):d,d.length>O&&i.push({level:"warning",path:E,code:"PARAM_CLAMPED",message:`cut to ${O} characters`});}else i.push({level:"warning",path:E,code:"PARAM_TYPE",message:"expected text, default used"});break}}return n}var Io=["phaser","three","dom"],Ln=gn("block"),Pn=gn("preset");var lc=["store","premium","character","inventory","lootboxes","boosts","leaderboard","rewards","quests","collections","craft","marketplace","deals","events","coop-events","season","pvp","mailbox","reward-window","idle"],rd=/^system:([a-z][a-z0-9-]*)$/,od=new Set(["currency","item"]);function ga(e,s,t,i){let n=new Set(e.map(E=>E.id)),o=new Set(s.map(E=>E.id)),d=new Map,p=new Map;t.forEach((E,O)=>{let D=`flows.${O}`;o.has(E.resource)||i.push({level:"error",path:`${D}.resource`,code:"FLOW_RESOURCE_UNKNOWN",message:`no resource "${E.resource}"`});let T=rd.exec(E.by);T?lc.includes(T[1])||i.push({level:"warning",path:`${D}.by`,code:"FLOW_SYSTEM_UNKNOWN",message:`"${E.by}" is not a platform system`}):n.has(E.by)||i.push({level:"error",path:`${D}.by`,code:"FLOW_BY_UNKNOWN",message:`"${E.by}" is neither a mode of the spec nor "system:<id>"`}),E.kind!=="source"&&E.kind!=="sink"&&i.push({level:"error",path:`${D}.kind`,code:"FLOW_KIND",message:'kind is "source" or "sink"'});let N=E.kind==="source"?d:p;N.set(E.resource,(N.get(E.resource)??0)+1);}),s.forEach((E,O)=>{let D=`resources.${O}`,T=d.get(E.id)??0,N=p.get(E.id)??0;T===0&&i.push({level:"error",path:D,code:"RESOURCE_NO_SOURCE",message:`nothing produces "${E.id}"`}),od.has(E.kind)&&N===0&&i.push({level:"error",path:D,code:"RESOURCE_NO_SINK",message:`nothing spends "${E.id}"`});});}var ir=gn("asset-pack"),qr=gn("link"),sd=(e,s="en")=>e.names[s]??e.names.en??e.id;function ad(e,s,t){let i=[],n=t.get(qr,s);if(!n)return i.push({level:"error",path:"link",code:"LINK_UNKNOWN",message:`no link "${s}"`}),{spec:e,systems:[],issues:i};let o=e.modes.find(p=>p.role==="core")??e.modes[0],d=o?t.get(Pn,o.preset)?.genre:void 0;return !d||!n.core.includes(d)?(i.push({level:"error",path:"link",code:"LINK_GENRE",message:`link "${s}" fits ${n.core.join(", ")}, not "${d??"?"}"`}),{spec:e,systems:[],issues:i}):{spec:n.apply(e),systems:n.systems,issues:i}}var Jr=1,fc=Object.freeze({window:"round",adMultiplier:3,vipMultiplier:5}),id={};function pc(e,s){let t={...e},i=t.v===void 0?1:t.v;if(typeof i!="number"||!Number.isInteger(i)||i<1)return s.push({level:"error",path:"v",code:"SPEC_VERSION",message:"v must be an integer \u2265 1"}),null;if(i>Jr)return s.push({level:"error",path:"v",code:"SPEC_TOO_NEW",message:`spec v${i} is newer than this kit (v${Jr})`}),null;for(;i<Jr;){let n=id[i];if(!n)return s.push({level:"error",path:"v",code:"SPEC_NO_MIGRATION",message:`no migration from v${i}`}),null;t=n(t),i++;}return t.v=Jr,t}var ba=/^[a-z][a-z0-9_]*$/,cd=/^#[0-9a-fA-F]{6}(?:[0-9a-fA-F]{2})?$/,ld=/^[a-z]{2}(?:-[A-Z]{2})?$/,dd=/^[a-z][a-z0-9_.-]*$/,dc=["none","async","coop","pvp"],_t=e=>e!==null&&typeof e=="object"&&!Array.isArray(e),Yr=e=>Array.isArray(e)?e:[];function fd(e,s){let t=[];if(!_t(e))return t.push({level:"error",path:"",code:"SPEC_SHAPE",message:"a spec must be an object"}),{ok:false,issues:t};let i$1=pc(e,t);if(!i$1)return {ok:false,issues:t};let n=i$1;Io.includes(n.engine)||t.push({level:"error",path:"engine",code:"SPEC_ENGINE",message:`engine is one of ${Io.join(", ")}`});let o=Yr(n.modes);o.length===0&&t.push({level:"error",path:"modes",code:"SPEC_NO_MODES",message:"a game needs at least one mode"});let d=new Set,p=[];o.forEach((F,ie)=>{let Q=`modes.${ie}`;if(!_t(F)){t.push({level:"error",path:Q,code:"MODE_SHAPE",message:"a mode must be an object"});return}typeof F.id!="string"||!ba.test(F.id)?t.push({level:"error",path:`${Q}.id`,code:"MODE_ID",message:"mode id: snake_case, starts with a letter"}):d.has(F.id)?t.push({level:"error",path:`${Q}.id`,code:"MODE_DUPLICATE",message:`mode "${F.id}" is defined twice`}):d.add(F.id);let re=typeof F.preset=="string"?s.get(Pn,F.preset):void 0;if(!re){t.push({level:"error",path:`${Q}.preset`,code:"MODE_PRESET_UNKNOWN",message:`no preset "${String(F.preset)}"`});return}re.engine!==n.engine&&t.push({level:"error",path:`${Q}.preset`,code:"MODE_ENGINE",message:`preset "${re.id}" runs on ${re.engine}, the spec on ${String(n.engine)}`}),F.role!==void 0&&!["core","meta","embedded"].includes(F.role)&&t.push({level:"error",path:`${Q}.role`,code:"MODE_ROLE",message:"role is core, meta or embedded"});let _e=Po(re.params??{},_t(F.params)?F.params:void 0,`${Q}.params`,t),me={},ke=new Set(re.blocks);for(let he of re.blocks){let se=s.get(Ln,he);if(!se){t.push({level:"error",path:`${Q}.preset`,code:"PRESET_BLOCK_UNKNOWN",message:`preset "${re.id}" uses unknown block "${he}"`});continue}se.engines&&!se.engines.includes(re.engine)&&t.push({level:"error",path:`${Q}.preset`,code:"BLOCK_ENGINE",message:`block "${he}" is not drawn by ${re.engine}`});for(let Pe of se.requires??[])ke.has(Pe)||t.push({level:"error",path:`${Q}.preset`,code:"BLOCK_REQUIRES",message:`block "${he}" needs "${Pe}" in the same preset`});let De={};for(let[Pe,K]of Object.entries(re.blockParams?.[he]??{})){let Ee=se.params?.[Pe];if(typeof K=="string"&&(Ee?.type==="number"||Ee?.type==="boolean"))try{let q=nn(K).eval({params:_e});De[Pe]=Ee.type==="number"?Number(q):!!q;}catch(q){t.push({level:"error",path:`${Q}.preset`,code:"PRESET_FORMULA",message:`preset "${re.id}", ${he}.${Pe}: ${q.message}`});}else De[Pe]=K;}let We={...De,..._t(F.blockParams)&&_t(F.blockParams[he])?F.blockParams[he]:{}};me[he]=Po(se.params??{},We,`${Q}.blockParams.${he}`,t);}if(_t(F.blockParams))for(let he of Object.keys(F.blockParams))ke.has(he)||t.push({level:"warning",path:`${Q}.blockParams.${he}`,code:"BLOCK_NOT_IN_PRESET",message:`preset "${re.id}" has no block "${he}"`});let fe=[...re.rules??[],...Yr(F.rules)];Lo(fe,s,`${Q}.rules`,t),p.push({id:F.id,role:F.role??(ie===0?"core":"meta"),preset:re,params:_e,blockParams:me,rules:fe});}),o.length>0&&!o.some((F,ie)=>_t(F)?(F.role??(ie===0?"core":"meta"))==="core":false)&&t.push({level:"error",path:"modes",code:"SPEC_NO_CORE",message:"one mode must be the core (what the player plays)"});let E=Yr(n.resources),O=new Set;E.forEach((F,ie)=>{let Q=`resources.${ie}`;if(!_t(F)||typeof F.id!="string"||!ba.test(F.id)){t.push({level:"error",path:Q,code:"RESOURCE_ID",message:"resource id: snake_case, starts with a letter"});return}O.has(F.id)&&t.push({level:"error",path:`${Q}.id`,code:"RESOURCE_DUPLICATE",message:`resource "${F.id}" is defined twice`}),O.add(F.id),["currency","item","score","local"].includes(F.kind)||t.push({level:"error",path:`${Q}.kind`,code:"RESOURCE_KIND",message:"kind is currency, item, score or local"}),(F.kind==="currency"||F.kind==="item")&&F.ref!==void 0&&(typeof F.ref!="string"||F.ref.length===0)&&t.push({level:"error",path:`${Q}.ref`,code:"RESOURCE_REF",message:"ref is the engine currency or item id"});});let D=Yr(n.flows);D.forEach((F,ie)=>{if(typeof F?.amount=="string"){let Q=ua(F.amount);Q&&t.push({level:"error",path:`flows.${ie}.amount`,code:"FLOW_FORMULA",message:Q});}}),ga(o.filter(_t),E.filter(F=>_t(F)&&typeof F.id=="string"),D.filter(_t),t);let T=Yr(n.rules);Lo(T,s,"rules",t);let N={};if(n.vars!==void 0)if(!_t(n.vars))t.push({level:"error",path:"vars",code:"VARS_SHAPE",message:"vars must be an object"});else for(let[F,ie]of Object.entries(n.vars))ba.test(F)?typeof ie=="number"||typeof ie=="string"||typeof ie=="boolean"?N[F]=ie:t.push({level:"error",path:`vars.${F}`,code:"VAR_TYPE",message:"a var is a number, text or true/false"}):t.push({level:"error",path:`vars.${F}`,code:"VAR_NAME",message:"var name: snake_case"});let w=typeof n.assets=="string"&&n.assets?s.get(ir,n.assets):void 0;if(n.assets!==void 0&&!w&&t.push({level:"warning",path:"assets",code:"ASSETS_UNKNOWN",message:`no asset pack "${String(n.assets)}"; the default look is used`}),n.palette!==void 0)if(!_t(n.palette))t.push({level:"error",path:"palette",code:"PALETTE_SHAPE",message:"palette must be an object"});else for(let[F,ie]of Object.entries(n.palette))(typeof ie!="string"||!cd.test(ie))&&t.push({level:"warning",path:`palette.${F}`,code:"PALETTE_COLOR",message:"a colour is #rrggbb or #rrggbbaa; ignored"});if(n.texts!==void 0)if(!_t(n.texts))t.push({level:"error",path:"texts",code:"TEXTS_SHAPE",message:"texts must be an object"});else for(let[F,ie]of Object.entries(n.texts)){if(dd.test(F)||t.push({level:"error",path:`texts.${F}`,code:"TEXT_KEY",message:"text key: lower case, digits, _ . -"}),!_t(ie)){t.push({level:"error",path:`texts.${F}`,code:"TEXT_SHAPE",message:"a text is { lang: text }"});continue}for(let[Q,re]of Object.entries(ie))(!ld.test(Q)||typeof re!="string")&&t.push({level:"error",path:`texts.${F}.${Q}`,code:"TEXT_LANG",message:"language code like en or pt-BR, value text"});ie.en===void 0&&t.push({level:"warning",path:`texts.${F}`,code:"TEXT_NO_EN",message:"no English text: other languages fall back to it"});}let W={...fc};if(n.rewards!==void 0)if(!_t(n.rewards))t.push({level:"error",path:"rewards",code:"REWARDS_SHAPE",message:"rewards must be an object"});else {let F=(Q,re,_e)=>{let me=n.rewards[Q];if(me===void 0)return;if(typeof me!="number"||!Number.isFinite(me)){t.push({level:"warning",path:`rewards.${Q}`,code:"PARAM_TYPE",message:"expected a number, default used"});return}let ke=Math.min(Math.max(me,re),_e);ke!==me&&t.push({level:"warning",path:`rewards.${Q}`,code:"PARAM_CLAMPED",message:`${me} \u2192 ${ke}`}),W[Q]=ke;};F("adMultiplier",1,10),F("vipMultiplier",1,20);let ie=n.rewards.window;ie!==void 0&&(typeof ie=="string"&&/^[A-Za-z0-9_-]{1,64}$/.test(ie)?W.window=ie:t.push({level:"warning",path:"rewards.window",code:"PARAM_TYPE",message:"expected a window id, default used"}));}let te=n.multiplayer??"none";dc.includes(te)||t.push({level:"error",path:"multiplayer",code:"SPEC_MULTIPLAYER",message:`multiplayer is one of ${dc.join(", ")}`});let ue=!ya(t);return {ok:ue,issues:t,spec:n,...ue?{resolved:{spec:n,engine:n.engine,seed:typeof n.seed=="string"&&n.seed.length>0?n.seed:"game",modes:p,resources:E,flows:D,rules:T,vars:N,rewards:W,multiplayer:te,palette:i({...w?.palette,..._t(n.palette)?n.palette:{}}),texts:pd(w?.texts,_t(n.texts)?n.texts:void 0),look:{style:w?w.style??w.id:m.style,cast:{...l,...w?.cast}}}}:{}}}function pd(e,s){let t={};for(let i of [e,s])for(let[n,o]of Object.entries(i??{}))if(o&&typeof o=="object")for(let[d,p]of Object.entries(o))typeof p=="string"&&((t[n]??={})[d]=p);return t}function ud(){let e=Oo();return Kr(e),e}function md(e,s,t,i={}){let n=e.modes.find(p=>p.id===s);if(!n)throw new Error(`game: no mode "${s}"`);let o=new c({seed:`${e.seed}/${n.id}${i.salt!==void 0?`/${i.salt}`:""}`,vars:e.vars});for(let p of n.preset.blocks)t.require(Ln,p).setup?.({world:o,spec:e,mode:n,params:n.blockParams[p]??{},registry:t});let d=ha(o,[...n.rules,...e.rules],t,{...i.onRuleError?{onError:i.onRuleError}:{}});return o.emit("mode-started",{mode:n.id}),o.flushEvents(),{world:o,mode:n,stop:d}}var Ie=e=>({w:Number(e.vars.view_w??720),h:Number(e.vars.view_h??1280)}),qe=e=>e.vars.state==="playing",In=e=>e.vars.started_tick===e.tick,we=(e,s,t)=>{let i=Number(e.vars[s]??0)+t;return e.vars[s]=i,i},qt=(e,s)=>Number(e[s]);function xt(e$1,s,t,i,n){let o=e$1.create();return e$1.set(o,e,{x:s,y:t}),e$1.set(o,f,i),n&&e$1.set(o,n.type,n.data),o}var et=(e,s)=>{for(let t of e.query(s))e.destroy(t);};function fr(e){let s=new Set,t={down:false,x:0,y:0};return e.on(j,i=>{let n=i;n.type==="key"?s.add(n.key):n.type==="key-up"?s.delete(n.key):n.type==="press"||n.type==="move"?(t.down=true,t.x=n.x,t.y=n.y):n.type==="release"&&(t.down=false);}),{keys:s,pointer:t,axis(){return {x:(s.has("right")?1:0)-(s.has("left")?1:0),y:(s.has("down")?1:0)-(s.has("up")?1:0)}}}}function Cn(e,s,t,i){let n=e.h*(i.bottom-i.top),o=Math.floor(Math.min(e.w*(i.widthShare??.94)/s,n/t)),d=(e.w-o*s)/2,p=e.h*i.top+(n-o*t)/2;return {cols:s,rows:t,cell:o,left:d,top:p}}var Ye=(e,s,t)=>({x:e.left+e.cell*(s+.5),y:e.top+e.cell*(t+.5)});function bn(e,s,t){let i=Math.floor((s-e.left)/e.cell),n=Math.floor((t-e.top)/e.cell);return i>=0&&i<e.cols&&n>=0&&n<e.rows?{col:i,row:n}:null}var hc=["piece1","piece2","piece3","piece4","piece5","piece6"];b("kit.status");var No=e=>{let s=Math.max(0,Math.ceil(e));return `${Math.floor(s/60)}:${String(s%60).padStart(2,"0")}`},B=(e,s)=>e.emit(n,s),dr=b("kit.backdrop");function Et(e,s,t,i={}){for(let D of e.query(dr))e.destroy(D);let n=Ie(e),o=(D,T,N,w)=>xt(e,T,N,w,{type:dr,data:{speed:D}});if(s==="top"){let D=i.pan?1:0;o(D,n.w/2,n.h/2,{shape:"tile",art:"floor",w:n.w,h:n.h,unit:Math.min(n.w,n.h)*.24,depth:-100});let T=e.rng.stream("backdrop"),N=Math.round(n.w*n.h/52e3),w=Math.min(n.w,n.h);for(let W=0;W<N;W++){let te=w*T.range(.06,.1);o(D,T.range(0,n.w),T.range(0,n.h),{shape:"sprite",art:`decor${T.int(1,4)}`,w:te,h:te,depth:-95});}return}let d=t??n.h*.62;o(0,n.w/2,n.h/2,{shape:"sprite",art:"sky",w:n.w,h:n.h,depth:-100});let p=Math.min(n.w,n.h)*.34;o(.02,n.w*.74,d*.3,{shape:"sprite",art:"sun",w:p,h:p,depth:-99});let E=Math.min(n.h*.32,n.w*.55);o(.12,n.w/2,d-E/2,{shape:"tile",art:"far",w:n.w,h:E,depth:-90});let O=E*.62;o(.4,n.w/2,d-O/2+2,{shape:"tile",art:"near",w:n.w,h:O,depth:-80}),s==="board"?o(0,n.w/2,(n.h+d)/2,{shape:"tile",art:"ground",w:n.w,h:n.h-d+4,unit:E*.7,depth:-79}):o(0,n.w/2,(n.h+d)/2,{shape:"rect",w:n.w,h:n.h-d,color:"#140f0c",alpha:.92,depth:-79});}function Zr(e,s){for(let t of e.query(dr)){let i=e.need(t,dr).speed;if(i<=0)continue;let n=e.need(t,f);n.shape==="tile"&&(n.scrollX=(n.scrollX??0)+s*i);}}function yc(e$1,s,t){let i=Ie(e$1),n=Math.min(i.w,i.h)*.1;for(let o of e$1.query(dr)){if(e$1.need(o,dr).speed<=0)continue;let d=e$1.need(o,f);if(d.shape==="tile"){d.scrollX=(d.scrollX??0)+s,d.scrollY=(d.scrollY??0)+t;continue}let p=e$1.need(o,e);p.x-=s,p.y-=t,p.x<-n?p.x+=i.w+2*n:p.x>i.w+n&&(p.x-=i.w+2*n),p.y<-n?p.y+=i.h+2*n:p.y>i.h+n&&(p.y-=i.h+2*n);}}function Je(e,s,t){let i=e.get(s,f);i?.shape==="actor"&&(i.pose=t);}function Be(e,s,t){let i=e.get(s,f);i?.shape==="actor"&&(i.act=t,i.actN=(i.actN??0)+1);}var lr=b("kit.fading"),uc=new WeakSet;function Fn(e,s,t){e.set(s,lr,{left:t,total:t}),!uc.has(e)&&(uc.add(e),e.addSystem({id:"kit.fading",order:90,run(i,n){for(let o of i.query(lr)){let d=i.need(o,lr);d.left-=n;let p=i.get(o,f);p&&(p.alpha=Math.max(0,Math.min(1,d.left/d.total*2))),d.left<=0&&i.destroy(o);}}}));}var zt=(e,s,t=5)=>t+s/Math.max(1,Ie(e).h),cr=b("kit.hint"),mc=new WeakSet,Co=(e,s,t)=>({x:e+t*.11,y:s+t*.42});function ft(e$1,s,t,i=t,n){St(e$1);let o=n??Math.min(Ie(e$1).w,Ie(e$1).h)*.13,d={kind:s,ax:t.x,ay:t.y,bx:i.x,by:i.y,size:o,t:0},p=Co(t.x,t.y,o);xt(e$1,t.x,t.y,{shape:"circle",r:o*.22,color:"#ffffff",alpha:0,depth:89},{type:cr,data:{...d,part:"ring"}}),xt(e$1,p.x,p.y,{shape:"sprite",art:"hand",w:o,h:o,alpha:0,depth:90},{type:cr,data:{...d,part:"hand"}}),!mc.has(e$1)&&(mc.add(e$1),e$1.addSystem({id:"kit.hints",order:95,run(E,O){for(let D of E.query(cr)){let T=E.need(D,cr);T.t+=O;let N=E.need(D,e),w=E.need(D,f);if(T.kind==="tap"){let W=T.t%1.2/1.2,te=W>.35&&W<.55;if(T.part==="hand"){let ue=Co(T.ax,T.ay+(te?T.size*.06:0),T.size);N.x=ue.x,N.y=ue.y,N.scale=te?.9:1,w.alpha=Math.min(1,T.t*4);}else {let ue=W<.4?0:(W-.4)/.6;N.scale=1+ue*2.2,w.alpha=W<.4?0:.55*(1-ue);}}else if(T.kind==="swipe"){let W=T.t%1.6/1.6,te=W<.15?0:W>.75?1:(W-.15)/.6,ue=te*te*(3-2*te),F=T.ax+(T.bx-T.ax)*ue,ie=T.ay+(T.by-T.ay)*ue;if(T.part==="hand"){let Q=Co(F,ie,T.size);N.x=Q.x,N.y=Q.y,w.alpha=W<.1?W*10:W>.85?Math.max(0,(1-W)/.15):1;}else N.x=F,N.y=ie,w.alpha=W>.15&&W<.8?.35:0;}else {let W=T.t*3,te=T.ax+Math.cos(W)*T.bx,ue=T.ay+Math.sin(W)*T.bx;if(T.part==="hand"){let F=Co(te,ue,T.size);N.x=F.x,N.y=F.y,w.alpha=Math.min(1,T.t*3);}else N.x=te,N.y=ue,w.alpha=.3;}}}}));}function St(e){for(let s of e.query(cr))e.destroy(s);}var rn=e=>e.query(cr).length>0,pt=(e,s)=>e.vars[`learned:${s}`]===true;function mt(e,s){pt(e,s)||(e.vars[`learned:${s}`]=true,St(e));}var pr=b("round.start"),At="round-started",Lt="round-over",Pt="round-ended",xa="start-round",It="show-start",Wt="revive-offer",$t="revive",Bt="give-up",zo={id:"round",version:1,setup({world:e$1}){e$1.vars.state="ready",e$1.vars.score=0,e$1.vars.coins=0,e$1.vars.best=typeof e$1.vars.best=="number"?e$1.vars.best:0,e$1.vars.round=0;let s=i=>{for(let p of i.query(pr))i.destroy(p);if(i.vars.state!=="ready")return;let n=Ie(i),o=Math.min(n.w,n.h)*.26,d={x:n.w/2,y:n.h*.55};xt(i,n.w/2,n.h/2,{shape:"rect",w:n.w,h:n.h,color:"#05040a",alpha:.4,depth:84},{type:pr,data:{t:-1}}),xt(i,d.x,d.y,{shape:"sprite",art:"play",w:o,h:o,color:"accent",depth:85},{type:pr,data:{t:0}}),ft(i,"tap",{x:d.x+o*.12,y:d.y+o*.1});},t=()=>{for(let i of e$1.query(pr))e$1.destroy(i);St(e$1),e$1.vars.state="playing",e$1.vars.score=0,e$1.vars.coins=0,e$1.vars.round=Number(e$1.vars.round??0)+1,e$1.vars.started_tick=e$1.tick,e$1.emit(At,{round:e$1.vars.round});};e$1.on(j,i=>{let n=i;e$1.vars.state==="ready"&&(n.type==="tap"||n.type==="key"&&n.key==="action")&&t();}),e$1.on(xa,()=>{e$1.vars.state!=="playing"&&t();}),e$1.on(It,()=>{e$1.vars.state==="ended"&&(e$1.vars.state="ready",s(e$1));}),e$1.on(k,()=>s(e$1)),e$1.addSystem({id:"round.start",order:96,run(i,n){for(let o of i.query(pr)){let d=i.need(o,pr);d.t<0||(d.t+=n,i.need(o,e).scale=1+.06*Math.sin(d.t*5));}}}),s(e$1),e$1.on(Lt,i=>{if(e$1.vars.state!=="playing")return;e$1.vars.state="ended",St(e$1);let n=Number(e$1.vars.score??0),o=Math.max(Number(e$1.vars.best??0),n);e$1.vars.best=o,e$1.emit(Pt,{score:n,coins:Number(e$1.vars.coins??0),best:o,reason:typeof i.reason=="string"?i.reason:"over",...i.stats&&typeof i.stats=="object"?{stats:i.stats}:{}});});}};var Wo=["wall","barrier","pit","mover","train","rock"];var eo=["magnet","shield","double","dash","flight"],on={magnet:{art:"magnet",color:"danger",seconds:6,var:"meta:magnet_t",weight:3},shield:{art:"shield",color:"muted",seconds:8,var:"meta:shield_t",weight:2.5},double:{art:"coin2x",color:"coin",seconds:8,var:"meta:double_t",weight:2.5},dash:{art:"boot",color:"accent",seconds:2.5,var:"meta:dash_t",weight:1.5},flight:{art:"wing",color:"secondary",seconds:4,var:"meta:flight_t",weight:1}},Qr=20,gc={wall:1,barrier:2,pit:3,mover:4,train:5,rock:6};function ur(e,s=.5){let t=Math.max(1,Math.min(Qr,Math.floor(e))),i=(t-1)/(Qr-1),n=Wo.filter(p=>gc[p]<=t),o=Wo.find(p=>gc[p]===t)??null,d=330+s*120+i*220;return {level:t,length:Math.round(16e3+(t-1)*3e3),speed:d,topSpeed:d*(1.25+i*.1),density:Math.min(.72,.3+s*.12+i*.3),kinds:n,fresh:o,coinStar:.6,firstClearGold:60+(t-1)*25}}var mr=e=>Math.floor(e/30),hr=[{id:"hero",cast:"hero",gems:0,perk:"none"},{id:"hero2",cast:"hero2",gems:150,perk:"heart"},{id:"hero3",cast:"hero3",gems:300,perk:"power"}],va="kit-runner",ka=[{id:"MagnetTime",var:"meta:magnet_t",art:"magnet",color:"danger",perLevel:.6,unit:"s",maxLevel:15,price:20,growth:.12},{id:"ShieldTime",var:"meta:shield_t",art:"shield",color:"muted",perLevel:.8,unit:"s",maxLevel:15,price:25,growth:.12},{id:"DoubleTime",var:"meta:double_t",art:"coin2x",color:"coin",perLevel:.8,unit:"s",maxLevel:15,price:25,growth:.12},{id:"DashTime",var:"meta:dash_t",art:"boot",color:"accent",perLevel:.3,unit:"s",maxLevel:15,price:30,growth:.12},{id:"FlightTime",var:"meta:flight_t",art:"wing",color:"secondary",perLevel:.4,unit:"s",maxLevel:15,price:35,growth:.12},{id:"Luck",var:"meta:luck",art:"clover",color:"accent",perLevel:5,unit:"%",maxLevel:20,price:30,growth:.1},{id:"HeadStart",var:"meta:head_start",art:"lightning",color:"primary",perLevel:.4,unit:"s",maxLevel:10,price:50,growth:.15},{id:"Greed",var:"meta:greed",art:"coin",color:"coin",perLevel:2,unit:"%",maxLevel:25,price:40,growth:.1}],bc={game:"runner",character:va,stats:ka,heroes:hr,levels:Qr,firstClearGold:e=>ur(e).firstClearGold,stars:3};var ht=b("runner.item"),xn=b("runner.player"),$o=b("runner.stripe"),xc=b("runner.hud"),Rt=(e,s)=>{let t=Number(e.vars.view_w??720),i=Number(e.vars.view_h??1280),n=Math.min(i*.11,t*.2,i*.5/s),o=i*.6-n*s/2;return {viewW:t,viewH:i,top:o,laneH:n,playerX:Math.min(t*.24,i*.3)}},yr=(e,s)=>e.top+e.laneH*(s+.72),to=(e,s)=>{let t=Number(e.vars[s]??0);return Number.isFinite(t)?t:0},vt={wall:1.3,barrier:.5,mover:1,train:.95,rock:1.05,jump:1.25,flight:1.9},Bo={id:"lane-runner",version:2,engines:["phaser"],requires:["round"],params:{lanes:{type:"number",default:3,min:2,max:5,integer:true},difficulty:{type:"number",default:.5,min:0,max:1},coinRate:{type:"number",default:.7,min:0,max:1},powerRate:{type:"number",default:.22,min:0,max:1},lives:{type:"number",default:3,min:1,max:9,integer:true},coinScore:{type:"number",default:10,min:0,max:1e3,integer:true},graceTime:{type:"number",default:1.2,min:0,max:5},jumpTime:{type:"number",default:.62,min:.3,max:1.5},lengthScale:{type:"number",default:1,min:.05,max:5}},setup({world:e$1,params:s}){let t=R=>qt(s,R),i=t("lanes"),n=e$1.rng.stream("lane-runner"),o=null,d=ur(1,t("difficulty")),p=d.length,E=0,O=0,D=0,T=false,N=false,w=false,W=0,te=0,ue=0,F=0,ie=0,Q=0,re=0,_e=3,me=0,ke=false,fe=new Map,he=new Map,se=()=>hr.find(R=>R.id===e$1.vars["meta:hero"])??hr[0],De=R=>(on[R].seconds+to(e$1,on[R].var))*(se().perk==="power"?1.25:1),We=()=>e$1.vars.reviving===true,Pe=()=>{for(let S of e$1.query($o))e$1.destroy(S);let R=Rt(e$1,i);Et(e$1,"side",R.top+2);for(let S=0;S<i;S++){let v=e$1.create();e$1.set(v,$o,{index:S}),e$1.set(v,e,{x:R.viewW/2,y:R.top+R.laneH*(S+.5)}),e$1.set(v,f,{shape:"tile",art:"road",w:R.viewW,h:R.laneH,unit:R.laneH*1.28,depth:-20+S*.1});}let C=R.viewH-(R.top+R.laneH*i),h=e$1.create();e$1.set(h,$o,{index:-1}),e$1.set(h,e,{x:R.viewW/2,y:R.viewH-C/2+1}),e$1.set(h,f,{shape:"tile",art:"ground",w:R.viewW,h:C+2,unit:R.laneH*1.2,depth:-21});},K=(R,C,h)=>yr(R,C.lane)-C.alt-h/2,Ee=(R,C,h,S,v)=>{let a=R.laneH,f=9+h;switch(C){case "wall":return {v:{shape:"sprite",art:"obstacle",w:S,h:a*vt.wall,depth:f},h:a*vt.wall};case "barrier":return {v:{shape:"sprite",art:"hurdle",w:S,h:a*vt.barrier,depth:f},h:a*vt.barrier};case "pit":return {v:{shape:"sprite",art:"pit",w:S,h:a*.42,depth:-19+h*.1+.05},h:-a*.42};case "mover":return {v:{shape:"actor",cast:"foe",h:a*1.5,pose:"run",facing:-1,depth:f},h:a*1.5};case "train":return {v:{shape:"sprite",art:"wagon",w:S,h:a*vt.train,depth:f},h:a*vt.train};case "ramp":return {v:{shape:"sprite",art:"ramp",w:S,h:a*vt.train,depth:f},h:a*vt.train};case "rock":return {v:{shape:"sprite",art:"shadow",w:S,h:a*.3,alpha:.5,depth:-19+h*.1+.06},h:-a*.3};case "coin":return {v:{shape:"sprite",art:"coin",w:S,h:S,depth:f+.2},h:S};case "power":return {v:{shape:"sprite",art:on[v??"magnet"].art,color:on[v??"magnet"].color,w:S,h:S,depth:f+.2},h:S};case "finish":return {v:{shape:"sprite",art:"finish",w:a*.7,h:a*i+a*.9,depth:8},h:0}}},q=(R,C,h,S={})=>{let v=Rt(e$1,i),a=S.size??(R==="coin"?v.laneH*.42:R==="power"?v.laneH*.62:v.laneH*.85),f$1=S.alt??(R==="coin"?v.laneH*.5:R==="power"?v.laneH*.6:0),m=e$1.create();e$1.set(m,ht,{lane:C,kind:R,size:a,alt:f$1,...S.power!==void 0?{power:S.power}:{}});let{v:y,h:P}=Ee(v,R,C,a,S.power),z=v.viewW+v.laneH+a/2+h,I=R==="finish"?v.top+v.laneH*i/2:P<0?yr(v,C)+P/2+v.laneH*.08:K(v,{lane:C,alt:f$1},P);return e$1.set(m,e,{x:z,y:I}),e$1.set(m,f,y),R==="coin"&&F++,m},ve=(R,C,h,S)=>{let v=Rt(e$1,i);for(let a=0;a<h;a++)q("coin",R,C+a*v.laneH*.75,S!==void 0?{alt:S}:{});},xe=(R,C)=>{let h=1+to(e$1,"meta:luck");n.chance(Math.min(.9,t("powerRate")*h))&&q("power",R,C,{power:n.weighted(eo,S=>on[S].weight)});},ye=R=>d.kinds.includes(R),Ae=()=>[...Array(i).keys()],He=R=>{let C=["wall",...ye("barrier")?["barrier"]:[],...ye("pit")?["pit"]:[]],h=new Map;for(let a of Ae())n.chance(d.density)&&h.set(a,n.pick(C));h.size>=i&&h.delete(n.int(0,i-1));let S=Rt(e$1,i);for(let[a,f]of h)q(f,a,R,f==="pit"?{size:S.laneH*1.25}:{});let v=Ae().filter(a=>!h.has(a));v.length>0&&n.chance(t("coinRate"))&&ve(n.pick(v),R-S.laneH,3);for(let[a,f]of h)(f==="barrier"||f==="pit")&&n.chance(.5)&&ve(a,R-S.laneH*.75,3,S.laneH*1.3);},Z=()=>{let C=Rt(e$1,i).laneH,h=v=>v+Math.round(d.density*3),S=[{id:"scatter",weight:3,make:v=>{let a=h(2);for(let f=0;f<a;f++)He(f*v);return xe(n.int(0,i-1),a*v-v/2),a*v}},{id:"rest",weight:1,make:v=>{let a=n.int(0,i-1);for(let f=0;f<4;f++)ve(a,f*v*.8,3),a=Math.max(0,Math.min(i-1,a+(n.chance(.5)?1:-1)));return xe(a,4*v*.8),4*v*.8}}];return d.level>=3&&S.push({id:"corridor",weight:2,make:v=>{let a=h(3),f=n.int(0,i-1);for(let m=0;m<a;m++){for(let y of Ae())y!==f&&q("wall",y,m*v);ve(f,m*v-C*.4,2),m%2===1&&(f=Math.max(0,Math.min(i-1,f+(n.chance(.5)?1:-1))));}return a*v}}),(ye("barrier")||ye("pit"))&&S.push({id:"hurdles",weight:2,make:()=>{let v=Math.max(C*3.6,d.speed*t("jumpTime")*1.45),a=2+Math.round(d.density*2),f=[...ye("barrier")?["barrier"]:[],...ye("pit")?["pit"]:[]],m=n.int(0,i-1);for(let y=0;y<a;y++){for(let P of Ae()){let z=n.pick(f);q(z,P,y*v,z==="pit"?{size:C*1.25}:{});}ve(m,y*v-C*.75,3,C*1.3);}return a*v}}),ye("train")&&S.push({id:"train",weight:2,make:v=>{let a=n.int(0,i-1),f=C*n.int(5,8),m=n.chance(.75),y=C*1.4;m&&q("ramp",a,0,{size:y}),q("train",a,(m?y:0)+f/2-C*.42,{size:f}),m&&ve(a,y+C*.4,Math.floor(f/(C*.75))-1,C*(vt.train+.5));let P=Ae().filter(I=>I!==a),z=n.pick(P);if(n.chance(.5))q("train",z,v*.5+f/2,{size:f*.8});else for(let I=0;I<2;I++)q("wall",z,v*(.5+I*1.4));return (m?y:0)+f+v*.5}}),ye("mover")&&S.push({id:"movers",weight:1.5,make:v=>{let a=1+(n.chance(d.density)?1:0),f=new Set;for(let y=0;y<a;y++){let P=n.int(0,i-1);f.has(P)&&(P=(P+1)%i),f.add(P),q("mover",P,y*v*1.6,{size:C*.6});}let m=Ae().filter(y=>!f.has(y));return m.length>0&&ve(n.pick(m),0,4),a*v*1.6}}),ye("rock")&&S.push({id:"rocks",weight:1.5,make:v=>{let a=2+(n.chance(d.density)?1:0);for(let f=0;f<a;f++){let m=n.int(0,i-1);q("rock",m,f*v*1.2,{size:C*.9});let y=Ae().filter(P=>P!==m);ve(n.pick(y),f*v*1.2,2);}return a*v*1.2}}),S},be=R=>{let C=Rt(e$1,i),h=Math.floor(i/2),S=d.fresh;if(S===null||S==="wall")return 0;if(S==="barrier"||S==="pit"){for(let v=0;v<3;v++)q(S,h,v*R*1.6,S==="pit"?{size:C.laneH*1.25}:{}),ve(h,v*R*1.6-C.laneH*.75,3,C.laneH*1.3);return 3*R*1.6}return S==="train"?(q("ramp",h,0,{size:C.laneH*1.4}),q("train",h,C.laneH*1.4+C.laneH*3-C.laneH*.42,{size:C.laneH*6}),ve(h,C.laneH*1.8,7,C.laneH*(vt.train+.5)),C.laneH*8+R):(q(S,h,0,{size:S==="mover"?C.laneH*.6:C.laneH*.9}),R*1.5)},tt=()=>{let R=Math.max(Rt(e$1,i).laneH*2.1,300-d.density*110),C;if(!ke&&d.fresh!==null&&d.fresh!=="wall")ke=true,C=be(R);else {let h=Z();C=(D>0&&D%4===3?h.find(v=>v.id==="rest"):n.weighted(h,v=>v.weight)).make(R);}D++,O=Number(e$1.vars.distance??0)+C+R*1.2;},Se=(R,C,h)=>{let S=R.laneH*1.05;return {x:R.playerX,y:yr(R,C)-h-S/2,h:S}},nt=()=>{let R=Rt(e$1,i);(o===null||!e$1.isAlive(o))&&(o=e$1.create(),e$1.set(o,xn,{lane:Math.floor(i/2),size:R.laneH*.5,alt:0,vy:0}),e$1.set(o,f,{shape:"actor",cast:se().cast,h:0,pose:"idle",depth:10}));let C=e$1.need(o,xn);C.size=R.laneH*.5;let h=Se(R,C.lane,C.alt);e$1.set(o,e,{x:h.x,y:h.y});let S=e$1.need(o,f);S.shape==="actor"&&(S.cast=se().cast,S.h=h.h,S.depth=10+C.lane);},rt=()=>{for(let C of e$1.query(ht))e$1.destroy(C);lt(),d=ur(to(e$1,"meta:chapter")||1,t("difficulty")),p=Math.round(d.length*t("lengthScale")),_e=t("lives")+(se().perk==="heart"?1:0),e$1.vars.distance=0,e$1.vars.meters=0,e$1.vars.level_length=p,e$1.vars.runner_length_scale=t("lengthScale"),e$1.vars.runner_level=d.level,e$1.vars.speed=d.speed,e$1.vars.lives=_e,e$1.vars.coins=0,e$1.vars.score=0,e$1.vars.mult=1,e$1.vars.stars=0,e$1.vars.reviving=false,E=0,O=Rt(e$1,i).laneH*2,D=0,T=false,N=false,w=false,W=0,te=0,ue=0,F=0,ie=0,Q=0,re=0,me=0,ke=false,fe.clear();let R=to(e$1,"meta:head_start");if(R>0&&fe.set("dash",R),o!==null&&e$1.isAlive(o)){let C=e$1.need(o,xn);C.lane=Math.floor(i/2),C.alt=0,C.vy=0;}nt();},Ze=R=>{if(!qe(e$1)||We()||o===null)return;let C=e$1.need(o,xn),h=Math.min(i-1,Math.max(0,C.lane+R));h!==C.lane&&mt(e$1,"runner-lanes"),C.lane=h;},Ue=()=>{let R=Rt(e$1,i),C=t("jumpTime");return 8*R.laneH*vt.jump/(C*C)},ot=(R,C,h)=>{let S=Rt(R,i),v=S.playerX,a=S.laneH*.22,f=0;for(let m of R.query(ht)){let y=R.need(m,ht);if(y.lane!==C||y.kind!=="train"&&y.kind!=="ramp")continue;let P=R.need(m,e),z=P.x-y.size/2,I=P.x+y.size/2;if(v+a<z||v-a>I)continue;let X=S.laneH*vt.train;if(y.kind==="ramp")f=Math.max(f,X*Math.max(0,Math.min(1,(v-z)/y.size)));else if(h>=X-S.laneH*.12)f=Math.max(f,X);else return null}return f},Ge=()=>{if(!qe(e$1)||We()||o===null||fe.has("flight"))return;let R=e$1.need(o,xn),C=ot(e$1,R.lane,R.alt)??0;R.alt-C>2||(R.vy=Ue()*t("jumpTime")/2,re++,mt(e$1,"runner-jump"),St(e$1),e$1.emit("jumped",{}),Be(e$1,o,"jump"));},bt=()=>{if(pt(e$1,"runner-lanes")||o===null)return;let R=Rt(e$1,i),C=R.playerX+R.laneH*1.6,h=yr(R,Math.floor(i/2))-R.laneH*.4;ft(e$1,"swipe",{x:C,y:h+R.laneH*.5},{x:C,y:h-R.laneH*.9},R.laneH);},Xe=(R,C,h,S)=>{let v=he.get(R);(v===void 0||!e$1.isAlive(v))&&(v=e$1.create(),e$1.set(v,xc,{id:R}),he.set(R,v)),e$1.set(v,e,{x:C,y:h}),e$1.set(v,f,S);},st=R=>{let C=he.get(R);C!==void 0&&e$1.destroy(C),he.delete(R);};function lt(){for(let R of he.values())e$1.destroy(R);he.clear(),et(e$1,xc);}let je=(R,C,h,S,v,a,f,m=41)=>{let y=Math.max(0,Math.min(1,Math.round(a*100)/100));Xe(`${R}:bg`,C,h,{shape:"rect",w:S,h:v,color:"#000000",alpha:.45,radius:v/2,depth:m});let P=Math.max(0,(S-4)*y);P<1?st(`${R}:fill`):Xe(`${R}:fill`,C-(S-4)/2+P/2,h,{shape:"rect",w:P,h:v-4,color:f,radius:(v-4)/2,depth:m+.01});},Fe=R=>{let C=Rt(R,i),h=Math.min(C.viewW,C.viewH),S=C.viewH*.085,v=C.viewW*.66,a=Math.max(10,h*.026),f=Number(R.vars.distance??0)/Math.max(1,p);je("way",C.viewW/2,S,v,a,f,"accent");let m=h*.055;Xe("flag",C.viewW/2+v/2+m*.45,S-m*.25,{shape:"sprite",art:"flag",w:m,h:m,depth:42}),Xe("lvl",C.viewW/2-v/2-h*.05,S,{shape:"text",text:`${d.level}`,size:Math.round(h*.04),color:"text",bold:true,depth:42});let y=S+h*.07,P=h*.05,z=Number(R.vars.lives??0);for(let Oe=0;Oe<_e;Oe++)Xe(`h${Oe}`,C.viewW*.07+Oe*P*1.1,y,{shape:"sprite",art:"heart",w:P,h:P,alpha:Oe<z?1:.25,depth:42});for(let Oe=_e;Oe<10;Oe++)st(`h${Oe}`);let I=h*.045,X=String(R.vars.coins??0);Xe("coin:i",C.viewW*.93-X.length*I*.6-I*.7,y,{shape:"sprite",art:"coin",w:I,h:I,depth:42}),Xe("coin",C.viewW*.93-X.length*I*.6/2,y,{shape:"text",text:X,size:Math.round(I),color:"text",bold:true,depth:42});let ee=Number(R.vars.mult??1);ee>1?Xe("mult",C.viewW*.9,y+I*1.2,{shape:"text",text:`x${ee}`,size:Math.round(I*1.05),color:"coin",bold:true,depth:42}):st("mult");let J=h*.055,Le=0;for(let Oe of eo){let Re=fe.get(Oe);if(Re===void 0){st(`p:${Oe}`),st(`pb:${Oe}:bg`),st(`pb:${Oe}:fill`);continue}let G=C.viewW*.07+Le*J*1.25,ne=y+P*1.25;Xe(`p:${Oe}`,G,ne,{shape:"sprite",art:on[Oe].art,color:on[Oe].color,w:J,h:J,depth:42}),je(`pb:${Oe}`,G,ne+J*.7,J,Math.max(6,h*.011),Re/Math.max(.1,De(Oe)),"coin",42),Le++;}},it=(R,C)=>{if(!qe(R)||N)return;N=true;let h=C==="cleared",S=h?1+(F>0&&ie>=F*d.coinStar?1:0)+(Q===0?1:0):0;R.vars.stars=S,h&&R.vars["meta:first_clear"]===true&&we(R,"coins",d.firstClearGold);let v=mr(Number(R.vars.distance??0));R.vars.score=me+v*2+(h?500*S:0),R.vars.reviving=false,R.emit(Lt,{reason:C,stats:{chapter:d.level,seconds:Math.floor(W),cleared:h,stars:S,coins:ie,meters:v,jumps:re,hits:Q}});},dt=R=>{if(R.vars.revive_ready===true&&!w){R.vars.reviving=true,St(R),R.emit(Wt,{});return}it(R,"crashed");},Tt=R=>{if(!We())return;w=true,R.vars.reviving=false,R.vars.lives=Math.max(1,Math.ceil(_e/2)),E=2.5,fe.set("shield",Math.max(fe.get("shield")??0,3));let C=Rt(R,i);for(let h of R.query(ht)){let S=R.need(h,ht);if(S.kind==="coin"||S.kind==="power"||S.kind==="finish")continue;let v=R.need(h,e);v.x-S.size/2<C.playerX+C.laneH*6&&(B(R,{kind:"burst",x:v.x,y:v.y,color:"coin",n:8,size:C.laneH*.6}),R.destroy(h));}if(o!==null){let h=R.need(o,xn);h.alt=0,h.vy=0,Je(R,o,"run");let S=R.need(o,e);B(R,{kind:"ring",x:S.x,y:S.y,color:"coin",size:C.laneH*4});}B(R,{kind:"flash",color:"coin"});},Ct=(R,C)=>{if(o===null)return;let h=R.need(C,e),S=Rt(R,i);if(fe.has("dash")){B(R,{kind:"burst",x:h.x,y:h.y,color:"accent",n:14,size:S.laneH*.8}),B(R,{kind:"shake",power:.6}),R.need(C,ht).kind!=="pit"&&R.destroy(C);return}if(E>0)return;if(fe.has("shield")){fe.delete("shield"),E=.8,B(R,{kind:"ring",x:S.playerX,y:R.need(o,e).y,color:"muted",size:S.laneH*2}),R.need(C,ht).kind!=="pit"&&R.destroy(C);return}Q++,te=0,R.vars.mult=1;let v=Number(R.vars.lives??1)-1;R.vars.lives=v,R.emit("player-hit",{lives:v}),B(R,{kind:"burst",x:h.x,y:h.y,color:"danger",n:14,size:S.laneH*.9}),B(R,{kind:"shake",power:1.5}),Be(R,o,"hit"),R.need(C,ht).kind!=="pit"&&R.destroy(C),E=t("graceTime"),v<=0&&dt(R);},Nt=(R,C)=>{let h=R.need(C,ht),S=R.need(C,e),v=Rt(R,i);if(h.kind==="power"&&h.power!==void 0){fe.set(h.power,De(h.power)),R.emit("power-up",{id:h.power}),B(R,{kind:"ring",x:S.x,y:S.y,color:on[h.power].color,size:v.laneH*1.6}),R.destroy(C);return}te++;let a=Math.min(5,1+Math.floor(te/12));a>Number(R.vars.mult??1)&&B(R,{kind:"pop",x:v.playerX,y:S.y-v.laneH,text:`x${a}`,color:"coin",size:Math.round(v.laneH*.42)}),R.vars.mult=a;let f=(fe.has("double")?2:1)*(1+to(R,"meta:greed"));ue+=f;let m=Math.floor(ue);ue-=m,m>0&&we(R,"coins",m),ie++,me+=Math.round(f*t("coinScore")*a),R.emit("coin-collected",{value:f}),B(R,{kind:"burst",x:S.x,y:S.y,color:"coin",n:6,size:h.size*1.3}),R.destroy(C);};e$1.on(j,R=>{let C=R;e$1.vars.started_tick!==e$1.tick&&(C.type==="swipe"&&(C.dir==="up"||C.dir==="down")?Ze(C.dir==="up"?-1:1):C.type==="swipe"&&C.dir==="right"?Ge():C.type==="key"&&(C.key==="left"||C.key==="up")?Ze(-1):C.type==="key"&&(C.key==="right"||C.key==="down")?Ze(1):(C.type==="key"&&C.key==="action"||C.type==="tap")&&Ge());}),e$1.on(At,()=>{rt(),o!==null&&Je(e$1,o,"run"),bt();}),e$1.on(It,rt),e$1.on($t,()=>Tt(e$1)),e$1.on(Bt,()=>{We()&&(e$1.vars.reviving=false,it(e$1,"crashed"));}),e$1.on(Pt,R=>{o!==null&&e$1.isAlive(o)&&Je(e$1,o,R.reason==="cleared"?"dance":"die");for(let C of e$1.query(ht))e$1.need(C,ht).kind==="mover"&&Je(e$1,C,"idle");lt();}),e$1.on(k,()=>{Pe(),o!==null&&nt();let R=Rt(e$1,i);for(let C of e$1.query(ht)){let h=e$1.need(C,ht),{v:S,h:v}=Ee(R,h.kind,h.lane,h.size,h.power);e$1.set(C,f,S),e$1.need(C,e).y=h.kind==="finish"?R.top+R.laneH*i/2:v<0?yr(R,h.lane)+v/2+R.laneH*.08:K(R,h,v);}}),e$1.addSystem({id:"lane-runner",order:0,run(R,C){if(!qe(R)||o===null||N||We())return;let h=Rt(R,i),S=h.laneH;W+=C;let v=Number(R.vars.distance??0),f$1=(d.speed+(d.topSpeed-d.speed)*Math.min(1,v/Math.max(1,p)))*(fe.has("dash")?1.6:1);R.vars.speed=Math.round(f$1);let m=f$1*C;R.vars.distance=v+m,R.vars.meters=mr(v+m),E>0&&(E=Math.max(0,E-C));for(let[Re,G]of [...fe])G-C<=0?(fe.delete(Re),Re==="flight"&&(E=Math.max(E,.8))):fe.set(Re,G-C);Zr(R,m);for(let Re of R.query($o)){let G=R.need(Re,f);G.shape==="tile"&&(G.scrollX=(G.scrollX??0)+m);}let y=p-(v+m);if(!T&&y<=h.viewW-h.playerX+S){T=true;let Re=q("finish",0,0);R.need(Re,e).x=h.playerX+y;}else !T&&v>=O&&y>h.viewW&&tt();let P=R.need(o,xn),z=fe.has("flight");if(z)P.alt+=(S*vt.flight-P.alt)*Math.min(1,C*6),P.vy=0,Math.floor((v+m)/(S*.9))!==Math.floor(v/(S*.9))&&q("coin",P.lane,0,{alt:S*(vt.flight+.4)});else {P.vy-=Ue()*C,P.alt+=P.vy*C;let Re=ot(R,P.lane,P.alt);if(Re===null){let G=R.query(ht).find(ne=>{let Te=R.need(ne,ht);return Te.lane===P.lane&&Te.kind==="train"&&Math.abs(R.need(ne,e).x-h.playerX)<Te.size/2+S*.22});if(G!==void 0&&Ct(R,G),N||We())return;P.alt=Math.max(0,P.alt);}else P.alt<=Re&&(P.alt=Re,P.vy=0);}let I=R.need(o,e),X=Se(h,P.lane,P.alt);I.y+=(X.y-I.y)*Math.min(1,C*14),I.x=X.x;let ee=R.need(o,f);ee.shape==="actor"&&(ee.alpha=E>0&&Math.floor(R.time*12)%2===0?.35:1,ee.depth=10+P.lane+.5,ee.speed=f$1,ee.pose=P.alt>2&&P.vy!==0?"air":"run");let J=S*.24,Le=fe.has("magnet"),Oe=P.alt+S*.5;for(let Re of R.query(ht)){if(!R.isAlive(Re)||!R.has(Re,ht))continue;let G=R.need(Re,ht),ne=R.need(Re,e);if(ne.x-=m,G.kind==="mover"){if(ne.x-=f$1*.35*C,G.to===void 0&&ne.x-h.playerX<S*6&&ne.x-h.playerX>S*3){let ce=[G.lane-1,G.lane+1].filter(j=>j>=0&&j<i);G.to=P.lane!==G.lane&&ce.includes(P.lane)?P.lane:n.pick(ce),G.warn=.45;}if(G.warn!==void 0&&G.warn>0){G.warn-=C;let ce=R.need(Re,f);ce.alpha=Math.floor(R.time*14)%2===0?.4:1,G.warn<=0&&G.to!==void 0&&(G.lane=G.to,ce.alpha=1,ce.depth=9+G.lane);}ne.y+=(K(h,G,S*1.5)-ne.y)*Math.min(1,C*10);}if(G.kind==="rock"&&!G.landed&&ne.x-h.playerX<S*2.6&&(G.landed=true,R.set(Re,f,{shape:"sprite",art:"rock",w:G.size,h:S*vt.rock,depth:9+G.lane}),ne.y=yr(h,G.lane)-S*vt.rock/2,B(R,{kind:"burst",x:ne.x,y:ne.y+S*.4,color:"muted",n:10,size:S*.7}),B(R,{kind:"shake",power:.5})),G.kind==="rock"&&!G.landed){let ce=R.need(Re,f);ce.shape==="sprite"&&(ce.alpha=.35+.3*Math.abs(Math.sin(R.time*6)));}if(G.kind==="power"&&(ne.y=K(h,G,G.size)+Math.sin(R.time*4+ne.x*.01)*S*.06),ne.x+G.size/2<-S*2){R.destroy(Re);continue}if(G.kind==="finish"){if(ne.x<=h.playerX){B(R,{kind:"flash",color:"coin"}),it(R,"cleared");return}continue}if(G.kind==="coin"&&Le&&ne.x>h.playerX-S*.5&&ne.x<h.playerX+S*4&&(G.pulled=true),G.kind==="coin"&&G.pulled){ne.x+=(h.playerX-ne.x)*Math.min(1,C*10),ne.y+=(I.y-ne.y)*Math.min(1,C*10),Math.hypot(ne.x-h.playerX,ne.y-I.y)<S*.4&&Nt(R,Re);continue}let Te=G.kind==="barrier"?G.size*.3:G.size/2;if(Math.abs(ne.x-h.playerX)>J+Te||G.lane!==P.lane)continue;if(G.kind==="coin"||G.kind==="power"){(Math.abs(G.alt-Oe)<S*.6||z)&&Nt(R,Re);continue}if(z||G.kind==="ramp"||G.kind==="train"||G.kind==="rock"&&!G.landed)continue;let le=G.kind==="wall"?vt.wall:G.kind==="barrier"?vt.barrier*.85:G.kind==="mover"?vt.mover:G.kind==="rock"?vt.rock:0;if(G.kind==="pit"?P.alt<2&&Math.abs(ne.x-h.playerX)<G.size*.32&&Ct(R,Re):P.alt<S*le&&Ct(R,Re),N||We())return}pt(R,"runner-jump")||R.query(ht).find(G=>{let ne=R.need(G,ht),Te=R.need(G,e).x-h.playerX;return (ne.kind==="barrier"||ne.kind==="pit")&&ne.lane===P.lane&&Te>S*1.5&&Te<S*3.2})!==void 0&&!rn(R)&&ft(R,"tap",{x:h.playerX+S*1.2,y:I.y}),R.vars.score=me+mr(v+m)*2,Fe(R);}}),Pe(),rt();}};var Un=[{id:"rainbow",shape:"color",art:"m3_rainbow",make:e=>e>=5},{id:"bomb",shape:"area:1",art:"m3_bomb",make:(e,s)=>s},{id:"col",shape:"col",art:"m3_col",make:(e,s,t)=>e===4&&t==="h"},{id:"row",shape:"row",art:"m3_row",make:(e,s,t)=>e===4&&t==="v"}],vc=[{a:"row",b:"row",effect:"cross"},{a:"col",b:"col",effect:"cross"},{a:"row",b:"col",effect:"cross"},{a:"bomb",b:"row",effect:"cross:1"},{a:"bomb",b:"col",effect:"cross:1"},{a:"bomb",b:"bomb",effect:"area:2"},{a:"rainbow",b:"plain",effect:"color"},{a:"rainbow",b:"row",effect:"turn"},{a:"rainbow",b:"col",effect:"turn"},{a:"rainbow",b:"bomb",effect:"turn"},{a:"rainbow",b:"rainbow",effect:"all"}],vn={ice:{id:"ice",layer:"under",hp:1,art:"m3_ice",max:20},slime:{id:"slime",layer:"under",hp:1,art:"m3_slime",spreads:true,max:16},chain:{id:"chain",layer:"over",hp:1,art:"m3_chain",max:10},stone:{id:"stone",layer:"block",hp:1,art:"m3_stone",hitByNear:true,max:10},cage:{id:"cage",layer:"block",hp:1,art:"m3_cage",hitByNear:true}},Ea={"-":{},".":{hole:true},i:{under:{id:"ice",hp:1}},I:{under:{id:"ice",hp:2}},m:{under:{id:"slime",hp:1}},c:{over:{id:"chain",hp:1}},s:{block:{id:"stone",hp:1}},S:{block:{id:"stone",hp:2}},g:{block:{id:"cage",hp:1}}},oo={fire:{beats:["nature"],color:"piece1"},water:{beats:["fire"],color:"piece2"},nature:{beats:["water"],color:"piece3"},light:{beats:["dark"],color:"piece4"},dark:{beats:["light"],color:"piece5"}},Sa=[{index:0,art:"gem1",color:"piece1",role:"attack",element:"fire"},{index:1,art:"gem2",color:"piece2",role:"attack",element:"water"},{index:2,art:"gem3",color:"piece3",role:"attack",element:"nature"},{index:3,art:"gem4",color:"piece4",role:"attack",element:"light"},{index:4,art:"gem5",color:"piece5",role:"attack",element:"dark"},{index:5,art:"m3_heart",color:"danger",role:"heal"},{index:6,art:"m3_shield",color:"primary",role:"shield"},{index:7,art:"gem6",color:"piece6",role:"attack"}],so=e=>Sa.find(s=>s.index===e),Ma=[{id:"goblin",cast:"foe5",element:"nature",hp:1,attack:1,every:3,size:.8},{id:"wolf",cast:"foe",element:"nature",hp:.8,attack:.7,every:2,size:.85},{id:"orc",cast:"foe",variant:5,element:"fire",hp:1.4,attack:1.3,every:3,skill:{kind:"sow",obstacle:"stone",count:2},size:.95},{id:"frost-imp",cast:"foe3",element:"water",hp:1,attack:.9,every:3,skill:{kind:"sow",obstacle:"ice",count:3},size:.85},{id:"spider",cast:"foe4",element:"dark",hp:1.1,attack:1,every:3,skill:{kind:"sow",obstacle:"chain",count:3},size:.85},{id:"golem",cast:"foe2",element:"light",hp:2,attack:1.5,every:4,skill:{kind:"sow",obstacle:"stone",count:3},size:1.05},{id:"slime-beast",cast:"foe2",variant:9,element:"water",hp:1.3,attack:1.1,every:3,skill:{kind:"sow",obstacle:"slime",count:2},size:.95},{id:"shaman",cast:"foe4",variant:7,element:"dark",hp:1,attack:.9,every:3,skill:{kind:"heal",share:.15},size:.9},{id:"troll",cast:"boss",element:"nature",hp:3,attack:1.6,every:3,skill:{kind:"sow",obstacle:"stone",count:3},boss:true,enrage:.5,size:1.2},{id:"frost-queen",cast:"boss",variant:4,element:"water",hp:3.5,attack:1.5,every:3,skill:{kind:"sow",obstacle:"ice",count:5},boss:true,enrage:.5,size:1.2},{id:"spider-queen",cast:"boss",variant:9,element:"dark",hp:4,attack:1.7,every:3,skill:{kind:"sow",obstacle:"chain",count:4},boss:true,enrage:.5,size:1.2},{id:"lich",cast:"boss",variant:13,element:"dark",hp:4.5,attack:1.8,every:3,skill:{kind:"sow",obstacle:"slime",count:3},boss:true,enrage:.5,size:1.25}],ao=e=>Ma.find(s=>s.id===e),Ho=100,kc=4,Ec=1.5,Sc=2,Mc=1,_a=[{id:"blast",art:"m3_skill_blast",mana:30,kind:"shape",shape:"area:1",bigShape:"area:2",bigAt:1.5,damage:6},{id:"cross",art:"m3_skill_cross",mana:28,kind:"shape",shape:"cross",bigShape:"cross:1",bigAt:1.5,damage:5},{id:"storm",art:"m3_skill_storm",mana:34,kind:"storm",count:4,damage:4}],Vo=e=>_a.find(s=>s.id===e),gr=[{id:"hero",cast:"hero",gems:0,element:"fire",skill:"blast"},{id:"hero2",cast:"hero2",gems:150,element:"light",skill:"cross"},{id:"hero3",cast:"hero3",gems:300,element:"water",skill:"storm"}],Go={plain:["--------","--------","--------","--------","--------","--------","--------","--------"],diamond:["..----..",".------.","--------","--------","--------","--------",".------.","..----.."],"ice-mid":["--------","--------","--iiii--","--iiii--","--iiii--","--iiii--","--------","--------"],"ice-low":["--------","--------","--------","--------","iiiiiiii","iiiiiiii","IIIIIIII","IIIIIIII"],stones:["--------","--------","--------","ss-ss-ss","--------","--------","--------","--------"],chains:["--------","-c----c-","--c--c--","---cc---","---cc---","--c--c--","-c----c-","--------"],cages:["--------","-g----g-","--------","---gg---","--------","--------","-g----g-","--------"],slime:["--------","--------","--------","--------","--------","--------","mm----mm","mmm--mmm"],hourglass:["--------","--------",".------.","..----..","..----..",".------.","--------","--------"],ring:["--------","--------","--------","---..---","---..---","--------","--------","--------"],"ice-stone":["--------","-S----S-","--IIII--","--IIII--","--IIII--","--IIII--","-S----S-","--------"],fortress:["s------s","-iiiiii-","-i-cc-i-","-ic--ci-","-ic--ci-","-i-cc-i-","-iiiiii-","s------s"],"slime-cages":["-g----g-","--------","--------","---mm---","---mm---","--------","--------","-g----g-"],"cross-holes":["---..---","--------","--------",".------.",".------.","--------","--------","---..---"]},ut=(e,s,t,i,n)=>({kind:"goal",board:e,moves:s,colors:t,goals:i,...n?{drops:n}:{}}),Ht=(e,s,...t)=>({kind:"battle",board:e,elements:s,enemies:t}),Jt=(e,s)=>({kind:"color",color:e,count:s}),yt=e=>({kind:"clear",obstacle:e}),no=e=>({kind:"drops",count:e}),wo=[ut("plain",20,5,[Jt(0,12),Jt(1,12)]),ut("diamond",20,5,[Jt(2,15),Jt(3,15)]),Ht("plain",3,"goblin"),ut("ice-mid",22,5,[yt("ice")]),ut("ring",20,5,[Jt(0,20),Jt(4,20)]),Ht("plain",3,"goblin","wolf"),ut("stones",22,5,[yt("stone"),Jt(1,15)]),ut("ice-low",25,5,[yt("ice")]),Ht("diamond",3,"wolf","orc"),Ht("plain",3,"troll"),ut("chains",24,5,[yt("chain")]),ut("plain",25,5,[no(3)],3),Ht("plain",4,"frost-imp","goblin"),ut("cages",22,5,[yt("cage")]),ut("slime",25,5,[yt("slime")]),Ht("ice-mid",4,"orc","frost-imp"),ut("hourglass",24,5,[no(3),Jt(2,20)],3),ut("ice-low",26,5,[yt("ice")]),Ht("plain",4,"spider","frost-imp","wolf"),Ht("plain",4,"frost-queen"),ut("ice-stone",26,5,[yt("ice"),yt("stone")]),ut("cross-holes",26,6,[Jt(0,20),Jt(3,20)]),Ht("chains",4,"spider","golem"),ut("fortress",28,5,[yt("ice"),yt("chain")]),ut("slime-cages",26,5,[yt("cage"),yt("slime")]),Ht("plain",4,"slime-beast","golem"),ut("diamond",28,5,[no(3)],3),ut("ice-low",28,5,[yt("ice"),Jt(4,20)]),Ht("ring",5,"shaman","golem","spider"),Ht("plain",5,"spider-queen"),ut("fortress",28,6,[yt("ice"),yt("chain")]),ut("slime",28,5,[yt("slime"),no(3)],3),Ht("ice-stone",5,"golem","shaman"),ut("ice-stone",28,6,[yt("ice"),yt("stone")]),ut("slime-cages",28,6,[yt("cage"),yt("slime")]),Ht("plain",5,"slime-beast","shaman","orc"),ut("cross-holes",30,5,[no(3),Jt(1,18)],3),ut("fortress",32,5,[yt("ice"),yt("chain"),Jt(2,15)]),Ht("diamond",5,"golem","shaman","spider"),Ht("plain",5,"lich")],ro=10,_c=4,Fo=wo.length,Ra=[0,18,45,75];function hd(e){return e.kind==="goal"?[0,1,2,3,4,7].slice(0,Math.max(3,Math.min(6,e.colors))):[...[0,1,2,3,4].slice(0,Math.max(2,Math.min(5,e.elements))),5,6]}function br(e,s=.5){let t=Math.max(1,Math.min(Fo,Math.floor(e))),i=wo[t-1],n=Math.ceil(t/ro),o=i.kind==="battle"&&i.enemies.some(d=>ao(d)?.boss);return {level:t,world:n,index:t-(n-1)*ro,def:i,boss:o,colors:hd(i),enemyHp:180*Math.pow(1.07,t-1)*(.8+s*.4),enemyAttack:14*Math.pow(1.06,t-1)*(.8+s*.4),firstClearGold:(o?120:50)+(t-1)*10}}var Da=e=>Ra[Math.ceil(Math.max(1,e)/ro)-1]??0,Ta=(e,s)=>s?e>=.7?3:e>=.35?2:1:e>=.3?3:e>=.1?2:1,Rc=5,Dc=.5,Oa="kit-match3",Aa=[{id:"Attack",var:"meta:attack",art:"m3_skill_blast",color:"danger",perLevel:5,unit:"%",maxLevel:20,price:40,growth:.12},{id:"Health",var:"meta:health",art:"m3_heart",color:"danger",perLevel:6,unit:"%",maxLevel:20,price:40,growth:.12},{id:"Defense",var:"meta:defense",art:"m3_shield",color:"primary",perLevel:5,unit:"%",maxLevel:15,price:45,growth:.12},{id:"SkillPower",var:"meta:skill",art:"m3_skill_cross",color:"secondary",perLevel:8,unit:"%",maxLevel:10,price:50,growth:.12},{id:"ManaGain",var:"meta:mana",art:"m3_skill_storm",color:"secondary",perLevel:5,unit:"%",maxLevel:10,price:50,growth:.12},{id:"Moves",var:"meta:moves",art:"m3_bomb",color:"coin",perLevel:1,unit:"",maxLevel:5,price:120,growth:.2}],Tc={game:"match3",character:Oa,stats:Aa,heroes:gr,levels:Fo,firstClearGold:e=>br(e).firstClearGold,stars:3,starsToEnter:Da};var Ia=()=>({cleared:[],created:[],fired:[],hits:[],spawned:[],dropsCollected:0,slimeCleared:false}),Ca=-1,kn=-2,jo=(e,s,t)=>s>=0&&t>=0&&s<e.cols&&t<e.rows,Nn=(e,s,t)=>jo(e,s,t)?e.cells[t][s]:null,Ko=(e,s)=>s[Math.floor(e.rnd()*s.length)%s.length],Oc=[[1,0],[-1,0],[0,1],[0,-1]],La=e=>e.hole||e.block!==null||e.over!==null,yd=e=>e!==null&&e.color>=0;function qo(e,s,t,i,n=0){let o={cols:e[0].length,rows:e.length,cells:e.map(d=>[...d].map(p=>{let E=i[p]??{};return {hole:E.hole===true,piece:null,under:E.under?{...E.under}:null,over:E.over?{...E.over}:null,block:E.block?{...E.block}:null}})),colors:s,nextId:1,dropsToSpawn:n,rnd:t};return Pa(o),o}var Xo=(e,s,t=null)=>({id:e.nextId++,color:s,special:t});function Pa(e){for(let s=0;s<50;s++){for(let t=0;t<e.rows;t++)for(let i=0;i<e.cols;i++){let n=e.cells[t][i];if(n.hole||n.block||n.piece&&n.piece.color<0||n.piece?.special)continue;let o=new Set,d=Nn(e,i-1,t)?.piece,p=Nn(e,i-2,t)?.piece;d&&p&&d.color>=0&&d.color===p.color&&o.add(d.color);let E=Nn(e,i,t-1)?.piece,O=Nn(e,i,t-2)?.piece;E&&O&&E.color>=0&&E.color===O.color&&o.add(E.color);let D=e.colors.filter(N=>!o.has(N)),T=Ko(e,D.length>0?D:e.colors);n.piece?n.piece.color=T:n.piece=Xo(e,T);}if(xr(Yo(e)).size===0&&vr(e)!==null)return}}function Na(e){for(let s=0;s<e.rows;s++)for(let t=0;t<e.cols;t++){let i=e.cells[s][t].piece;i&&i.color>=0&&!i.special&&!e.cells[s][t].over&&(i.color=-100);}for(let s=0;s<e.rows;s++)for(let t=0;t<e.cols;t++)e.cells[s][t].piece?.color===-100&&(e.cells[s][t].piece.color=Ko(e,e.colors));if(Pa(e),vr(e)===null){for(let s of e.cells)for(let t of s)t.over=null;Pa(e);}}var Yo=e=>e.cells.map(s=>s.map(t=>t.piece&&t.piece.color>=0&&!t.block?t.piece.color:null));function xr(e){let s=new Set;for(let t of Ac(e))for(let[i,n]of t.cells)s.add(`${i},${n}`);return s}function Ac(e){let s=[],t=e.length,i=e[0]?.length??0;for(let n=0;n<t;n++)for(let o=0;o<i;){let d=e[n][o],p=1;for(;d!=null&&o+p<i&&e[n][o+p]===d;)p++;d!=null&&p>=3&&s.push({cells:Array.from({length:p},(E,O)=>[o+O,n]),dir:"h"}),o+=p;}for(let n=0;n<i;n++)for(let o=0;o<t;){let d=e[o][n],p=1;for(;d!=null&&o+p<t&&e[o+p][n]===d;)p++;d!=null&&p>=3&&s.push({cells:Array.from({length:p},(E,O)=>[n,o+O]),dir:"v"}),o+=p;}return s}function za(e){return gd(e)!==null}function gd(e){let s=e.length,t=e[0]?.length??0,i=(n,o)=>{let d=e[n[1]][n[0]];e[n[1]][n[0]]=e[o[1]][o[0]],e[o[1]][o[0]]=d;};for(let n=0;n<s;n++)for(let o=0;o<t;o++)for(let[d,p]of [[1,0],[0,1]]){if(o+d>=t||n+p>=s||e[n][o]===null||e[n+p][o+d]===null)continue;i([o,n],[o+d,n+p]);let E=xr(e).size>0;if(i([o,n],[o+d,n+p]),E)return [[o,n],[o+d,n+p]]}return null}function io(e,s,t){if(Math.abs(s.col-t.col)+Math.abs(s.row-t.row)!==1)return false;let i=Nn(e,s.col,s.row),n=Nn(e,t.col,t.row);if(!i||!n)return false;for(let o of [i,n])if(o.hole||o.block||o.over||!o.piece)return false;return true}function vr(e){let s=Yo(e);for(let t=0;t<e.rows;t++)for(let i=0;i<e.cols;i++)for(let[n,o]of [[1,0],[0,1]]){let d={col:i,row:t},p={col:i+n,row:t+o};if(!io(e,d,p))continue;let E=e.cells[t][i].piece,O=e.cells[p.row][p.col].piece;if(E.color===kn&&O.color===kn)continue;if(E.special==="rainbow"||O.special==="rainbow")return [d,p];if(E.special&&O.special)return [d,p];let D=s[t][i];s[t][i]=s[p.row][p.col],s[p.row][p.col]=D;let T=xr(s).size>0;if(s[p.row][p.col]=s[t][i],s[t][i]=D,T)return [d,p]}return null}function Wa(e){let s=new Map;for(let t=0;t<e.rows;t++)for(let i=0;i<e.cols;i++){let n=e.cells[t][i].piece;n&&s.set(n.id,{col:i,row:t,piece:n});}return s}function Jo(e,s){let t=0;for(let i of e.cells)for(let n of i)for(let o of [n.under,n.over,n.block])o?.id===s&&t++;return t}function $a(e,s,t){if(!io(e,s,t))return null;let i=e.cells[s.row][s.col],n=e.cells[t.row][t.col],o=i.piece,d=n.piece;if(o.special==="rainbow"||d.special==="rainbow"||o.special&&d.special){i.piece=d,n.piece=o;let E=Ia();return kd(e,E,t,o,s,d),wa(e,E),E}i.piece=d,n.piece=o;let p=Lc(e,[s,t]);return p||(i.piece=o,n.piece=d,null)}function Zo(e){return Lc(e,[])}function Qo(e,s,t="skill"){let i=Ia(),n=s.filter(o=>jo(e,o.col,o.row)).map(o=>({...o,match:false}));return s[0]&&i.fired.push({...s[0],kind:t}),Va(e,i,n),wa(e,i),i}function Ba(e,s){let t=[];if(s)return t;let i=Object.values(vn).filter(n=>n.spreads);for(let n of i){let o=[];for(let E=0;E<e.rows;E++)for(let O=0;O<e.cols;O++)e.cells[E][O].under?.id===n.id&&o.push({col:O,row:E});if(o.length===0)continue;let d=[];for(let E of o)for(let[O,D]of Oc){let T=Nn(e,E.col+O,E.row+D);T&&!T.hole&&!T.block&&!T.under&&d.push({col:E.col+O,row:E.row+D});}if(d.length===0)continue;let p=Ko(e,d);e.cells[p.row][p.col].under={id:n.id,hp:1},t.push(p);}return t}function Ha(e,s,t){let i=vn[s];if(!i)return [];let n=[];for(let p=0;p<e.rows;p++)for(let E=0;E<e.cols;E++){let O=e.cells[p][E];O.hole||O.block||!O.piece||O.piece.color<0||O.piece.special||i.layer==="under"&&O.under||i.layer==="over"&&O.over||n.push({col:E,row:p});}let o=[],d=i.max===void 0?t:Math.max(0,i.max-Jo(e,s));for(let p=0;p<Math.min(t,d)&&n.length>0;p++){let E=Math.floor(e.rnd()*n.length)%n.length,O=n.splice(E,1)[0],D=e.cells[O.row][O.col],T={id:s,hp:i.hp};i.layer==="under"?D.under=T:i.layer==="over"?D.over=T:(D.block=T,D.piece=null),o.push(O);}return o}function es(e,s,t){let i=[];for(let o=0;o<e.rows;o++)for(let d=0;d<e.cols;d++){let p=e.cells[o][d].piece;p&&p.color>=0&&!p.special&&!e.cells[o][d].over&&i.push({col:d,row:o});}let n=[];for(let o=0;o<t&&i.length>0;o++){let d=i.splice(Math.floor(e.rnd()*i.length)%i.length,1)[0];e.cells[d.row][d.col].piece.special=e.rnd()<.5?"row":"col",n.push(d);}return n}function Lc(e,s){let t=Ac(Yo(e));if(t.length===0)return null;let i=Ia(),n=[];for(let p of t){let E=new Set(p.cells.map(([T,N])=>`${T},${N}`)),O=n.filter(T=>T.some(N=>N.cells.some(([w,W])=>E.has(`${w},${W}`)))),D=[p,...O.flat()];for(let T of O)n.splice(n.indexOf(T),1);n.push(D);}let o=[],d=[];for(let p of n){let E=new Map;for(let N of p)for(let[w,W]of N.cells)E.set(`${w},${W}`,{col:w,row:W});let O=p.reduce((N,w)=>Math.max(N,w.cells.length),0),D=p.some(N=>N.dir==="h")&&p.some(N=>N.dir==="v"),T=Un.filter(N=>N.make!==null).find(N=>N.make(O,D,p.find(w=>w.cells.length===O).dir));if(T){let N=s.find(W=>E.has(`${W.col},${W.row}`))??(D?bd(p):null)??xd(p.find(W=>W.cells.length===O)),w=e.cells[N.row][N.col].piece?.color??0;d.push({at:N,special:T.id,color:w});}for(let N of E.values())o.push({...N,match:true});}Va(e,i,o);for(let p of d){let E=e.cells[p.at.row][p.at.col];E.piece||E.block||E.hole||(E.piece=Xo(e,p.special==="rainbow"?Ca:p.color,p.special),i.created.push({...p.at,piece:E.piece}));}return wa(e,i),i}function bd(e){let s=new Set;for(let t of e)for(let[i,n]of t.cells){let o=`${i},${n}`;if(s.has(o))return {col:i,row:n};s.add(o);}return null}var xd=e=>{let[s,t]=e.cells[Math.floor(e.cells.length/2)];return {col:s,row:t}};function Va(e,s,t){let i=new Set,n=new Set;for(;t.length>0;){let o=t.shift(),d=`${o.col},${o.row}`;if(!jo(e,o.col,o.row))continue;let p=e.cells[o.row][o.col];if(p.hole)continue;if(p.block){!o.match&&!n.has(d)&&(n.add(d),Uo(s,p,"block",o));continue}if(i.has(d))continue;i.add(d);let E=p.piece;if(E){if(p.over){Uo(s,p,"over",o);continue}if(E.color!==kn){if(p.piece=null,s.cleared.push({...o,piece:E}),p.under&&(p.under.id==="slime"&&(s.slimeCleared=true),Uo(s,p,"under",o)),o.match)for(let[O,D]of Oc){let T=Nn(e,o.col+O,o.row+D),N=`${o.col+O},${o.row+D}`;T?.block&&!n.has(N)&&vn[T.block.id]?.hitByNear&&(n.add(N),Uo(s,T,"block",{col:o.col+O,row:o.row+D}));}E.special&&vd(e,s,E.special,o,E.color,t);}}}}function Uo(e,s,t,i){let n=s[t];n.hp-=1,e.hits.push({...i,id:n.id,hp:Math.max(0,n.hp)}),n.hp<=0&&(s[t]=null);}function vd(e,s,t,i,n,o){s.fired.push({...i,kind:t});let p=Un.find(E=>E.id===t)?.shape??t;for(let E of Ga(e,p,i,n))o.push({...E,match:false});}var ts=(e,s,t)=>Ga(e,s,t,-1);function Ga(e,s,t,i){let n=[],o=p=>{for(let E=0;E<e.cols;E++)n.push({col:E,row:p});},d=p=>{for(let E=0;E<e.rows;E++)n.push({col:p,row:E});};if(s==="row")o(t.row);else if(s==="col")d(t.col);else if(s==="cross")o(t.row),d(t.col);else if(s.startsWith("cross:")){let p=Number(s.slice(6));for(let E=-p;E<=p;E++)o(t.row+E),d(t.col+E);}else if(s.startsWith("area:")){let p=Number(s.slice(5));for(let E=-p;E<=p;E++)for(let O=-p;O<=p;O++)n.push({col:t.col+O,row:t.row+E});}else if(s==="color"){let p=i>=0?i:Pc(e);for(let E=0;E<e.rows;E++)for(let O=0;O<e.cols;O++)e.cells[E][O].piece?.color===p&&n.push({col:O,row:E});}else if(s==="all")for(let p=0;p<e.rows;p++)o(p);return n.filter(p=>jo(e,p.col,p.row))}function Pc(e){let s=new Map;for(let n of e.cells)for(let o of n)yd(o.piece)&&!o.block&&s.set(o.piece.color,(s.get(o.piece.color)??0)+1);let t=e.colors[0]??0,i=-1;for(let[n,o]of s)o>i&&(i=o,t=n);return t}function kd(e,s,t,i,n,o){let d=[],p=i.special??"plain",E=o.special??"plain",O=vc.find(T=>T.a===p&&T.b===E||T.a===E&&T.b===p);e.cells[t.row][t.col].piece=null,e.cells[n.row][n.col].piece=null,s.cleared.push({...t,piece:i},{...n,piece:o}),s.fired.push({...n,kind:O?.effect??"combo"});let D=p==="rainbow"?o:i;if(O?.effect==="color"||O?.effect==="turn"){let T=D.color>=0?D.color:Pc(e);for(let N=0;N<e.rows;N++)for(let w=0;w<e.cols;w++){let W=e.cells[N][w].piece;W?.color===T&&(O.effect==="turn"&&D.special&&D.special!=="rainbow"&&(W.special=D.special==="row"||D.special==="col"?e.rnd()<.5?"row":"col":D.special),d.push({col:w,row:N,match:false}));}}else for(let T of Ga(e,O?.effect??"cross",n,D.color))d.push({...T,match:false});Va(e,s,d);}function wa(e,s){for(let t=0;t<4;t++){for(let n=0;n<e.cols;n++){let o=e.rows-1;for(;o>=0;){if(La(e.cells[o][n])){o--;continue}let d=o;for(;d-1>=0&&!La(e.cells[d-1][n]);)d--;let p=[];for(let D=o;D>=d;D--){let T=e.cells[D][n].piece;T&&p.push(T);}let E=o;for(let D of p)e.cells[E--][n].piece=D;let O=-1;for(;E>=d;E--){let D=d===Ed(e,n)&&e.dropsToSpawn>0&&Md(e)<2&&e.rnd()<.35,T=D?Xo(e,kn):Xo(e,Ko(e,e.colors));D&&e.dropsToSpawn--,e.cells[E][n].piece=T,s.spawned.push({col:n,row:E,piece:T,from:d+O--});}o=d-1;}}let i=false;for(let n=0;n<e.cols;n++){let o=Sd(e,n);if(o<0)continue;let d=e.cells[o][n];d.piece?.color===kn&&(d.piece=null,s.dropsCollected++,i=true);}if(!i)break}}var Ed=(e,s)=>{for(let t=0;t<e.rows;t++)if(!La(e.cells[t][s]))return t;return -1},Sd=(e,s)=>{for(let t=e.rows-1;t>=0;t--)if(!e.cells[t][s].hole)return e.cells[t][s].block?-1:t;return -1},Md=e=>{let s=0;for(let t of e.cells)for(let i of t)i.piece?.color===kn&&s++;return s};var _d="boss-spawned",Rd="boss-defeated",zn=b("match3.gem"),Ic=b("match3.overlay"),Fa=b("match3.layer"),Cc=b("match3.backdrop"),Nc=b("match3.part"),En=(e,s)=>{let t=Number(e.vars[s]??0);return Number.isFinite(t)?t:0},ns={id:"match3",version:2,engines:["phaser"],requires:["round"],params:{difficulty:{type:"number",default:.5,min:0,max:1},pieceScore:{type:"number",default:10,min:1,max:1e3,integer:true},coinEvery:{type:"number",default:8,min:1,max:100,integer:true},moveBonus:{type:"number",default:100,min:0,max:1e4,integer:true}},setup({world:e$1,params:s}){let t=r=>qt(s,r),i=e$1.rng.stream("match3"),n=br(1,t("difficulty")),o=qo(Go.plain,[0,1,2,3,4],()=>i.next(),Ea),d=Ze(),p="idle",E=new Map,O=new Map,D=null,T=null,N=null,w=null,W=0,te=false,ue=0,F=0,ie=0,Q=0,re=0,_e=false,me=false,ke={colors:new Map,drops:0},fe=Ho,he=Ho,se=0,De=0,We=false,Pe=[],K=null,Ee=0,q=0,ve=0,xe=null,ye=[],Ae=new Map,He=()=>gr.find(r=>r.id===e$1.vars["meta:hero"])??gr[0],Z=()=>Vo(He().skill),be=()=>n.def.kind==="battle",tt=()=>e$1.vars.reviving===true,Se=()=>kc*Math.pow(1.06,n.level-1)*(1+En(e$1,"meta:attack")),nt=()=>1+En(e$1,"meta:skill"),rt=()=>Z().mana;function Ze(){return Cn(Ie(e$1),o.cols,o.rows,{top:.33,bottom:.96,widthShare:.94})}let Ue=()=>d.cell,ot=new Set,Ge=(r,l,b,c,u=1)=>{ot.add(r);let M=Ae.get(r);(M===void 0||!e$1.isAlive(M))&&(M=e$1.create(),e$1.set(M,Nc,{id:r}),Ae.set(r,M)),e$1.set(M,e,{x:l,y:b,scale:u}),e$1.set(M,f,c);},bt=r=>{for(let[l,b]of [...Ae])l.startsWith(r)&&(e$1.destroy(b),Ae.delete(l));},Xe=r=>{let l=Ue();if(r===Ca)return {shape:"sprite",art:"m3_rainbow",w:l*.9,h:l*.9,depth:3};if(r===kn)return {shape:"sprite",art:"m3_crate",w:l*.86,h:l*.86,depth:3};let b=so(r);return {shape:"sprite",art:b?.art??"gem1",w:l*.88,h:l*.88,color:b?.color??"piece1",depth:3}},st=(r,l,b,c,u)=>{let M=Ye(d,l,u),k=e$1.create();return e$1.set(k,zn,{id:r,col:l,row:b,kind:c}),e$1.set(k,e,{x:M.x,y:M.y}),e$1.set(k,f,Xe(c)),E.set(r,k),k},lt=()=>{let r=Wa(o);for(let[l,b]of [...E])r.has(l)||(e$1.destroy(b),E.delete(l));for(let[l,b]of r){let c=E.get(l);c===void 0&&(c=st(l,b.col,b.row,b.piece.color,b.row-o.rows));let u=e$1.need(c,zn);u.col=b.col,u.row=b.row,u.kind!==b.piece.color&&(u.kind=b.piece.color,e$1.set(c,f,Xe(b.piece.color)));let M=b.piece.special&&b.piece.special!=="rainbow"?Un.find(x=>x.id===b.piece.special):void 0,k=O.get(l);M&&k===void 0&&(k=e$1.create(),e$1.set(k,Ic,{of:l}),e$1.set(k,e,{x:0,y:0}),O.set(l,k)),M&&k!==void 0&&e$1.set(k,f,{shape:"sprite",art:M.art,w:Ue()*.95,h:Ue()*.95,depth:4}),!M&&k!==void 0&&(e$1.destroy(k),O.delete(l));}for(let[l,b]of [...O])r.has(l)||(e$1.destroy(b),O.delete(l));je();},je=()=>{et(e$1,Fa);let r=Ue();for(let l=0;l<o.rows;l++)for(let b=0;b<o.cols;b++){let c=o.cells[l][b],u=Ye(d,b,l),M=(k,x,g,_=1)=>{if(!x)return;let A=vn[x.id],L=e$1.create();e$1.set(L,Fa,{key:k}),e$1.set(L,e,{x:u.x,y:u.y}),e$1.set(L,f,{shape:"sprite",art:x.hp>=2&&A?.id==="ice"?"m3_ice2":x.hp>=2&&A?.id==="stone"?"m3_stone2":A?.art??"m3_stone",w:r*_,h:r*_,depth:g});};M(`u${b},${l}`,c.under,1.5,.98),M(`o${b},${l}`,c.over,5,.98),M(`b${b},${l}`,c.block,3,.95);}},Fe=()=>{et(e$1,Cc),Et(e$1,"board",d.top+d.cell*o.rows*.35);let r=Ue(),l=Ye(d,(o.cols-1)/2,(o.rows-1)/2),b=r*.25,c=(u,M,k)=>{let x=e$1.create();e$1.set(x,Cc,{i:0}),e$1.set(x,e,{x:u,y:M}),e$1.set(x,f,k);};c(l.x,l.y,{shape:"sprite",art:"panel",w:r*o.cols+b*2,h:r*o.rows+b*2,color:"panel",alpha:.9,depth:-10});for(let u=0;u<o.rows;u++)for(let M=0;M<o.cols;M++){if(o.cells[u][M].hole)continue;let k=Ye(d,M,u);c(k.x,k.y,{shape:"sprite",art:"cell",w:r-2,h:r-2,color:(u+M)%2?"panel":"ground",alpha:.85,depth:-9});}},it=()=>{let r=Ie(e$1),l=r.h*.12,b=d.top-Ue()*.4,c=Math.max(40,(b-l)*.92);if((xe===null||!e$1.isAlive(xe))&&(xe=e$1.create()),e$1.set(xe,e,{x:r.w*.15,y:b-c/2}),e$1.set(xe,f,{shape:"actor",cast:He().cast,h:c,pose:"idle",facing:1,depth:20}),K&&e$1.isAlive(K.entity)){let u=c*K.def.size;e$1.set(K.entity,e,{x:r.w*.82,y:b-u/2});let M=e$1.need(K.entity,f);M.shape==="actor"&&(M.h=u);}},dt=()=>n.def.kind!=="goal"?[]:n.def.goals.map(r=>({goal:r,left:r.kind==="color"?Math.max(0,r.count-(ke.colors.get(r.color)??0)):r.kind==="clear"?Jo(o,r.obstacle):r.kind==="drops"?Math.max(0,r.count-ke.drops):Math.max(0,r.value-Number(e$1.vars.score??0))})),Tt=()=>dt().every(r=>r.left===0),Ct=r=>{let l=Ie(e$1).w*.07;if(r.kind==="color"){let b=so(r.color);return {shape:"sprite",art:b?.art??"gem1",w:l,h:l,color:b?.color??"piece1",depth:70}}return r.kind==="clear"?{shape:"sprite",art:vn[r.obstacle]?.art??"m3_stone",w:l,h:l,depth:70}:r.kind==="drops"?{shape:"sprite",art:"m3_crate",w:l,h:l,depth:70}:{shape:"sprite",art:"coin",w:l,h:l,depth:70}},Nt=(r,l,b,c,u,M)=>{let k=Math.max(8,c*.09);Ge(`${r}:bg`,l,b,{shape:"rect",w:c,h:k,color:"#000000",alpha:.5,radius:k/2,depth:69});let x=Math.max(1,(c-4)*Math.max(0,Math.min(1,u)));Ge(`${r}:fill`,l-(c-4)/2+x/2,b,{shape:"rect",w:x,h:k-4,color:M,radius:(k-4)/2,depth:69.1});},R=()=>{let r=Ie(e$1),l=Math.min(r.w,r.h),b=(_,A,L,$,U="text",H=l*.045)=>Ge(_,A,L,{shape:"text",text:$,size:Math.round(H),color:U,bold:true,depth:70}),c=d.top-Ue()*.4,u=r.h*.085;ye=[],ot.clear();let M=r.w*.36,k=(u+c)/2+l*.02,x=l*.07,g=De>=rt();if(ye.push({id:"skill",x:M,y:k,r:x*1.15}),g&&Ge("h:skill:glow",M,k,{shape:"circle",r:x*1.25,color:We?"coin":"secondary",alpha:.5+.3*Math.sin(e$1.time*7),depth:68.9}),Ge("h:skill:bg",M,k,{shape:"circle",r:x,color:"panel",alpha:.95,depth:69}),Ge("h:skill:i",M,k,{shape:"sprite",art:Z().art,w:x*1.4,h:x*1.4,alpha:g?1:.45,depth:69.2}),Nt("h:mana",M,k+x*1.45,x*2.2,De/rt(),"secondary"),be()){let _=r.w*.15;if(Nt("h:hp",_,u,r.w*.24,fe/he,"accent"),b("h:hp:t",_+r.w*.12+l*.05,u,`${Math.ceil(fe)}`,"text",l*.034),se>0&&(Ge("h:sh:i",_+r.w*.12+l*.05,u+l*.055,{shape:"sprite",art:"m3_shield",w:l*.045,h:l*.045,color:"primary",depth:70}),b("h:sh:t",_+r.w*.12+l*.11,u+l*.055,`${Math.ceil(se)}`,"primary",l*.03)),K){let A=r.w*.78;Nt("h:foe",A,u,r.w*.26,K.hp/K.max,"danger"),b("h:foe:t",A-r.w*.13-l*.05,u,`${Math.ceil(K.hp)}`,"text",l*.034);let L=oo[K.def.element];Ge("h:foe:el",A+r.w*.13+l*.03,u,{shape:"circle",r:l*.018,color:L.color,depth:70});let $=(u+c)/2;Ge("h:foe:in:bg",r.w*.62,$,{shape:"circle",r:l*.045,color:K.in<=1?"danger":"panel",alpha:.95,depth:69}),b("h:foe:in",r.w*.62,$,String(K.in),"text",l*.045);let U=n.def.kind==="battle"?n.def.enemies.length:0;for(let H=0;H<U;H++)Ge(`h:q:${H}`,r.w*.8+(H-(U-1)/2)*l*.04,c+l*.005,{shape:"circle",r:l*.012,color:H<Ee?"muted":H===Ee?"danger":"text",alpha:.9,depth:70});}}else {b("h:moves",r.w*.5,u+l*.01,String(F),F<=3?"danger":"text",l*.075);let _=dt(),A=r.w*.64,L=r.w*.11,$=(u+c)/2+l*.02;_.forEach((U,H)=>{let oe=A+H*L;Ge(`h:g:${H}`,oe,$,Ct(U.goal)),b(`h:g:${H}:t`,oe,$+l*.06,U.left===0?"\u2713":String(U.left),U.left===0?"accent":"text",l*.038);});}e$1.vars.m3_phase=p,e$1.vars.m3_buttons=ye.map(_=>`${_.id}@${Math.round(_.x)},${Math.round(_.y)}`).join(";");for(let[_,A]of [...Ae])!_.startsWith("h:")||ot.has(_)||(e$1.destroy(A),Ae.delete(_));},C=()=>{K&&e$1.isAlive(K.entity)&&Je(e$1,K.entity,"die");let r=Pe.shift();if(r===void 0){K=null;return}let l=ao(r),b=e$1.create();e$1.set(b,e,{x:0,y:0}),e$1.set(b,f,{shape:"actor",cast:l.cast,variant:l.variant??i.int(0,99),h:50,pose:"idle",facing:-1,depth:20});let c=l.hp*n.enemyHp;K={def:l,hp:c,max:c,in:l.every,rage:1,entity:b},it(),l.boss&&(e$1.emit(_d,{kind:r}),B(e$1,{kind:"shake",power:1})),h();},h=()=>{if(e$1.vars.moves=F,e$1.vars.hero_hp=Math.ceil(fe),e$1.vars.mana=Math.floor(De),e$1.vars.m3_goals=dt().map(r=>`${r.goal.kind==="color"?`color${r.goal.color}`:r.goal.kind==="clear"?r.goal.obstacle:r.goal.kind}:${r.left}`).join(","),e$1.vars.m3_enemy=K?`${K.def.id}:${Math.ceil(K.hp)}/${Math.ceil(K.max)}:${K.in}`:"",be()){let r=n.def.kind==="battle"?n.def.enemies.length:1;e$1.vars.level_progress=Math.min(1,(Ee+(K?1-K.hp/K.max:0))/r);}else {let r=n.def;if(r.kind==="goal"){let l=r.goals.map(c=>c.kind==="color"||c.kind==="drops"?c.count:c.kind==="score"?c.value:1),b=dt();e$1.vars.level_progress=b.reduce((c,u,M)=>c+(u.goal.kind==="clear"?u.left===0?1:0:1-u.left/l[M]),0)/Math.max(1,b.length);}}},S=()=>{et(e$1,zn),et(e$1,Ic),et(e$1,Fa),et(e$1,Nc),E.clear(),O.clear(),Ae.clear(),K&&e$1.isAlive(K.entity)&&e$1.destroy(K.entity),K=null,n=br(En(e$1,"meta:chapter")||1,t("difficulty"));let r=n.def;o=qo(Go[r.board]??Go.plain,n.colors,()=>i.next(),Ea,r.kind==="goal"?r.drops??0:0),d=Ze(),Fe(),p="idle",D=null,T=null,N=null,w=null,W=0,te=false,ue=0,ke.colors.clear(),ke.drops=0,F=r.kind==="goal"?r.moves+En(e$1,"meta:moves"):0,ie=F,Q=0,re=0,_e=false,me=false,he=Ho*Math.pow(1.06,n.level-1)*(1+En(e$1,"meta:health")),fe=he,se=0,De=0,We=false,Ee=0,q=0,ve=0,Pe=r.kind==="battle"?[...r.enemies]:[],e$1.vars.m3_level=n.level,e$1.vars.m3_world=n.world,e$1.vars.m3_kind=r.kind,e$1.vars.coins=0,e$1.vars.score=0,e$1.vars.stars=0,e$1.vars.reviving=false,lt(),it(),r.kind==="battle"&&C(),h();},v=r=>{if(!r||!K)return 1;let l=oo[r].beats.includes(K.def.element),b=r===K.def.element;return (l?1.5:b?.5:1)*(r===He().element?1.25:1)},a=(r,l=0)=>{W++,te||=r.slimeCleared,ke.drops+=r.dropsCollected;let b=l,c=0,u=0,M=Ue();for(let _ of r.cleared){let A=_.piece;A.color>=0&&ke.colors.set(A.color,(ke.colors.get(A.color)??0)+1);let L=so(A.color),$=Ye(d,_.col,_.row);B(e$1,{kind:"burst",x:$.x,y:$.y,color:L?.color??"coin",n:6,size:M*.8}),De=Math.min(rt(),De+Mc*(1+En(e$1,"meta:mana"))),!(!be()||!L)&&(L.role==="attack"?b+=Se()*v(L.element)*(1+.25*(W-1)):L.role==="heal"?c+=Ec*Math.pow(1.06,n.level-1)*(1+En(e$1,"meta:health")):L.role==="shield"&&(u+=Sc*Math.pow(1.06,n.level-1)*(1+En(e$1,"meta:defense"))));}for(let _ of r.fired){let A=Ye(d,_.col,_.row);B(e$1,{kind:"ring",x:A.x,y:A.y,color:"coin",size:M*2.4});}r.fired.length>0&&B(e$1,{kind:"shake",power:.4+Math.min(1,r.fired.length*.2)});for(let _ of r.created)e$1.emit("special-made",{kind:_.piece.special});let k=r.cleared.length*t("pieceScore")*W+r.fired.length*30;we(e$1,"score",k),ue+=r.cleared.length;let g=Math.floor(ue/t("coinEvery"))-Math.floor((ue-r.cleared.length)/t("coinEvery"));g>0&&(we(e$1,"coins",g),e$1.emit("coin-collected",{value:g})),e$1.emit("pieces-cleared",{count:r.cleared.length,cascade:W}),be()&&(c>0&&(fe=Math.min(he,fe+c),xe!==null&&B(e$1,{kind:"pop",x:e$1.need(xe,e).x,y:e$1.need(xe,e).y-M,text:`+${Math.round(c)}`,color:"accent",size:Math.round(M*.45)})),u>0&&(se+=u),b>0&&K&&f$1(b)),lt(),h();},f$1=r=>{if(!K)return;K.hp-=r,xe!==null&&Be(e$1,xe,"attack"),Be(e$1,K.entity,"hit");let l=e$1.need(K.entity,e);B(e$1,{kind:"pop",x:l.x,y:l.y-Ue(),text:`-${Math.round(r)}`,color:"danger",size:Math.round(Ue()*.5)}),!(K.hp>0)&&(Ee++,e$1.emit("enemy-defeated",{kind:K.def.id}),m(),K.def.boss&&(q++,we(e$1,"coins",10),e$1.emit(Rd,{kind:K.def.id}),B(e$1,{kind:"flash",color:"coin"})),C());},m=()=>{if(!K)return;Je(e$1,K.entity,"die");let r=K.entity;e$1.need(r,f).alpha=.6,P(()=>{e$1.isAlive(r)&&e$1.destroy(r);});},y=[],P=r=>y.push({t:.9,f:r}),z=()=>{if(Ba(o,te),te=false,W=0,lt(),n.def.kind==="goal"){if(Tt())return ee();if(F<=0)return Le("out-of-moves")}else {if(!K)return ee();if(K.in--,K.in<=0){p="enemy",re=.45;return}}I();},I=()=>{p="idle",vr(o)===null&&(Na(o),lt(),e$1.emit("board-shuffled",{})),h();},X=()=>{if(!K)return I();let r=K.def,l=n.enemyAttack*r.attack*K.rage;K.rage=1,Be(e$1,K.entity,"attack");let b=Math.min(se,l);if(se-=b,l=(l-b)*(1-Math.min(.6,En(e$1,"meta:defense"))),l>0){if(fe-=l,xe!==null){Be(e$1,xe,"hit");let u=e$1.need(xe,e);B(e$1,{kind:"pop",x:u.x,y:u.y-Ue(),text:`-${Math.round(l)}`,color:"danger",size:Math.round(Ue()*.5)});}B(e$1,{kind:"shake",power:.8}),e$1.emit("player-hit",{hp:Math.ceil(fe)});}let c=r.skill;if(c?.kind==="sow"?Ha(o,c.obstacle,c.count):c?.kind==="heal"?K.hp=Math.min(K.max,K.hp+K.max*c.share):c?.kind==="rage"&&(K.rage=c.mult),K.in=r.enrage&&K.hp<K.max*r.enrage?Math.max(1,r.every-1):r.every,lt(),fe<=0)return fe=0,Le("fell");I();},ee=()=>{if(n.def.kind==="goal"){ve=Math.min(F,12),e$1.vars.stars=Math.min(_e?1:3,Ta(F/Math.max(1,ie),false)),we(e$1,"score",F*t("moveBonus")),p="finale",re=.3;return}e$1.vars.stars=Math.min(_e?1:3,Ta(fe/he,true)),J("cleared");},J=r=>{if(me)return;me=true,p="over";let l=r==="cleared";l&&e$1.vars["meta:first_clear"]===true&&we(e$1,"coins",n.firstClearGold),l||(e$1.vars.stars=0),e$1.vars.reviving=false,h(),e$1.emit(Lt,{reason:r,stats:{chapter:n.level,seconds:Math.floor(Q),cleared:l,stars:Number(e$1.vars.stars??0),coins:Number(e$1.vars.coins??0),bosses:q,kills:Ee,battle:be()}});},Le=r=>{if(e$1.vars.revive_ready===true&&!_e){e$1.vars.reviving=true,e$1.vars.m3_revive_reason=r,p="idle",e$1.emit(Wt,{});return}J(r);},Oe=()=>{tt()&&(_e=true,e$1.vars.reviving=false,be()?(fe=he*Dc,K&&(K.in=K.def.every)):F+=Rc,B(e$1,{kind:"flash",color:"coin"}),I());},Re=r=>{let l=o.cells[r.row]?.[r.col];if(!l||l.hole)return 0;let b=n.def.kind==="goal"?n.def.goals:[],c=0;for(let M of [l.under,l.over,l.block])M&&(c+=b.some(k=>k.kind==="clear"&&k.obstacle===M.id)?6:3);let u=l.piece;if(u&&!l.block){c+=1,u.special&&(c+=3),b.some(k=>k.kind==="color"&&k.color===u.color)&&(c+=2);let M=so(u.color);be()&&M?.role==="attack"&&(c+=v(M.element));}if(b.some(M=>M.kind==="drops"))for(let M=0;M<r.row;M++)o.cells[M][r.col].piece?.color===kn&&(c+=2);return c},G=r=>{let l={col:Math.floor(o.cols/2),row:Math.floor(o.rows/2)},b=-1;for(let c=0;c<o.rows;c++)for(let u=0;u<o.cols;u++){if(o.cells[c][u].hole)continue;let M=ts(o,r,{col:u,row:c}).reduce((k,x)=>k+Re(x),0);M>b&&(b=M,l={col:u,row:c});}return l},ne=()=>{let r=Z();if(De<r.mana||p!=="idle")return false;let l=nt(),b=[];if(r.kind==="shape"){let M=l>=(r.bigAt??99)&&r.bigShape?r.bigShape:r.shape??"area:1",k=G(M);b=ts(o,M,k);let x=Ye(d,k.col,k.row);B(e$1,{kind:"ring",x:x.x,y:x.y,color:"coin",size:Ue()*4}),B(e$1,{kind:"flash",color:"coin"});}else b=es(o,"line",Math.round((r.count??3)*l));De=0,We=false,W=0,xe!==null&&Be(e$1,xe,"attack"),e$1.emit("skill-cast",{id:r.id}),mt(e$1,"m3-skill");let c=be()&&K?r.damage*Se()*l*v(He().element):0,u=Qo(o,b,r.id);return a(u,c),p="falling",true},Te=r=>{if(N){let l=o.cells[N.row]?.[N.col]?.piece?.id,b=l!==void 0?E.get(l):void 0;b!==void 0&&(e$1.need(b,e).scale=1);}if(N=r,r){let l=o.cells[r.row]?.[r.col]?.piece?.id,b=l!==void 0?E.get(l):void 0;b!==void 0&&(e$1.need(b,e).scale=1.15);}},le=0,ce=(r,l)=>{if(le=0,St(e$1),p!=="idle"||tt()||!io(o,r,l))return;Te(null);let b=o.cells[r.row][r.col].piece.id,c=o.cells[l.row][l.col].piece.id;D=new Map([[b,l],[c,r]]),T=[r,l],p="swapping",mt(e$1,"match3-swap");};e$1.on(j,r=>{let l=r;if(!(!qe(e$1)||In(e$1)||me||tt()))if(l.type==="tap"){if(ye.find(u=>Math.hypot(l.x-u.x,l.y-u.y)<=u.r)?.id==="skill"){if(De<rt())return;ne()||(We=true);return}let c=bn(d,l.x,l.y);if(!c||p!=="idle")return;N&&Math.abs(N.col-c.col)+Math.abs(N.row-c.row)===1?ce(N,c):Te(N&&N.col===c.col&&N.row===c.row?null:c);}else if(l.type==="press"){let b=bn(d,l.x,l.y);w=b?{x:l.x,y:l.y,...b}:null;}else if(l.type==="move"&&w){let b=l.x-w.x,c=l.y-w.y;if(Math.max(Math.abs(b),Math.abs(c))<d.cell*.45)return;let u={col:w.col,row:w.row},M=Math.abs(b)>Math.abs(c)?{col:u.col+Math.sign(b),row:u.row}:{col:u.col,row:u.row+Math.sign(c)};w=null,ce(u,M);}else l.type==="release"&&(w=null);}),e$1.on(At,()=>{S(),e$1.vars.level=n.level;}),e$1.on(It,S),e$1.on($t,Oe),e$1.on(Bt,()=>{tt()&&(e$1.vars.reviving=false,J(be()?"fell":"out-of-moves"));}),e$1.on(Pt,r=>{bt("h:"),ye=[],xe!==null&&e$1.isAlive(xe)&&Je(e$1,xe,r.reason==="cleared"?"dance":"die");}),e$1.on(k,()=>{d=Ze(),Fe();for(let[r,l]of E){let b=e$1.need(l,zn);e$1.set(l,f,Xe(b.kind));}lt(),it();});let j$1=r=>{let l=true,b=Math.min(1,r*14),c=Ue();for(let u of e$1.query(zn)){let M=e$1.need(u,zn),k=D?.get(M.id)??M,x=e$1.need(u,e),g=Ye(d,k.col,k.row),_=g.x-x.x,A=g.y-x.y,L=e$1.need(u,f);Math.abs(_)<.5&&Math.abs(A)<.5?(x.x=g.x,x.y=g.y,L.alpha=1):(l=false,L.alpha=x.y<d.top-c*.3?0:1,x.x+=_*b,x.y+=Math.abs(A)>c*.3?Math.sign(A)*Math.min(Math.abs(A),c*12*r):A*b);}for(let[u,M]of O){let k=E.get(u);if(k===void 0)continue;let x=e$1.need(k,e);e$1.set(M,e,{x:x.x,y:x.y,scale:1+.06*Math.sin(e$1.time*6)}),e$1.need(M,f).alpha=e$1.need(k,f).alpha??1;}return l};e$1.addSystem({id:"match3",order:0,run(r,l){for(let b of [...y])b.t-=l,b.t<=0&&(y.splice(y.indexOf(b),1),b.f());if(!qe(r)||me){j$1(l);return}if(Q+=l,R(),!tt()&&j$1(l)){if(re>0){re-=l;return}if(p==="swapping"&&T){let[b,c]=T;T=null,D=null,W=0;let u=$a(o,b,c);if(!u){let M=o.cells[b.row][b.col].piece.id,k=o.cells[c.row][c.col].piece.id;D=new Map([[M,c],[k,b]]),p="returning";return}n.def.kind==="goal"&&F--,a(u),p="falling";return}if(p==="returning"){if(D){D=null;return}p="idle";return}if(p==="falling"){let b=Zo(o);if(b){a(b);return}z();return}if(p==="enemy"){X();return}if(p==="finale"){if(ve>0){ve--,F=Math.max(0,F-1);let c=es(o,"line",1);c.length>0&&a(Qo(o,c,"finale")),lt(),re=.12;return}let b=Zo(o);if(b){a(b);return}J("cleared");return}if(p==="idle"&&We){ne();return}if(p==="idle"){if(le+=l,(!pt(r,"match3-swap")||le>7)&&!rn(r)){let b=vr(o);b&&ft(r,"swipe",Ye(d,b[0].col,b[0].row),Ye(d,b[1].col,b[1].row),d.cell*1.1);}if(De>=rt()&&!pt(r,"m3-skill")&&!rn(r)){let b=ye.find(c=>c.id==="skill");b&&ft(r,"tap",b,void 0,d.cell*1.2);}}}}}),S();}};var co=[{id:"garden",prefix:"item",levels:8,color:"accent",gen:"mg_gen_garden"},{id:"bake",prefix:"mg_bake",levels:7,color:"coin",gen:"mg_gen_bake"},{id:"jewel",prefix:"mg_jewel",levels:7,color:"primary",gen:"mg_gen_jewel"},{id:"potion",prefix:"mg_potion",levels:7,color:"secondary",gen:"mg_gen_potion"}],ln=e=>co.find(s=>s.id===e),Ua=3,zc=[0,.2,.35],Wc=.06,Yt={box:{id:"box",layer:"block",art:["mg_box","mg_box2"],neighbour:true,coins:1},fog:{id:"fog",layer:"cover",art:["mg_fog"],neighbour:true,hides:true},web:{id:"web",layer:"cover",art:["mg_web"],neighbour:true,mergeInto:true},bubble:{id:"bubble",layer:"cover",art:["mg_bubble"],neighbour:false,mergeInto:true,ttl:14}},Xa=[{id:"joker",art:"mg_joker",effect:"joker"},{id:"scissors",art:"mg_scissors",effect:"split"},{id:"chest",art:"chest",effect:"chest",amount:3},{id:"battery",art:"mg_energy",effect:"energy",amount:6}],Sn=e=>Xa.find(s=>s.id===e),ja=[[1,.5],[2,.35],[3,.15]],Ka={"-":{kind:"free"},".":{kind:"hole"},A:{kind:"gen",chain:0},B:{kind:"gen",chain:1},C:{kind:"gen",chain:2},D:{kind:"gen",chain:3},a:{kind:"item",chain:0,level:1},b:{kind:"item",chain:1,level:1},c:{kind:"item",chain:2,level:1},d:{kind:"item",chain:3,level:1},x:{kind:"block",obstacle:"box",hp:1},X:{kind:"block",obstacle:"box",hp:2},f:{kind:"cover",obstacle:"fog",levels:[1,2,2,3]},w:{kind:"cover",obstacle:"web",levels:[2,2,3]},u:{kind:"cover",obstacle:"bubble",levels:[3,3,4]},J:{kind:"special",special:"joker"},S:{kind:"special",special:"scissors"},K:{kind:"special",special:"chest"},E:{kind:"special",special:"battery"}},$c=7,Bc=8,Xn={start:["-------","-------","--a-a--","---A---","--a----","-------","-------","-------"],two:["-------","-------","-a---b-","--A-B--","-------","-------","-------","-------"],boxes:["-------","-------","--A-B--","-------","xxxxxxx","x--K--x","x-----x","xxxxxxx"],fog:["fffffff","fffffff","-------","--A-B--","-------","-------","xx-E-xx","xx---xx"],yard:["X-----X","-------","-A-J-B-","-------","xx---xx","fx---xf","ffx-xff","fffffff"],cellar:["XxxxxxX","x-----x","x-A-B-x","x-----x","x--K--x","xfffffx","xfffffx","XxxxxxX"],webs:["-------","-w---w-","--A-B--","---C---","-w---w-","-------","--www--","-------"],mine:["XX---XX","X--S--X","--A-C--","---B---","-------","ffXXXff","fff-fff","fffffff"],workshop:["w--E--w","-------","-A-B-C-","-------","xwxwxwx","-------","x--K--x","XXXXXXX"],vault:["XfffffX","fx---xf","f-A-B-f","f--J--f","f-C---f","fx---xf","XfffffX","XXXXXXX"],bubbles:["-------","-u---u-","--A-B--","---C---","-------","-u---u-","--uuu--","-------"],holes:["..---..",".-----.","--A-B--","---C---","---D---","--fff--",".-fff-.","..---.."],lab:["u-----u","-x-E-x-","--A-D--","-------","--B-C--","-w---w-","xxwuwxx","XXXXXXX"],terrace:["...-...","..---..",".-A-B-.","---J---","-C---D-","-u-x-u-","xxfffxx","XXfffXX"],four:["-------","-A---B-","-------","---J---","-------","-C---D-","xxxxxxx","XXXXXXX"],fortress:["ffXXXff","fx---xf","X-A-B-X","X--S--X","X-C-D-X","fx-K-xf","ffXXXff","fffffff"],maze:["-x-u-x-","-x---x-","-xA-Bx-","--w-w--","-xC-Dx-","-x---x-","-xfffx-","XXfffXX"],palace:["uXXXXXu","X--E--X","X-A-B-X","X--J--X","X-C-D-X","Xw---wX","XffKffX","XXXXXXX"]},qa=[{id:"upgrade",art:"mg_sk_merge",charge:10,effect:"upgrade",count:3},{id:"free",art:"mg_sk_free",charge:9,effect:"free",count:6},{id:"joker",art:"mg_sk_joker",charge:12,effect:"joker",count:2}],ss=e=>qa.find(s=>s.id===e),Er=[{id:"hero",cast:"hero",gems:0,skill:"upgrade"},{id:"hero2",cast:"hero2",gems:150,skill:"free"},{id:"hero3",cast:"hero3",gems:300,skill:"joker"}],Ce=(e,s,t,i,n=0,o=3,d)=>({board:e,chains:[...s].map(p=>({g:"garden",b:"bake",j:"jewel",p:"potion"})[p]??"garden"),orders:t,top:i,double:n,visible:o,...d?{slack:d}:{}}),rs=e=>({...e,vip:true}),Vt=(e,s)=>({...e,extra:s}),as=[Ce("start","g",3,3,0,1,1.6),Ce("start","g",4,3,0,2,1.5),Ce("two","gb",4,3,0,2,1.45),Ce("two","gb",5,4,0,2),Ce("boxes","gb",5,4,0,3),Ce("boxes","gb",6,4,.2,3),Ce("fog","gb",6,4,.2,3),Ce("yard","gb",6,5,.2,3),Ce("fog","gb",7,5,.3,3),Vt(rs(Ce("cellar","gb",6,5,.3,3)),.92),Vt(Ce("webs","gbj",5,4,.2,3),.92),Vt(Ce("webs","gbj",6,4,.3,3),.92),Vt(Ce("mine","gbj",6,5,.2,3),1.15),Vt(Ce("workshop","gbj",6,5,.3,3),.9),Vt(Ce("mine","gbj",7,5,.3,3),1.08),Vt(Ce("yard","gj",6,5,.3,3),1.15),Vt(Ce("workshop","gbj",7,5,.4,3),.92),Ce("vault","gbj",7,5,.3,3),Vt(Ce("webs","jbg",7,6,.3,3),.92),rs(Ce("vault","gbj",7,6,.4,3)),Vt(Ce("bubbles","gbp",6,5,.2,3),1.15),Vt(Ce("bubbles","gbp",6,5,.3,3),1.12),Vt(Ce("holes","gbpj",6,5,.3,3),.92),Vt(Ce("lab","gbjp",7,5,.3,3),.92),Ce("holes","gbpj",7,5,.4,3),Ce("bubbles","pjg",7,6,.3,3),Ce("lab","gbjp",7,6,.4,3),Ce("terrace","gbjp",8,5,.4,3),Ce("holes","gbpj",8,6,.4,3),rs(Ce("terrace","gbjp",7,6,.4,3)),Ce("four","gbjp",7,5,.3,3),Vt(Ce("fortress","gbjp",7,5,.4,3),1.06),Ce("maze","gbjp",7,6,.4,3),Ce("four","gbjp",8,6,.4,3),Vt(Ce("fortress","gbjp",8,6,.5,3),1.06),Ce("palace","gbjp",8,6,.4,3),Ce("maze","gbjp",8,6,.5,3),Ce("lab","gbjp",9,6,.5,3),Ce("palace","gbjp",9,6,.5,3),Vt(rs(Ce("fortress","gbjp",8,6,.5,3)),1.06)],kr=10,Hc=4,is=as.length,Ya=[0,18,45,75];function Dd(e){let s=e>>>0;return ()=>{s=s+1831565813>>>0;let t=s;return t=Math.imul(t^t>>>15,t|1),t^=t+Math.imul(t^t>>>7,t|61),((t^t>>>14)>>>0)/4294967296}}var os=e=>Math.pow(2,Math.max(0,e-1));function Td(e,s){let t=Dd(s*7919+13),i=[],n=e.chains;for(let o=0;o<e.orders;o++){let d=e.orders<=1?1:o/(e.orders-1),p=e.vip===true&&o===e.orders-1,E=2+Math.round(d*(e.top-2)),O=Math.max(2,Math.min(e.top,E-(t()<.3?1:0))),D=n[(o+Math.floor(t()*n.length))%n.length],T=[{chain:D,level:p?Math.min(e.top+1,(ln(D)?.levels??7)-1):O}];if(p||o>0&&n.length>1&&t()<e.double){let N=n[(n.indexOf(D)+1+Math.floor(t()*(n.length-1)))%n.length];T.push({chain:N,level:p?e.top:Math.max(2,O-1)});}i.push({wants:T,vip:p});}return i}function Od(e){let s=n=>n.reduce((o,d)=>o+os(d),0)/Math.max(1,n.length),t=ja.reduce((n,[o,d])=>n+os(o)*d,0),i=0;for(let n of e.join("")){let o=Ka[n];if(o){if(o.kind==="item")i+=os(o.level);else if(o.kind==="cover")i+=s(o.levels)*(Yt[o.obstacle]?.mergeInto&&!Yt[o.obstacle]?.ttl?.5:.2);else if(o.kind==="special"){let d=Sn(o.special);i+=d?.effect==="energy"?d.amount??0:d?.effect==="chest"?t*(d.amount??0):d?.effect==="joker"?3:2;}}}return i}function Sr(e,s=.5){let t=Math.max(1,Math.min(is,Math.floor(e))),i=as[t-1],n=Math.ceil(t/kr),o=Td(i,t),d=o.reduce((O,D)=>O+D.wants.reduce((T,N)=>T+os(N.level),0),0),p=Math.max(d*.4,d-Od(Xn[i.board]??[])*.7),E=(i.slack??1.32-(n-1)*.08-(t-(n-1)*kr)*.006)*(1.1-s*.2)*(i.extra??1);return {level:t,world:n,index:t-(n-1)*kr,def:i,boss:i.vip===true,orders:o,energy:Math.ceil(p*E),firstClearGold:(i.vip?120:50)+(t-1)*10}}var Ja=e=>Ya[Math.ceil(Math.max(1,e)/kr)-1]??0,cs=e=>e>=.2?3:e>=.08?2:1,ls=15,Za="kit-merge",Qa=[{id:"Energy",var:"meta:energy",art:"mg_energy",color:"coin",perLevel:2,unit:"",maxLevel:15,price:40,growth:.12},{id:"GenLuck",var:"meta:luck",art:"mg_joker",color:"secondary",perLevel:2,unit:"%",maxLevel:15,price:45,growth:.12},{id:"Reward",var:"meta:reward",art:"coin",color:"coin",perLevel:5,unit:"%",maxLevel:20,price:40,growth:.12},{id:"SkillPower",var:"meta:skill",art:"mg_sk_merge",color:"secondary",perLevel:8,unit:"%",maxLevel:10,price:50,growth:.12},{id:"Charge",var:"meta:charge",art:"mg_sk_free",color:"primary",perLevel:5,unit:"%",maxLevel:10,price:50,growth:.12}],Vc={game:"merge",character:Za,stats:Qa,heroes:Er,levels:is,firstClearGold:e=>Sr(e).firstClearGold,stars:3,starsToEnter:Ja};var ds=e=>({kind:"none",at:e,hits:[],coins:0}),Mn=e=>ln(e)?.levels??8,ei=(e,s,t,i,n="")=>({id:e.nextId++,kind:s,chain:t,level:i,special:n}),lo=(e,s,t)=>ei(e,"item",s,t),wc=(e,s)=>ei(e,"special","",0,s);function ti(e,s,t){let i=Math.max(...e.map(d=>d.length)),n={cols:i,rows:e.length,cells:[],chains:s,nextId:1,rand:t},o=d=>s[d]??null;for(let d=0;d<e.length;d++){let p=[];for(let E=0;E<i;E++){let O=Ka[e[d][E]??"-"]??{kind:"free"},D={hole:O.kind==="hole",thing:null,cover:null,block:null};if(O.kind==="gen"){let T=o(O.chain);T&&(D.thing=ei(n,"gen",T,1));}else if(O.kind==="item"){let T=o(O.chain);T&&(D.thing=lo(n,T,O.level));}else if(O.kind==="block")D.block={id:O.obstacle,hp:O.hp};else if(O.kind==="cover"){let T=s[Math.floor(t()*s.length)]??"garden",N=Math.min(Mn(T)-1,O.levels[Math.floor(t()*O.levels.length)]??1);D.thing=lo(n,T,N);let w=Yt[O.obstacle];D.cover={id:O.obstacle,hp:1,...w?.ttl?{ttl:w.ttl}:{}};}else O.kind==="special"&&(D.thing=wc(n,O.special));p.push(D);}n.cells.push(p);}return n}var jn=(e,s)=>e.cells[s.row]?.[s.col],Fc=(e,s)=>s.col>=0&&s.row>=0&&s.col<e.cols&&s.row<e.rows,Uc=e=>!!e&&!e.hole&&!e.thing&&!e.block,Mr=(e,s)=>{let t=jn(e,s);return !!t&&!!t.thing&&!t.cover&&!t.block};function dn(e){let s=[];for(let t=0;t<e.rows;t++)for(let i=0;i<e.cols;i++){let n=e.cells[t][i];n.thing&&s.push({at:{col:i,row:t},thing:n.thing,cell:n});}return s}var Ad=e=>e.cells.reduce((s,t)=>s+t.filter(Uc).length,0);function fs(e,s){let t=null,i=1/0;for(let n=0;n<e.rows;n++)for(let o=0;o<e.cols;o++){if(!Uc(e.cells[n][o]))continue;let d=Math.hypot(o-s.col,(n-s.row)*1.05);d<i-1e-9&&(i=d,t={col:o,row:n});}return t}function ps(e,s){let t=s?.thing;return !s||!t||s.block||t===e||e.kind!==t.kind||e.kind==="special"||s.cover&&!Yt[s.cover.id]?.mergeInto||e.chain!==t.chain||e.level!==t.level?false:e.kind==="gen"?e.level<Ua:e.level<Mn(e.chain)}function Gc(e,s){let t=[],i=0;for(let[n,o]of [[1,0],[-1,0],[0,1],[0,-1]]){let d={col:s.col+n,row:s.row+o};if(!Fc(e,d))continue;let p=e.cells[d.row][d.col];for(let E of ["block","cover"]){let O=p[E];if(!O)continue;let D=Yt[O.id];if(!D?.neighbour)continue;O.hp--;let T=O.hp<=0;T&&(p[E]=null,i+=D.coins??0),t.push({at:d,id:O.id,gone:T,revealed:T&&!!D.hides});}}return {hits:t,coins:i}}function Xc(e,s,t){if(!Mr(e,s)||!Fc(e,t)||s.col===t.col&&s.row===t.row)return ds(s);let i=jn(e,s),n=jn(e,t),o=i.thing;if(n.hole||n.block)return ds(s);if(ps(o,n)){let O=n.thing;i.thing=null,O.level++;let D=n.cover?.id;n.cover=null;let T=Gc(e,t);return {kind:"merge",at:t,level:O.level,...D?{freed:D}:{},hits:T.hits,coins:T.coins}}let d=o.kind==="special"?Sn(o.special):void 0,p=n.thing,E=!n.cover||!!Yt[n.cover.id]?.mergeInto;if(d?.effect==="joker"&&p?.kind==="item"&&E&&p.level<Mn(p.chain)){i.thing=null,p.level++;let O=n.cover?.id;n.cover=null;let D=Gc(e,t);return {kind:"joker",at:t,level:p.level,...O?{freed:O}:{},hits:D.hits,coins:D.coins}}if(d?.effect==="split"&&p?.kind==="item"&&!n.cover&&p.level>=2){i.thing=null;let O=fs(e,t);return O?(p.level--,e.cells[O.row][O.col].thing=lo(e,p.chain,p.level),{kind:"split",at:t,level:p.level,second:O,hits:[],coins:0}):(i.thing=o,ds(s))}return p?n.cover?ds(s):(i.thing=p,n.thing=o,{kind:"swap",at:t,hits:[],coins:0}):(i.thing=null,n.thing=o,{kind:"move",at:t,hits:[],coins:0})}function jc(e,s,t=0){let i=jn(e,s)?.thing;if(!i||i.kind!=="gen"||jn(e,s).cover)return null;let n=fs(e,s);if(!n)return null;let o=e.rand(),d=Math.max(1,Math.min(Ua,i.level)),p=d>=3&&o<Wc?3:o<(zc[d-1]??0)+t?2:1,E=lo(e,i.chain,Math.min(p,Mn(i.chain)));return e.cells[n.row][n.col].thing=E,{at:n,thing:E,burst:Ld(e)}}function Ld(e){let s=[];for(let t=0;t<e.rows;t++)for(let i=0;i<e.cols;i++){let n=e.cells[t][i];n.cover?.ttl!==void 0&&(n.cover.ttl--,!(n.cover.ttl>0)&&(n.cover=null,n.thing=null,s.push({col:i,row:t})));}return s}var Pd=e=>{let s=0;for(let[t,i]of ja)if(s+=i,e<s)return t;return 1};function Kc(e,s){let t=jn(e,s),i=t?.thing;if(!t||!i||i.kind!=="special"||t.cover)return null;let n=Sn(i.special);if(n?.effect==="energy")return t.thing=null,{energy:n.amount??5,spawned:[]};if(n?.effect!=="chest")return null;t.thing=null;let o=[];for(let d=0;d<(n.amount??3);d++){let p=fs(e,s);if(!p)break;let E=e.chains[Math.floor(e.rand()*e.chains.length)]??co[0].id,O=lo(e,E,Math.min(Mn(E),Pd(e.rand())));e.cells[p.row][p.col].thing=O,o.push({at:p,thing:O});}return o.length===0?(t.thing=i,null):{energy:0,spawned:o}}function qc(e,s={}){let t=dn(e).filter(o=>Mr(e,o.at)&&(o.thing.kind==="item"||s.gens!==false&&o.thing.kind==="gen")),i=null,n=1/0;for(let o of t)for(let d=0;d<e.rows;d++)for(let p=0;p<e.cols;p++){let E=e.cells[d][p];if(!ps(o.thing,E))continue;let O=(o.thing.kind==="gen"?100:0)+o.thing.level-(E.cover?.5:0);O<n&&(n=O,i=[o.at,{col:p,row:d}]);}return i}function Kn(e,s){let t=new Set,i=[],n=dn(e);for(let o of s){let d=n.find(p=>p.thing.kind==="item"&&!p.cell.cover&&!t.has(p.thing.id)&&p.thing.chain===o.chain&&p.thing.level===o.level);if(!d)return null;t.add(d.thing.id),i.push(d.at);}return i}function ni(e,s){let t=jn(e,s);if(!t?.thing)return null;let i=t.thing;return t.thing=null,i}function ri(e,s,t){let i=fs(e,t),n=wc(e,s);if(i)return e.cells[i.row][i.col].thing=n,{at:i,thing:n};let o=dn(e).filter(d=>d.thing.kind==="item"&&!d.cell.cover).sort((d,p)=>d.thing.level-p.thing.level)[0];return o?(o.cell.thing=n,{at:o.at,thing:n}):null}function Yc(e){let s=dn(e),t=Ad(e)>0;for(let i of s){if(i.thing.kind!=="special"||i.cell.cover)continue;let n=Sn(i.thing.special);if(n?.effect==="energy"||n?.effect==="chest"&&t||n?.effect==="joker"&&s.some(o=>o.thing.kind==="item"&&(!o.cell.cover||Yt[o.cell.cover.id]?.mergeInto)&&o.thing.level<Mn(o.thing.chain))||n?.effect==="split"&&t&&s.some(o=>o.thing.kind==="item"&&!o.cell.cover&&o.thing.level>=2))return true}return false}function Jc(e,s,t){let i=[];for(let n=0;n<s;n++){let o=dn(e).filter(E=>E.thing.kind==="item"&&!E.cell.cover&&E.thing.level<Mn(E.thing.chain)&&!i.some(O=>O.col===E.at.col&&O.row===E.at.row));if(o.length===0)break;let d=E=>t.some(O=>O.chain===E.thing.chain&&O.level===E.thing.level+1);o.sort((E,O)=>Number(d(O))-Number(d(E))||E.thing.level-O.thing.level);let p=o[0];p.thing.level++,i.push(p.at);}return i}var oi=90,fo=b("merge.item"),el=b("merge.order"),si=b("merge.layer"),Zc=b("merge.backdrop"),Qc=b("merge.part"),_r=b("merge.customer"),Rr=(e,s)=>{let t=Number(e.vars[s]??0);return Number.isFinite(t)?t:0},us={id:"merge",version:2,engines:["phaser"],requires:["round"],params:{difficulty:{type:"number",default:.5,min:0,max:1},orderReward:{type:"number",default:1,min:0,max:100},mergeScore:{type:"number",default:10,min:1,max:1e3,integer:true},energyBonus:{type:"number",default:20,min:0,max:1e4,integer:true}},setup({world:e$1,params:s}){let t=a=>qt(s,a),i=e$1.rng.stream("merge"),n=Sr(1,t("difficulty")),o=ti(Xn.start,["garden"],()=>i.next()),d=K(),p=new Map,E=new Map,O=null,D=[],T=[],N=0,w=0,W=0,te=0,ue=0,F=0,ie=0,Q=0,re=false,_e=false,me=null,ke=[],fe=()=>Er.find(a=>a.id===e$1.vars["meta:hero"])??Er[0],he=()=>ss(fe().skill),se=()=>e$1.vars.reviving===true,De=()=>he().charge,We=()=>Rr(e$1,"meta:luck"),Pe=()=>D.flatMap(a=>a.order.wants);function K(){return Cn(Ie(e$1),o.cols,o.rows,{top:.3,bottom:.86,widthShare:.94})}let Ee=()=>d.cell,q=new Set,ve=(a,f$1,m,y,P=1)=>{q.add(a);let z=E.get(a);(z===void 0||!e$1.isAlive(z))&&(z=e$1.create(),e$1.set(z,Qc,{id:a}),E.set(a,z)),e$1.set(z,e,{x:f$1,y:m,scale:P}),e$1.set(z,f,y);},xe=()=>{for(let[a,f]of [...E])q.has(a)||(e$1.destroy(f),E.delete(a));},ye=a=>{if(a.kind==="special")return Sn(a.special)?.art??"chest";let f=ln(a.chain);return a.kind==="gen"?f?.gen??"chest":`${f?.prefix??"item"}${Math.min(a.level,f?.levels??8)}`},Ae=a=>{let f=Ee(),m=a.kind==="gen"?.94:.92;return {shape:"sprite",art:ye(a),w:f*m,h:f*m,depth:3}},He=()=>{let a=new Map(dn(o).map(f=>[f.thing.id,f]));for(let[f,m]of [...p])a.has(f)||(e$1.destroy(m),p.delete(f));for(let[f$1,m]of a){let y=p.get(f$1);if(y===void 0){y=e$1.create();let I=Ye(d,m.at.col,m.at.row);e$1.set(y,e,{x:I.x,y:I.y,scale:.3}),p.set(f$1,y);}e$1.set(y,fo,{id:f$1,col:m.at.col,row:m.at.row});let P=Ae(m.thing),z=m.cell.cover&&Yt[m.cell.cover.id]?.hides;e$1.set(y,f,{...P,alpha:z?0:1,depth:O?.id===f$1?30:3});}Z(),Xe();},Z=()=>{et(e$1,si);let a=Ee();for(let f$1=0;f$1<o.rows;f$1++)for(let m=0;m<o.cols;m++){let y=o.cells[f$1][m],P=Ye(d,m,f$1);for(let[z,I,X]of [["b",y.block,3],["c",y.cover,5]]){if(!I)continue;let ee=Yt[I.id],J=ee?.art[Math.min(ee.art.length,Math.max(1,I.hp))-1]??"mg_box",Le=e$1.create();e$1.set(Le,si,{key:`${z}${m},${f$1}`}),e$1.set(Le,e,{x:P.x,y:P.y}),e$1.set(Le,f,{shape:"sprite",art:J,w:a*.98,h:a*.98,depth:X,alpha:I.id==="bubble"&&(I.ttl??99)<=3?.55+.4*Math.abs(Math.sin(e$1.time*6)):1});}}},be=()=>{et(e$1,Zc),Et(e$1,"board",d.top+d.cell*o.rows*.3);let a=Ee(),f$1=Ye(d,(o.cols-1)/2,(o.rows-1)/2),m=a*.22,y=(P,z,I)=>{let X=e$1.create();e$1.set(X,Zc,{i:0}),e$1.set(X,e,{x:P,y:z}),e$1.set(X,f,I);};y(f$1.x,f$1.y,{shape:"sprite",art:"panel",w:a*o.cols+m*2,h:a*o.rows+m*2,color:"panel",alpha:.9,depth:-10});for(let P=0;P<o.rows;P++)for(let z=0;z<o.cols;z++){if(o.cells[P][z].hole)continue;let I=Ye(d,z,P);y(I.x,I.y,{shape:"sprite",art:"cell",w:a-3,h:a-3,color:(P+z)%2?"panel":"ground",alpha:.85,depth:-9});}},tt=()=>Math.max(1,n.def.visible),Se=a=>{let f=Ie(e$1),m=tt(),y=Math.min(f.w*.3,Ee()*2.6),P=f.w/2+(a-(m-1)/2)*(y+Ee()*.2),z=y*(m>2?.62:.72),I=f.h*.118+z/2,X=d.top-Ee()*.18;return {x:P,y:I,w:y,h:z,feet:X}},nt=(a,f$1,m)=>{let y=Se(a),P=Math.max(24,(y.feet-(y.y+y.h/2))*1.05),z=m?-P:y.x,I=e$1.create();return e$1.set(I,e,{x:z,y:y.feet-P/2}),e$1.set(I,f,{shape:"actor",cast:f$1.vip?"boss":"helper",variant:f$1.vip?7:i.int(0,99),h:P,pose:m?"walk":"idle",facing:1,speed:oi,depth:6}),e$1.set(I,_r,{slot:a,to:y.x,leaving:-1}),I},rt=a=>{for(let f=0;f<tt();f++){if(D.some(y=>y.slot===f))continue;let m=T.shift();m&&D.push({order:m,slot:f,customer:nt(f,m,a)});}},Ze=(a,f$1)=>{for(let m of a.query(_r)){let y=a.need(m,_r),P=a.need(m,e),z=a.need(m,f);if(z.shape!=="actor")continue;if(y.leaving>=0){y.leaving+=f$1,y.leaving>.7&&(z.pose="walk",z.facing=1,P.x+=oi*1.4*f$1);continue}let I=y.to-P.x;Math.abs(I)>1?(P.x+=Math.sign(I)*Math.min(Math.abs(I),oi*2*f$1),z.pose="walk",z.facing=I>0?1:-1):z.pose==="walk"&&(P.x=y.to,z.pose="idle");}},Ue=a=>Math.max(1,Math.round(a.wants.reduce((f,m)=>f+m.level,0)*t("orderReward")*(a.vip?3:1)*(1+Rr(e$1,"meta:reward")))),ot=a=>{let f=Kn(o,a.order.wants);if(!f)return false;let m=Se(a.slot);for(let z of f){let I=Ye(d,z.col,z.row);B(e$1,{kind:"burst",x:I.x,y:I.y,color:"coin",n:8,size:Ee()*.8}),ni(o,z);}let y=Ue(a.order);we(e$1,"coins",y),we(e$1,"score",y*25),B(e$1,{kind:"burst",x:m.x,y:m.y,color:"coin",n:14,size:m.w*.8}),B(e$1,{kind:"pop",x:m.x,y:m.y-m.h*.5,text:`+${y}`,color:"coin",size:Math.round(m.h*.42)}),e$1.emit("coin-collected",{value:y}),e$1.emit("order-filled",{reward:y,vip:a.order.vip}),mt(e$1,"merge-order"),ue++;let P=e$1.get(a.customer,_r);return P&&(P.leaving=0,Be(e$1,a.customer,"cheer"),Fn(e$1,a.customer,2.4)),D=D.filter(z=>z!==a),rt(true),He(),D.length===0&&T.length===0&<(),true},Ge=(a,f,m,y,P,z)=>{let I=Math.max(8,y*.11);ve(`${a}:bg`,f,m,{shape:"rect",w:y,h:I,color:"#000000",alpha:.5,radius:I/2,depth:69});let X=Math.max(1,(y-4)*Math.max(0,Math.min(1,P)));ve(`${a}:fill`,f-(y-4)/2+X/2,m,{shape:"rect",w:X,h:I-4,color:z,radius:(I-4)/2,depth:69.1});},bt=()=>{let a=Ie(e$1),f$1=Math.min(a.w,a.h),m=Ee(),y=(le,ce,j,r,l="text",b=f$1*.045,c=70)=>ve(le,ce,j,{shape:"text",text:r,size:Math.round(b),color:l,bold:true,depth:c});ke=[],q.clear();let P=a.h*.085;ve("h:en:i",a.w*.1,P,{shape:"sprite",art:"mg_energy",w:f$1*.07,h:f$1*.07,depth:70}),y("h:en",a.w*.1+f$1*.075,P,String(N),N<=3&&W===0?"danger":"text",f$1*.06),W>0&&y("h:free",a.w*.1+f$1*.17,P,`+${W}`,"secondary",f$1*.04);let z=D.length+T.length;ve("h:ord:i",a.w*.8,P,{shape:"sprite",art:"ticket",w:f$1*.075,h:f$1*.05,color:"panel",depth:70}),y("h:ord",a.w*.8+f$1*.08,P,String(z),"text",f$1*.05);for(let le of D){let ce=Se(le.slot);Kn(o,le.order.wants)!==null&&ve(`h:t${le.slot}:glow`,ce.x,ce.y,{shape:"rect",w:ce.w*1.08,h:ce.h*1.14,color:"accent",alpha:.45+.3*Math.sin(e$1.time*6),radius:ce.h*.2,depth:7.9}),ve(`h:t${le.slot}`,ce.x,ce.y,{shape:"sprite",art:"ticket",w:ce.w,h:ce.h,color:le.order.vip?"coin":"panel",depth:8});let r=le.order.wants.length,l=Math.min(ce.h*.58,ce.w*.86/r);le.order.wants.forEach((b,c)=>{let u=ce.x+(c-(r-1)/2)*l*1.05,M=ce.y-ce.h*.12,k=ln(b.chain);ve(`h:t${le.slot}:${c}`,u,M,{shape:"sprite",art:`${k?.prefix??"item"}${Math.min(b.level,k?.levels??8)}`,w:l,h:l,depth:8.1}),Kn(o,[b])?y(`h:t${le.slot}:${c}:ok`,u+l*.32,M+l*.32,"\u2713","accent",l*.42,8.2):y(`h:t${le.slot}:${c}:lv`,u+l*.34,M+l*.34,String(b.level),"coin",l*.3,8.2);}),ve(`h:t${le.slot}:c`,ce.x-ce.w*.1,ce.y+ce.h*.3,{shape:"sprite",art:"coin",w:ce.h*.19,h:ce.h*.19,depth:8.1}),y(`h:t${le.slot}:cv`,ce.x+ce.w*.07,ce.y+ce.h*.3,String(Ue(le.order)),"coin",ce.h*.2,8.1),ke.push({id:`order${le.slot}`,x:ce.x,y:ce.y,r:ce.w*.5});}let I=Pe();for(let le of dn(o)){if(le.cell.cover&&Yt[le.cell.cover.id]?.hides)continue;let ce=p.get(le.thing.id);if(ce===void 0)continue;let j=e$1.need(ce,e),r=O?.id===le.thing.id?31:6;if(le.thing.kind==="gen")for(let l=0;l<le.thing.level;l++)ve(`h:i${le.thing.id}:s${l}`,j.x+(l-(le.thing.level-1)/2)*m*.2,j.y+m*.38,{shape:"circle",r:m*.075,color:"coin",depth:r});else le.thing.kind==="item"&&(I.some(l=>l.chain===le.thing.chain&&l.level===le.thing.level)&&(ve(`h:i${le.thing.id}:ok`,j.x+m*.3,j.y-m*.3,{shape:"circle",r:m*.12,color:"accent",depth:r}),y(`h:i${le.thing.id}:okt`,j.x+m*.3,j.y-m*.3,"\u2713","#ffffff",m*.18,r+.1)),y(`h:i${le.thing.id}:lv`,j.x+m*.3,j.y+m*.3,String(le.thing.level),"coin",m*.22,r));}let X=d.top+m*o.rows+(a.h-(d.top+m*o.rows))*.5,ee=Math.min(f$1*.075,(a.h-(d.top+m*o.rows))*.38),J=a.w*.3,Le=te>=De();ke.push({id:"skill",x:J,y:X,r:ee*1.2}),Le&&ve("h:skill:glow",J,X,{shape:"circle",r:ee*1.28,color:"secondary",alpha:.5+.3*Math.sin(e$1.time*7),depth:68.9}),ve("h:skill:bg",J,X,{shape:"circle",r:ee,color:"panel",alpha:.95,depth:69}),ve("h:skill:i",J,X,{shape:"sprite",art:he().art,w:ee*1.4,h:ee*1.4,alpha:Le?1:.45,depth:69.2}),Ge("h:charge",J+ee*2.6,X,ee*2.4,te/De(),"secondary");let Oe=a.w*.88;ke.push({id:"bin",x:Oe,y:X,r:ee*1.1});let Re=O?p.get(O.id):void 0,G=Re!==void 0?e$1.need(Re,e):null,ne=G!==null&&Math.hypot(G.x-Oe,G.y-X)<ee*1.3;ve("h:bin:bg",Oe,X,{shape:"circle",r:ee,color:ne?"danger":"panel",alpha:.95,depth:69}),ve("h:bin",Oe,X,{shape:"sprite",art:"mg_bin",w:ee*1.3,h:ee*1.3,alpha:O?1:.7,depth:69.2}),(me===null||!e$1.isAlive(me))&&(me=e$1.create(),e$1.set(me,f,{shape:"actor",cast:fe().cast,h:ee*2.6,pose:"idle",facing:1,depth:20})),e$1.set(me,e,{x:a.w*.11,y:X-ee*.1});let Te=e$1.need(me,f);Te.shape==="actor"&&(Te.h=ee*2.6),e$1.vars.mg_buttons=ke.map(le=>`${le.id}@${Math.round(le.x)},${Math.round(le.y)}`).join(";"),xe();},Xe=()=>{e$1.vars.energy=N,e$1.vars.mg_free=W,e$1.vars.mg_charge=Math.floor(te),e$1.vars.orders_left=D.length+T.length,e$1.vars.mg_orders=D.slice().sort((a,f)=>a.slot-f.slot).map(a=>a.order.wants.map(f=>`${f.chain}:${f.level}`).join("+")).join("|"),e$1.vars.level_progress=n.orders.length?ue/n.orders.length:0;},st=()=>{et(e$1,fo),et(e$1,si),et(e$1,Qc),et(e$1,_r),p.clear(),E.clear(),me!==null&&e$1.isAlive(me)&&e$1.destroy(me),me=null,n=Sr(Rr(e$1,"meta:chapter")||1,t("difficulty")),o=ti(Xn[n.def.board]??Xn.start,n.def.chains,()=>i.next()),d=K(),be(),O=null,D=[],T=[...n.orders],N=Math.max(0,n.energy+Math.round(Rr(e$1,"meta:energy"))),w=N,W=0,te=0,ue=0,F=0,ie=0,Q=0,re=false,_e=false,e$1.vars.mg_level=n.level,e$1.vars.mg_world=n.world,e$1.vars.coins=0,e$1.vars.score=0,e$1.vars.stars=0,e$1.vars.reviving=false,rt(false),He();},lt=()=>{_e||(e$1.vars.stars=Math.min(re?1:3,cs(N/Math.max(1,w))),we(e$1,"score",N*t("energyBonus")),B(e$1,{kind:"flash",color:"coin"}),je("cleared"));},je=a=>{if(_e)return;_e=true;let f=a==="cleared";f&&e$1.vars["meta:first_clear"]===true&&we(e$1,"coins",n.firstClearGold),f||(e$1.vars.stars=0),e$1.vars.reviving=false,Xe(),e$1.emit(Lt,{reason:a,stats:{chapter:n.level,seconds:Math.floor(ie),cleared:f,stars:Number(e$1.vars.stars??0),coins:Number(e$1.vars.coins??0),orders:ue,merges:F}});},Fe=()=>{if(e$1.vars.revive_ready===true&&!re){e$1.vars.reviving=true,e$1.emit(Wt,{});return}je("out-of-energy");},it=()=>{se()&&(re=true,e$1.vars.reviving=false,N+=ls,ri(o,"joker",{col:Math.floor(o.cols/2),row:Math.floor(o.rows/2)}),B(e$1,{kind:"flash",color:"coin"}),He());},dt=()=>{if(N>0||W>0||te>=De()||D.some(m=>Kn(o,m.order.wants))||Yc(o))return true;let a=[...Pe(),...T.flatMap(m=>m.wants)],f=dn(o);for(let m of f)if(!(!Mr(o,m.at)||m.thing.kind!=="item")&&a.some(y=>y.chain===m.thing.chain&&y.level>m.thing.level)&&f.some(y=>ps(m.thing,y.cell)))return true;return false},Tt=a=>{let f=Ee(),m=Ye(d,a.at.col,a.at.row);if(a.kind==="merge"||a.kind==="joker"){let y=o.cells[a.at.row][a.at.col].thing,P=ln(y.chain)?.color??"coin";B(e$1,{kind:"ring",x:m.x,y:m.y,color:P,size:f*1.4}),B(e$1,{kind:"burst",x:m.x,y:m.y,color:"coin",n:8,size:f*.8});let z=p.get(y.id);z!==void 0&&(e$1.need(z,e).scale=1.35),F++,te=Math.min(De(),te+1+Rr(e$1,"meta:charge")),we(e$1,"score",Math.pow(2,y.level)*t("mergeScore")),e$1.emit("items-merged",{level:y.level,chain:y.chain}),mt(e$1,"merge-merge"),y.kind==="item"&&y.level===Mn(y.chain)&&B(e$1,{kind:"flash",color:"coin"});for(let I of D)I.order.wants.some(X=>X.chain===y.chain&&X.level===y.level)&&Be(e$1,I.customer,"wave");}a.kind==="split"&&B(e$1,{kind:"ring",x:m.x,y:m.y,color:"secondary",size:f*1.2}),a.freed&&e$1.emit("obstacle-cleared",{kind:a.freed});for(let y of a.hits){let P=Ye(d,y.at.col,y.at.row);B(e$1,{kind:"burst",x:P.x,y:P.y,color:y.id==="fog"?"#ffffff":"ground",n:y.gone?10:4,size:f*.9}),y.gone&&e$1.emit("obstacle-cleared",{kind:y.id});}a.coins>0&&(we(e$1,"coins",a.coins),e$1.emit("coin-collected",{value:a.coins}),B(e$1,{kind:"pop",x:m.x,y:m.y-f*.5,text:`+${a.coins}`,color:"coin",size:Math.round(f*.4)})),a.hits.length&&B(e$1,{kind:"shake",power:.25});},Ct=a=>{if(N<=0&&W<=0){let z=Ye(d,a.col,a.row);B(e$1,{kind:"pop",x:z.x,y:z.y-Ee()*.5,text:"0",color:"danger",size:Math.round(Ee()*.4)});return}let f=jc(o,a,We()),m=Ye(d,a.col,a.row);if(!f){B(e$1,{kind:"shake",power:.2}),B(e$1,{kind:"pop",x:m.x,y:m.y-Ee()*.5,text:"\u2715",color:"danger",size:Math.round(Ee()*.45)});return}W>0?W--:N--,mt(e$1,"merge-generate");let y=p.get(o.cells[a.row][a.col].thing.id);y!==void 0&&(e$1.need(y,e).scale=1.2),B(e$1,{kind:"burst",x:m.x,y:m.y,color:ln(f.thing.chain)?.color??"accent",n:6,size:Ee()*.7}),e$1.emit("item-spawned",{level:f.thing.level,chain:f.thing.chain}),He();let P=p.get(f.thing.id);P!==void 0&&e$1.set(P,e,{x:m.x,y:m.y,scale:.4});for(let z of f.burst){let I=Ye(d,z.col,z.row);B(e$1,{kind:"burst",x:I.x,y:I.y,color:"#ffffff",n:10,size:Ee()});}},Nt=a=>{let f=Kc(o,a);if(!f)return;let m=Ye(d,a.col,a.row);B(e$1,{kind:"ring",x:m.x,y:m.y,color:"coin",size:Ee()*1.6}),f.energy>0&&(N+=f.energy,B(e$1,{kind:"pop",x:m.x,y:m.y-Ee()*.5,text:`+${f.energy}`,color:"coin",size:Math.round(Ee()*.45)})),He();for(let y of f.spawned){let P=p.get(y.thing.id);P!==void 0&&e$1.set(P,e,{x:m.x,y:m.y,scale:.4});}},R=()=>{let a=he();if(te<a.charge)return false;let f=1+Rr(e$1,"meta:skill"),m=Math.max(1,Math.round(a.count*f));if(te=0,me!==null&&Be(e$1,me,"cheer"),B(e$1,{kind:"flash",color:"secondary"}),a.effect==="upgrade")for(let y of Jc(o,m,[...Pe(),...T.slice(0,2).flatMap(P=>P.wants)])){let P=Ye(d,y.col,y.row);B(e$1,{kind:"ring",x:P.x,y:P.y,color:"secondary",size:Ee()*1.4});}else if(a.effect==="free")W+=m;else for(let y=0;y<m;y++)ri(o,"joker",{col:Math.floor(o.cols/2),row:Math.floor(o.rows/2)});return e$1.emit("skill-cast",{id:a.id}),mt(e$1,"merge-skill"),He(),true},C=(a,f)=>ke.find(m=>Math.hypot(a-m.x,f-m.y)<=m.r);e$1.on(j,a=>{let f$1=a;if(!(!qe(e$1)||In(e$1)||_e||se())){if(f$1.type==="press"){St(e$1),Q=0;let m=bn(d,f$1.x,f$1.y);if(!m||!Mr(o,m))return;let y=o.cells[m.row][m.col].thing.id,P=p.get(y);if(P===void 0)return;let z=e$1.need(P,e);O={id:y,from:m,dx:z.x-f$1.x,dy:z.y-f$1.y,x0:f$1.x,y0:f$1.y},e$1.need(P,f).depth=30;}else if(f$1.type==="move"&&O){let m=p.get(O.id);if(m===void 0)return;let y=e$1.need(m,e);y.x=f$1.x+O.dx,y.y=f$1.y+O.dy,y.scale=1.12;}else if(f$1.type==="release"&&O){let m=O;O=null;let y=p.get(m.id);if(y!==void 0&&(e$1.need(y,f).depth=3),Math.hypot(f$1.x-m.x0,f$1.y-m.y0)<Ee()*.3)return;let P=C(f$1.x,f$1.y),z=o.cells[m.from.row][m.from.col].thing;if(P?.id==="bin"&&z&&z.kind!=="gen"){ni(o,m.from),mt(e$1,"merge-bin"),He();return}let I=P?.id.startsWith("order")?D.find(J=>`order${J.slot}`===P.id):void 0;if(I&&z?.kind==="item"&&I.order.wants.some(J=>J.chain===z.chain&&J.level===z.level)&&ot(I))return;let X=bn(d,f$1.x,f$1.y);if(!X)return;let ee=Xc(o,m.from,X);ee.kind!=="none"&&Tt(ee),He();}else if(f$1.type==="tap"){Q=0;let m=C(f$1.x,f$1.y);if(m?.id==="skill"){R();return}if(m?.id.startsWith("order")){let z=D.find(I=>`order${I.slot}`===m.id);z&&ot(z);return}let y=bn(d,f$1.x,f$1.y),P=y?o.cells[y.row][y.col].thing:null;if(!y||!P||!Mr(o,y))return;if(P.kind==="gen")Ct(y);else if(P.kind==="special")Nt(y);else {let z=D.find(I=>I.order.wants.some(X=>X.chain===P.chain&&X.level===P.level)&&Kn(o,I.order.wants));z&&ot(z);}}}}),e$1.on(At,()=>{st(),e$1.vars.level=n.level;}),e$1.on(It,st),e$1.on($t,it),e$1.on(Bt,()=>{se()&&(e$1.vars.reviving=false,je("out-of-energy"));}),e$1.on(Pt,a=>{q.clear(),xe(),ke=[],me!==null&&e$1.isAlive(me)&&Je(e$1,me,a.reason==="cleared"?"dance":"idle");}),e$1.on(k,()=>{d=K(),be();for(let a of D){let f$1=Se(a.slot),m=e$1.get(a.customer,_r);m&&(m.to=f$1.x);let y=e$1.get(a.customer,e),P=Math.max(24,(f$1.feet-(f$1.y+f$1.h/2))*1.05);y&&e$1.set(a.customer,e,{x:f$1.x,y:f$1.feet-P/2});let z=e$1.get(a.customer,f);z?.shape==="actor"&&(z.h=P);}He();});let h=a=>{let f=Math.min(1,a*16);for(let[m,y]of p){if(O?.id===m)continue;let P=e$1.get(y,fo);if(!P)continue;let z=e$1.need(y,e),I=Ye(d,P.col,P.row);z.x+=(I.x-z.x)*f,z.y+=(I.y-z.y)*f;let X=z.scale??1;z.scale=X+(1-X)*Math.min(1,a*10);}},S=a=>{let f=D.find(y=>Kn(o,y.order.wants));if(f&&(!pt(a,"merge-order")||Q>6)){let y=Se(f.slot);return ft(a,"tap",{x:y.x,y:y.y},void 0,Ee()*1.1)}let m=qc(o,{gens:false});if(m&&(!pt(a,"merge-merge")||Q>6))return ft(a,"swipe",Ye(d,m[0].col,m[0].row),Ye(d,m[1].col,m[1].row),Ee()*1.1);if(te>=De()&&!pt(a,"merge-skill")){let y=ke.find(P=>P.id==="skill");if(y)return ft(a,"tap",y,void 0,Ee()*1.1)}if(!pt(a,"merge-generate")||Q>6){let y=dn(o).find(P=>P.thing.kind==="gen"&&!P.cell.cover);y&&(N>0||W>0)&&ft(a,"tap",Ye(d,y.at.col,y.at.row),void 0,Ee()*1.1);}},v=0;e$1.addSystem({id:"merge",order:0,run(a,f){Ze(a,f),h(f),!(!qe(a)||_e)&&(ie+=f,Q+=f,bt(),++v%20===0&&o.cells.some(m=>m.some(y=>y.cover?.ttl!==void 0&&y.cover.ttl<=3))&&Z(),!(se()||O)&&(rn(a)||S(a),dt()||Fe()));}}),st();}};var Dt=10,tl={id:"start",needs:[],rows:["..............","..............","..............","..............","..............","..............",".......o.o.o..",".P............","##############","##############"]},nl={id:"checkpoint",needs:[],rows:["..........","..........","..........","..........","..........","..........","...o..o...","....C.....","##########","##########"]},rl={id:"end",needs:[],rows:["..............","..............","..............","..............","..............","..............",".....o.o......","..........E...","##############","##############"]},ol={id:"boss",needs:[],rows:["..................","..................","..................","..................","...===......===...","..................","..................","..................","##################","##################"]},hs=[{id:"walk",needs:["walker"],rows:["..............","..............","..............","..............",".....ooo......","....o...o.....","..............",".........W....","##############","##############"]},{id:"two-walkers",needs:["walker"],rows:["..............","..............","..............","......*.......",".....===......","..............","..o........o..","...W......W...","##############","##############"]},{id:"gaps",needs:["gaps"],rows:["..............","..............","..............","..............","..............","....o.....o...","...o.o...o.o..","..............","###...###...##","###...###...##"]},{id:"stairs",needs:["stairs"],rows:["..............","...........*..","..........===.","..............",".......###....",".......###.o..","....##########","....##########","##############","##############"]},{id:"spikes",needs:["spikes"],rows:["..............","..............","..............","..............","..............",".....ooo......","....=====.....","..............","###^^^^^^^####","##############"]},{id:"pits",needs:["pits"],rows:["..............","..............","..............","..............","......o.......",".....===...o..","..o.......===.",".===..........","##..........##","##..........##"]},{id:"spring",needs:["spring"],rows:["..............",".........*....","........####..","..............","..............","..............","..............","...T..........","##############","##############"]},{id:"hopper",needs:["hopper"],rows:["..............","..............","..............","..............",".....o...o....","..............","..............",".......J......","##############","##############"]},{id:"crumble",needs:["crumble"],rows:["..............","..............","..............","..............","..............","...o.o.o.o....","...______.....","..............","##........####","##........####"]},{id:"spiky",needs:["spiky"],rows:["..............","..............","..............","..............","..............","......ooo.....","..............",".......S......","##############","##############"]},{id:"moving",needs:["moving"],rows:["..............","..............","..............","..............",".....o..o.....","..............",".....M........","..............","##..........##","##..........##"]},{id:"flyer",needs:["flyer"],rows:["..............","..............","..............","......F.......","..............","..............","...o......o...","..............","##############","##############"]},{id:"key",needs:["key"],rows:["..............","..............","..K...........",".===..........","..............",".......===....","..............","...........B..","##############","##############"]},{id:"gunner",needs:["gunner"],rows:["..............","..............","..............","..............","..............",".....o.o......","....=====.....","...........G..","##############","##############"]},{id:"heart",needs:["walker","stairs"],rows:["..............","..............","..*...........","..............","......H.......",".....===......","..............","...W......W...","##############","##############"]},{id:"secret-high",needs:["spring","gaps"],rows:["..............","..*...........",".===..........","..............","..............","..............","........T.....","..............","#####...######","#####...######"]}],ai=4,qn=5,ys=ai*qn,ms={walker:1,gaps:1,spikes:2,stairs:2,pits:3,spring:3,hopper:4,crumble:4,spiky:6,moving:6,flyer:7,key:8,gunner:9},ii=[0,9,24,39];function Dr(e,s=.5){let t=Math.max(1,Math.min(ys,Math.floor(e))),i=Math.ceil(t/qn),n=t-(i-1)*qn,o=n===qn,d=Object.keys(ms).filter(E=>ms[E]<=t),p=Object.keys(ms).find(E=>ms[E]===t)??null;return {level:t,world:i,index:n,boss:o,features:d,fresh:p,rooms:o?2:3+Math.min(5,Math.floor((t-1)/2)),pace:.85+s*.3+(t-1)*.02,bossHp:3+i,firstClearGold:(o?150:60)+(t-1)*20}}var ci=e=>ii[Math.ceil(Math.max(1,e)/qn)-1]??0,li=[{id:"double",stars:6},{id:"dash",stars:15},{id:"wall",stars:27}],gs=e=>li.filter(s=>e>=s.stars).map(s=>s.id),Tr=[{id:"hero",cast:"hero",gems:0,perk:"none"},{id:"hero2",cast:"hero2",gems:150,perk:"heart"},{id:"hero3",cast:"hero3",gems:300,perk:"jump"}],di="kit-platformer",fi=[{id:"Hearts",var:"meta:hearts",art:"heart",color:"danger",perLevel:1,unit:"",maxLevel:3,price:150,growth:1.2},{id:"JumpPower",var:"meta:jump",art:"boot",color:"accent",perLevel:2,unit:"%",maxLevel:10,price:40,growth:.15},{id:"Magnet",var:"meta:magnet",art:"magnet",color:"danger",perLevel:10,unit:"%",maxLevel:10,price:30,growth:.12},{id:"Grace",var:"meta:grace",art:"shield",color:"muted",perLevel:.2,unit:"s",maxLevel:10,price:35,growth:.12},{id:"Greed",var:"meta:greed",art:"coin",color:"coin",perLevel:2,unit:"%",maxLevel:25,price:40,growth:.1}],sl={game:"platformer",character:di,stats:fi,heroes:Tr,levels:ys,firstClearGold:e=>Dr(e).firstClearGold,stars:3,starsToEnter:ci};var Id="boss-spawned",Cd="boss-defeated",pi="level-cleared",Gt=b("platformer.body"),at=b("platformer.thing"),po=b("platformer.strip"),tn=b("platformer.hero"),al=b("platformer.hud"),Wn=(e,s)=>{let t=Number(e.vars[s]??0);return Number.isFinite(t)?t:0},Nd=6,Yn=40,zd=3.3,Wd=6.8,$d=.7,il=1.3,bs={id:"platformer",version:2,engines:["phaser"],requires:["round"],params:{difficulty:{type:"number",default:.5,min:0,max:1},lives:{type:"number",default:3,min:1,max:9,integer:true},coinScore:{type:"number",default:10,min:0,max:1e3,integer:true},starScore:{type:"number",default:300,min:0,max:1e4,integer:true},clearBonus:{type:"number",default:500,min:0,max:1e5,integer:true},graceTime:{type:"number",default:1.2,min:0,max:5},doubleJump:{type:"boolean",default:false}},setup({world:e$1,params:s}){let t=h=>qt(s,h),i=fr(e$1),n=Dr(1,t("difficulty")),o=[],d=0,p=null,E=0,O={x:2,y:8},D=3,T=3,N=0,w=false,W=false,te=0,ue=0,F=0,ie=false,Q=false,re=[],_e=[false,false,false],me=new Map,ke=new Map,fe=()=>Tr.find(h=>h.id===e$1.vars["meta:hero"])??Tr[0],he=()=>e$1.vars.reviving===true,se=()=>{let h=Number(e$1.vars.view_w??720),S=Number(e$1.vars.view_h??1280);return Math.min(h/8,S*.66/10)},De=()=>Number(e$1.vars.view_h??1280)*.86-10*se(),We=()=>Number(e$1.vars.view_w??720)/se(),Pe=(h,S)=>{if(S<0)return ".";if(h<0||h>=d)return "#";if(S>=10)return ".";let v=o[S]?.[h]??".";return v==="_"&&(me.get(`${h},${S}`)??0)>.5?".":v},K=h=>h==="#",Ee=h=>h==="="||h==="_"||h==="^",q=()=>{for(let I of e$1.query(at))e$1.destroy(I);for(let I of e$1.query(po))e$1.destroy(I);me.clear(),n=Dr(Wn(e$1,"meta:chapter")||1,t("difficulty"));let h=e$1.rng.stream(`platformer-level-${n.level}`),S=hs.filter(I=>I.needs.every(X=>n.features.includes(X))),v=[],a=n.fresh!==null?S.find(I=>I.needs.includes(n.fresh)):void 0;for(a&&v.push(a);v.length<n.rooms;)v.push(h.pick(S));let f=Math.ceil(v.length/2),m=[tl,...v.slice(0,f),nl,...v.slice(f),n.boss?ol:rl];o=Array.from({length:10},(I,X)=>m.map(ee=>ee.rows[X]??"").join("")),d=o[0].length;let y=[];for(let I=0;I<10;I++)for(let X=0;X<d;X++)o[I][X]==="*"&&y.push({c:X,r:I});let P=y.length<=3?y:[y[0],y[Math.floor(y.length/2)],y[y.length-1]];for(let I=P.length;I<3;I++)P.push({c:Math.floor(d*(I+1)/4),r:5});let z=0;for(let I=0;I<10;I++)for(let X=0;X<d;X++){let ee=o[I][X],J={x:X+.5,y:I+1};ee==="P"?O={...J}:ee==="o"?ye("coin",J.x,I+.85,.5,.5):ee==="H"&&z++<1?ye("heart",J.x,I+.9,.6,.6):ee==="K"?ye("key",J.x,I+.9,.6,.6):ee==="B"?ye("chest",J.x,J.y,1,.8):ee==="T"?ye("spring",J.x,J.y,1,.5):ee==="M"?ye("mover",J.x+.5,I+.4,2,.4).baseX=J.x+.5:ee==="C"?ye("checkpoint",J.x,J.y,.6,1.6):ee==="E"?ye("flag",J.x,J.y,.8,2.6):ee==="W"?ye("walker",J.x,J.y,.8,1):ee==="S"?ye("spiky",J.x,J.y,.8,1):ee==="J"?ye("hopper",J.x,J.y,.8,1):ee==="F"?ye("flyer",J.x,J.y,.9,.8):ee==="G"&&ye("gunner",J.x,J.y,.8,1.1),/[PoHKBTMCEWSJFG*]/.test(ee)&&(o[I]=ve(o[I],X,"."));}if(P.forEach((I,X)=>ye("star",I.c+.5,I.r+.95,.85,.85).tag=String(X)),n.boss){let I=ye("boss",d-5,8,2.2,2.4);I.hp=n.bossHp,I.tag="walk",I.t=2;}Ae();},ve=(h,S,v)=>h.slice(0,S)+v+h.slice(S+1),xe=(h,S,v,a)=>{switch(h){case "walker":return {shape:"actor",cast:"foe",h:v*a*1.35,pose:"walk",depth:8};case "spiky":return {shape:"actor",cast:"foe2",h:v*a*1.4,pose:"walk",depth:8};case "hopper":return {shape:"actor",cast:"foe3",h:v*a*1.35,pose:"idle",depth:8};case "flyer":return {shape:"actor",cast:"foe5",h:v*a*1.4,pose:"air",depth:8};case "gunner":return {shape:"actor",cast:"foe4",h:v*a*1.3,pose:"idle",depth:8};case "boss":return {shape:"actor",cast:"boss",h:v*a*1.2,pose:"walk",depth:8};case "bullet":return {shape:"sprite",art:"shot",color:"danger",w:S*a,h:v*a,depth:9};case "wave":return {shape:"sprite",art:"burst",color:"danger",w:S*a,h:v*a,depth:9};case "coin":return {shape:"sprite",art:"coin",w:S*a,h:v*a,depth:7};case "star":return {shape:"sprite",art:"bigstar",w:S*a,h:v*a,depth:7};case "heart":return {shape:"sprite",art:"heart",w:S*a,h:v*a,depth:7};case "key":return {shape:"sprite",art:"key",w:S*a,h:v*a,depth:7};case "chest":return {shape:"sprite",art:"chest",w:S*a,h:v*a*1.1,depth:6};case "spring":return {shape:"sprite",art:"spring",w:S*a,h:v*a*1.4,depth:6};case "mover":return {shape:"tile",art:"platform",w:S*a,h:v*a,unit:a,depth:5};case "checkpoint":return {shape:"sprite",art:"flag",color:"muted",w:S*a*1.6,h:v*a,depth:5};case "flag":return {shape:"sprite",art:"flag",w:S*a*1.4,h:v*a,depth:5}}};function ye(h,S,v,a,f$1){let m=e$1.create(),y={kind:h,vx:0,vy:0,dir:-1,t:0,baseX:S,baseY:v,hp:1,tag:"",safe:0};return e$1.set(m,at,y),e$1.set(m,Gt,{x:S,y:v,w:a,h:f$1}),e$1.set(m,e,{x:0,y:0}),e$1.set(m,f,xe(h,a,f$1,se())),e$1.need(m,at)}function Ae(){for(let S of e$1.query(po))e$1.destroy(S);let h=(Number(e$1.vars.view_h??1280)-(De()+10*se()))/se()+.5;for(let S=0;S<10;S++){let v=0;for(;v<d;){let a=o[S][v];if(a==="."||a==="_"){a==="_"&&He("_",v,S,1,.45),v++;continue}let f=a==="#"&&Pe(v,S-1)!=="#",m=v;for(;m<d&&o[S][m]===a&&(a!=="#"||Pe(m,S-1)!=="#"===f);)m++;if(a==="#"&&f){let y=0;for(;S+y<10&&o[S+y][v]==="#";)y++;He("#",v,S,m-v,y+(S+y>=10?h:0));}else a!=="#"&&He(a,v,S,m-v,a==="="?.45:.7);v=m;}}}function He(h,S,v,a,f$1){let m=se(),y=e$1.create();e$1.set(y,po,{char:h}),e$1.set(y,Gt,{x:S+a/2,y:h==="^"?v+1:v+f$1,w:a,h:f$1}),e$1.set(y,e,{x:0,y:0});let P=h==="^"?{shape:"tile",art:"spike",w:a*m,h:f$1*m,unit:m,depth:4}:h==="#"?{shape:"tile",art:"ground",w:a*m,h:f$1*m,unit:m*1.2,depth:3}:{shape:"tile",art:"platform",w:a*m,h:f$1*m,unit:m,depth:3,...h==="_"?{color:"muted",alpha:.85}:{}};e$1.set(y,f,P),h==="_"&&e$1.set(y,at,{kind:"mover",vx:0,vy:0,dir:0,t:0,baseX:S,baseY:v,hp:0,tag:"crumble",safe:0});}let Z=()=>{(p===null||!e$1.isAlive(p))&&(p=e$1.create(),e$1.set(p,tn,{vx:0,vy:0,grounded:true,facing:1,jumps:0,coyote:0,buffer:0,dash:0,dashCd:0,wall:0,swing:0,swingCd:0}),e$1.set(p,Gt,{x:O.x,y:O.y,w:$d,h:il}),e$1.set(p,e,{x:0,y:0})),e$1.set(p,f,{shape:"actor",cast:fe().cast,h:il*se()*1.25,pose:"idle",depth:10});},be=()=>Math.sqrt(2*Yn*zd*(1+Wn(e$1,"meta:jump"))*(fe().perk==="jump"?1.15:1)),tt=()=>{if(p===null)return;let h=e$1.need(p,Gt),S=e$1.need(p,tn);h.x=O.x,h.y=O.y,S.vx=0,S.vy=0;for(let v of e$1.query(at))(e$1.need(v,at).kind==="bullet"||e$1.need(v,at).kind==="wave")&&e$1.destroy(v);},Se=()=>{Ct(),q(),T=t("lives")+Wn(e$1,"meta:hearts")+(fe().perk==="heart"?1:0),D=T,N=0,w=false,W=false,te=0,ue=0,F=0,ie=false,Q=!n.boss,_e.fill(false),re=gs(Wn(e$1,"meta:stars_total")),t("doubleJump")&&!re.includes("double")&&re.push("double"),e$1.vars.abilities=re.join(","),e$1.vars.platformer_level=n.level,e$1.vars.platformer_world=n.world,e$1.vars.lives=D,e$1.vars.coins=0,e$1.vars.score=0,e$1.vars.stars=0,e$1.vars.reviving=false,E=0,Z(),tt(),p!==null&&(e$1.need(p,tn).facing=1,Je(e$1,p,"idle")),n.boss&&e$1.emit(Id,{}),it(e$1);},nt=()=>{!qe(e$1)||he()||p===null||(e$1.need(p,tn).buffer=.13);},rt=()=>{if(p===null)return;let h=e$1.need(p,tn);h.vy<0&&(h.vy*=.5);},Ze=()=>{if(!qe(e$1)||he()||p===null||!re.includes("dash"))return;let h=e$1.need(p,tn);h.dashCd>0||(h.dash=.2,h.dashCd=.8,h.vy=0,Be(e$1,p,"attack"));},Ue=()=>{if(!qe(e$1)||he()||p===null)return;let h=e$1.need(p,tn);h.swingCd>0||(h.swing=.16,h.swingCd=.32,Be(e$1,p,"attack"));};e$1.on(j,h=>{let S=h;e$1.vars.started_tick!==e$1.tick&&(S.type==="key"&&(S.key==="up"||S.key==="action")?nt():S.type==="key-up"&&(S.key==="up"||S.key==="action")?rt():S.type==="key"&&S.key==="down"?Ze():S.type==="tap"?Ue():S.type==="swipe"&&S.dir==="up"&&nt());});let ot=(h,S)=>{if(!qe(h)||w)return;w=true;let v=S==="cleared",a=_e.filter(Boolean).length;h.vars.stars=a,v&&h.vars["meta:first_clear"]===true&&we(h,"coins",n.firstClearGold),h.vars.score=F*t("coinScore")+a*t("starScore")+(v?t("clearBonus"):0),h.vars.reviving=false,v&&h.emit(pi,{level:n.level}),h.emit(Lt,{reason:S,stats:{chapter:n.level,seconds:Math.floor(te),cleared:v,stars:v?a:0,coins:F,bosses:n.boss&&Q?1:0}});},Ge=h=>{if(h.vars.revive_ready===true&&!W){h.vars.reviving=true,h.emit(Wt,{});return}ot(h,"fell");},bt=h=>{he()&&(W=true,h.vars.reviving=false,D=Math.max(2,Math.ceil(T/2)),h.vars.lives=D,N=2.5,tt(),p!==null&&Je(h,p,"idle"),B(h,{kind:"flash",color:"coin"}));},Xe=(h,S)=>{if(p===null||N>0||w)return;let v=h.need(p,tn);v.dash>0||(D--,h.vars.lives=D,h.emit("player-hit",{lives:D}),N=t("graceTime")+Wn(h,"meta:grace"),v.vy=-be()*.55,v.vx=(S===null?-v.facing:Math.sign(h.need(p,Gt).x-S)||-v.facing)*5,Be(h,p,"hit"),B(h,{kind:"shake",power:1.2}),B(h,{kind:"flash",color:"danger"}),D<=0&&Ge(h));},st=(h,S,v)=>{let a=h.need(S,at),f=h.need(S,Gt),m=se();B(h,{kind:"burst",x:je(f.x),y:Fe(f.y-f.h/2),color:"danger",n:12,size:m*.9}),h.emit("enemy-defeated",{kind:a.kind,by:v}),we(h,"score",50),h.destroy(S);},lt=(h,S)=>{let v=h.need(S,Gt);ue+=1+Wn(h,"meta:greed");let a=Math.floor(ue);ue-=a,a>0&&we(h,"coins",a),F++,h.emit("coin-collected",{value:1}),B(h,{kind:"burst",x:je(v.x),y:Fe(v.y-v.h/2),color:"coin",n:6,size:se()*.6}),h.destroy(S);},je=h=>h*se()-E*se(),Fe=h=>De()+h*se();function it(h){se();for(let v of h.query(Gt)){let a=h.need(v,Gt),f$1=h.get(v,e);if(!f$1)continue;f$1.x=je(a.x),f$1.y=Fe(a.y-a.h/2);let m=h.get(v,f);if(m&&m.shape==="actor"&&h.has(v,at)){let y=h.need(v,at);m.facing=y.dir>=0?1:-1,m.alpha=y.safe>0&&Math.floor(h.time*12)%2===0?.35:1,f$1.y=Fe(a.y)-m.h/2;}if(m&&m.shape==="actor"&&h.has(v,tn)&&(f$1.y=Fe(a.y)-m.h/2),m&&h.has(v,po)&&h.need(v,po).char==="_"){let y=me.get(`${Math.floor(a.x)},${Math.round(a.y-a.h)}`)??0;m.alpha=y>.5?0:y>0?.5+.5*Math.abs(Math.sin(h.time*30)):.85;}}}let dt=(h,S,v,a)=>{let f$1=ke.get(h);(f$1===void 0||!e$1.isAlive(f$1))&&(f$1=e$1.create(),e$1.set(f$1,al,{id:h}),ke.set(h,f$1)),e$1.set(f$1,e,{x:S,y:v}),e$1.set(f$1,f,a);},Tt=h=>{let S=ke.get(h);S!==void 0&&e$1.destroy(S),ke.delete(h);};function Ct(){for(let h of ke.values())e$1.destroy(h);ke.clear(),et(e$1,al);}let Nt=h=>{let S=Number(h.vars.view_w??720),v=Number(h.vars.view_h??1280),a=Math.min(S,v),f=v*.085;dt("lvl",S*.08,f,{shape:"text",text:`${n.world}-${n.index}`,size:Math.round(a*.042),color:"text",bold:true,depth:42});let m=a*.05;for(let I=0;I<T;I++)dt(`h${I}`,S*.07+I*m*1.1,f+a*.065,{shape:"sprite",art:"heart",w:m,h:m,alpha:I<D?1:.25,depth:42});for(let I=T;I<12;I++)Tt(`h${I}`);let y=a*.06;for(let I=0;I<3;I++)dt(`s${I}`,S/2+(I-1)*y*1.15,f,{shape:"sprite",art:"bigstar",w:y,h:y,alpha:_e[I]?1:.25,depth:42});let P=a*.045,z=String(h.vars.coins??0);if(dt("coin:i",S*.92-z.length*P*.6-P*.7,f,{shape:"sprite",art:"coin",w:P,h:P,depth:42}),dt("coin",S*.92-z.length*P*.6/2,f,{shape:"text",text:z,size:Math.round(P),color:"text",bold:true,depth:42}),ie?dt("key",S*.92-P*.3,f+a*.065,{shape:"sprite",art:"key",w:P,h:P,depth:42}):Tt("key"),n.boss){let I=h.query(at).find(Oe=>h.need(Oe,at).kind==="boss"),X=I!==void 0?h.need(I,at).hp/n.bossHp:0,ee=S*.5,J=Math.max(10,a*.022);dt("boss:bg",S/2,f+a*.075,{shape:"rect",w:ee,h:J,color:"#000000",alpha:.45,radius:J/2,depth:41});let Le=Math.max(0,(ee-4)*Math.round(X*100)/100);Le<1?Tt("boss:fill"):dt("boss:fill",S/2-(ee-4)/2+Le/2,f+a*.075,{shape:"rect",w:Le,h:J-4,color:"danger",radius:(J-4)/2,depth:41.1});}};e$1.on(At,()=>{Se(),e$1.vars.level=n.level;}),e$1.on(It,Se),e$1.on($t,()=>bt(e$1)),e$1.on(Bt,()=>{he()&&(e$1.vars.reviving=false,ot(e$1,"fell"));}),e$1.on(Pt,h=>{p!==null&&e$1.isAlive(p)&&Je(e$1,p,h.reason==="cleared"?"dance":"die"),Ct();}),e$1.on(k,()=>{Et(e$1,"side",De()+8*se()+2);let h=se();for(let S of e$1.query(at)){let v=e$1.need(S,at);if(v.tag==="crumble")continue;let a=e$1.need(S,Gt);e$1.set(S,f,xe(v.kind,a.w,a.h,h));}Ae(),Z(),it(e$1);}),e$1.addSystem({id:"platformer",order:0,run(h,S){if(!qe(h)||p===null||w||he())return;te+=S,N>0&&(N=Math.max(0,N-S));let v=h.need(p,Gt),a=h.need(p,tn),f$1=n.pace;for(let[j,r]of [...me]){let l=r+S;l>3.5?me.delete(j):me.set(j,l);}let m=i.axis().x;if(m!==0&&(a.facing=m),a.dash>0)a.dash-=S,a.vx=a.facing*15,a.vy=0;else {let j=m*Nd,r=a.grounded?60:32;a.vx+=Math.max(-r*S,Math.min(r*S,j-a.vx)),a.vy+=Yn*S,a.vy>22&&(a.vy=22);}if(a.dashCd>0&&(a.dashCd-=S),a.swingCd>0&&(a.swingCd-=S),a.swing>0){a.swing-=S;let j={l:a.facing>0?v.x:v.x-1.4,r:a.facing>0?v.x+1.4:v.x,t:v.y-v.h-.2,b:v.y};for(let r of h.query(at)){if(!h.isAlive(r)||!h.has(r,at))continue;let l=h.need(r,at);if(!["walker","spiky","hopper","flyer","gunner","boss","bullet"].includes(l.kind))continue;let b=h.need(r,Gt);b.x+b.w/2<j.l||b.x-b.w/2>j.r||b.y-b.h>j.b||b.y<j.t||(l.kind==="bullet"?(B(h,{kind:"burst",x:je(b.x),y:Fe(b.y-b.h/2),color:"text",n:6,size:se()*.5}),h.destroy(r)):l.kind==="boss"?R(h,r,"sword"):st(h,r,"sword"));}}if(a.coyote=a.grounded?.1:Math.max(0,a.coyote-S),a.buffer>0){a.buffer-=S;let j=re.includes("double")&&a.jumps<2;a.coyote>0||a.grounded?(a.vy=-be(),a.jumps=1,a.buffer=0,a.grounded=false,a.coyote=0):a.wall!==0&&re.includes("wall")?(a.vy=-be()*.95,a.vx=-a.wall*7,a.facing=-a.wall,a.jumps=1,a.buffer=0):j&&a.jumps>=1&&(a.vy=-be()*.9,a.jumps=2,a.buffer=0,B(h,{kind:"ring",x:je(v.x),y:Fe(v.y),color:"text",size:se()*1.2})),a.buffer===0&&Be(h,p,"jump");}let y=v.w/2,P=v.x+a.vx*S;a.wall=0;let z=j=>{let r=[];for(let l=Math.floor(j-v.h+.05);l<=Math.floor(j-.05);l++)r.push(l);return r};if(a.vx>0){let j=Math.floor(P+y);z(v.y).some(r=>K(Pe(j,r)))&&(P=j-y-.001,a.grounded||(a.wall=1),a.vx=0);}else if(a.vx<0){let j=Math.floor(P-y);z(v.y).some(r=>K(Pe(j,r)))&&(P=j+1+y+.001,a.grounded||(a.wall=-1),a.vx=0);}a.wall===0&&!a.grounded&&m!==0&&z(v.y).some(j=>K(Pe(Math.floor(P+m*(y+.05)),j)))&&(a.wall=m),v.x=Math.max(y,Math.min(d-y,P));let I=v.y,X=v.y+a.vy*S,ee=a.grounded;a.grounded=false;let J=[Math.floor(v.x-y+.05),Math.floor(v.x+y-.05)];if(a.vy>=0){let j=Math.floor(X);for(let r of J){let l=Pe(r,j),b=j;if((K(l)||Ee(l)&&I<=b+.05)&&X>=b){X=b,a.vy=0,a.grounded=true,a.jumps=0,l==="_"&&!me.has(`${r},${j}`)&&me.set(`${r},${j}`,.001),l==="^"&&(Xe(h,null),a.vy=-be()*.7,a.grounded=false);break}}}else {let j=Math.floor(X-v.h);J.some(r=>K(Pe(r,j)))&&(X=j+1+v.h,a.vy=0);}v.y=X,!ee&&a.grounded&&Be(h,p,"jump");for(let j of h.query(at)){let r=h.need(j,at);if(r.kind!=="mover"||r.tag==="crumble")continue;let l=h.need(j,Gt),b=l.x;r.t+=S,l.x=r.baseX+Math.sin(r.t*.9)*2.2;let c=l.y-l.h;a.vy>=0&&Math.abs(v.x-l.x)<l.w/2+y*.6&&I<=c+.1&&v.y>=c-.05&&(v.y=c,a.vy=0,a.grounded=true,a.jumps=0,v.x+=l.x-b);}if(v.y>12&&(Xe(h,null),N=Math.max(N,1),!he()&&!w&&tt(),w||he()))return;let Le={l:v.x-y,r:v.x+y,t:v.y-v.h,b:v.y},Oe=j=>Le.r>j.x-j.w/2&&Le.l<j.x+j.w/2&&Le.b>j.y-j.h&&Le.t<j.y,Re=1.2*(1+Wn(h,"meta:magnet")),G=v.x;for(let j of h.query(at)){if(!h.isAlive(j)||!h.has(j,at))continue;let r=h.need(j,at),l=h.need(j,Gt);switch(r.safe>0&&(r.safe-=S),r.kind){case "walker":case "spiky":{r.vx=r.dir*1.6*f$1;let b=l.x+r.dir*(l.w/2+.05)+r.vx*S,c=K(Pe(Math.floor(b),Math.floor(l.y-.5))),u=Pe(Math.floor(b),Math.floor(l.y));c||!(K(u)||Ee(u))?r.dir=-r.dir:l.x+=r.vx*S;break}case "hopper":{r.t+=S,r.vy+=Yn*.6*S,l.y+=r.vy*S,l.y>=r.baseY&&(l.y=r.baseY,r.vy=0,r.t>1.5/f$1&&(r.t=0,r.vy=-Math.sqrt(2*Yn*.6*2.4))),r.dir=G<l.x?-1:1;break}case "flyer":r.t+=S*f$1,l.x=r.baseX+Math.sin(r.t*.9)*3,l.y=r.baseY+Math.sin(r.t*1.8)*.9,r.dir=Math.cos(r.t*.9)>=0?1:-1;break;case "gunner":{if(r.dir=G<l.x?-1:1,r.t+=S,r.t>2.2/f$1&&Math.abs(G-l.x)<9){r.t=0;let b=ye("bullet",l.x+r.dir*.6,l.y-.45,.45,.3);b.vx=r.dir*6*f$1,b.dir=r.dir,Be(h,j,"attack");}break}case "bullet":case "wave":if(l.x+=r.vx*S,r.t+=S,r.t>(r.kind==="wave"?2.2:3.5)||K(Pe(Math.floor(l.x),Math.floor(l.y-.1)))){h.destroy(j);continue}break;case "boss":C(h,j,r,l,G,S);break;case "coin":Math.hypot(l.x-v.x,l.y-(v.y-v.h/2))<Re&&Re>1.21&&(l.x+=(v.x-l.x)*Math.min(1,S*10),l.y+=(v.y-v.h/2-l.y)*Math.min(1,S*10));break;}if(!(!h.isAlive(j)||!Oe(l))){switch(r.kind){case "coin":lt(h,j);break;case "star":{let b=Number(r.tag);_e[b]=true,h.vars.stars=_e.filter(Boolean).length,h.emit("star-collected",{index:b}),B(h,{kind:"ring",x:je(l.x),y:Fe(l.y-l.h/2),color:"coin",size:se()*2.4}),B(h,{kind:"flash",color:"coin"}),h.destroy(j);break}case "heart":D=Math.min(T,D+1),h.vars.lives=D,B(h,{kind:"ring",x:je(l.x),y:Fe(l.y-l.h/2),color:"danger",size:se()*1.6}),h.destroy(j);break;case "key":ie=true,B(h,{kind:"ring",x:je(l.x),y:Fe(l.y-l.h/2),color:"coin",size:se()*1.6}),h.destroy(j);break;case "chest":if(ie&&r.tag!=="open"){r.tag="open",ie=false;for(let c=0;c<15;c++)ue+=1+Wn(h,"meta:greed"),F++;let b=Math.floor(ue);ue-=b,we(h,"coins",b),B(h,{kind:"burst",x:je(l.x),y:Fe(l.y-l.h/2),color:"coin",n:24,size:se()*1.4}),B(h,{kind:"pop",x:je(l.x),y:Fe(l.y-l.h*1.4),text:"+15",color:"coin",size:Math.round(se()*.5)});}break;case "spring":a.vy>0&&v.y-(l.y-l.h)<.5&&(a.vy=-Math.sqrt(2*Yn*Wd),a.jumps=1,B(h,{kind:"ring",x:je(l.x),y:Fe(l.y-l.h),color:"accent",size:se()*1.4}));break;case "checkpoint":if(r.tag!=="on"){r.tag="on",O={x:l.x,y:l.y};let b=h.need(j,f);b.shape==="sprite"&&(b.color="accent"),h.emit("checkpoint",{}),B(h,{kind:"ring",x:je(l.x),y:Fe(l.y-l.h/2),color:"accent",size:se()*2});}break;case "flag":if(Q){ot(h,"cleared");return}break;case "walker":case "hopper":case "flyer":case "gunner":case "spiky":case "boss":{let b=a.vy>0&&v.y-(l.y-l.h)<.55&&r.kind!=="spiky";a.dash>0&&r.kind!=="boss"?st(h,j,"dash"):b?(a.vy=-be()*.65,a.jumps=1,r.kind==="boss"?R(h,j,"stomp"):st(h,j,"stomp")):Xe(h,l.x);break}case "bullet":case "wave":Xe(h,l.x),h.destroy(j);break;}if(w||he())return}}let ne=We(),Te=Math.max(0,Math.min(Math.max(0,d-ne),v.x-ne*.4+a.facing*ne*.08)),le=E;E+=(Te-E)*Math.min(1,S*6),Zr(h,(E-le)*se()),h.vars.level_progress=Math.min(1,v.x/Math.max(1,d));let ce=h.need(p,f);ce.shape==="actor"&&(ce.facing=a.facing>=0?1:-1,ce.pose=a.grounded?Math.abs(a.vx)>.5?"run":"idle":"air",ce.speed=Math.abs(a.vx)*se(),ce.alpha=N>0&&Math.floor(h.time*12)%2===0?.35:1),it(h),Nt(h);}});function R(h,S,v){let a=h.need(S,at);a.safe>0||(a.hp--,a.safe=1,Be(h,S,"hit"),B(h,{kind:"shake",power:1}),a.hp<=0&&(Q=true,h.emit(Cd,{}),st(h,S,v),ye("flag",d-2,8,.8,2.6)));}function C(h,S,v,a,f,m){if(v.t-=m,v.vy+=Yn*m,a.y=Math.min(v.baseY,a.y+v.vy*m),a.y>=v.baseY){if(v.tag==="slam-air"){v.tag="walk",v.t=1.6,B(h,{kind:"shake",power:1.4});for(let y of [-1,1]){let P=ye("wave",a.x+y*1.2,v.baseY,.9,.6);P.vx=y*8*n.pace;}}v.vy=0;}if(v.tag==="walk"){if(v.dir=f<a.x?-1:1,a.x+=v.dir*1.4*n.pace*m,v.t<=0){let y=Math.floor(h.rng.next()*3);if(y===0)v.tag="charge",v.t=1.1,v.vx=v.dir*9*n.pace,Je(h,S,"run");else if(y===1)v.tag="slam-air",v.vy=-Math.sqrt(2*Yn*4),Be(h,S,"jump");else {v.tag="walk",v.t=2.4;for(let P of [d-15,d-3])ye("walker",P,v.baseY,.8,1).dir=P<a.x?1:-1;Be(h,S,"cheer");}}}else v.tag==="charge"&&(a.x+=v.vx*m,(v.t<=0||K(Pe(Math.floor(a.x+Math.sign(v.vx)*1.2),Math.floor(v.baseY-1))))&&(v.tag="walk",v.t=1.8,Je(h,S,"walk")));a.x=Math.max(d-17.5,Math.min(d-1.2,a.x));}Et(e$1,"side",De()+8*se()+2),Se();}};var jt=5,xs=6,vs=6,fn={blaster:{id:"blaster",art:"shot",color:"coin",damage:[10,13,15,18,24],cooldown:[.8,.7,.62,.55,.42],count:[1,1,2,2,3],pierce:[1,1,1,2,3]},blades:{id:"blades",art:"blade",color:"primary",damage:[8,10,12,14,19],cooldown:[.45,.42,.4,.38,.32],count:[2,2,3,3,5],reach:[.15,.16,.17,.18,.21]},aura:{id:"aura",art:"aura",color:"secondary",damage:[5,7,9,11,16],cooldown:[.5,.5,.45,.45,.4],count:[1,1,1,1,1],reach:[.11,.125,.14,.155,.19]},boomerang:{id:"boomerang",art:"boomerang",color:"accent",damage:[16,20,24,28,38],cooldown:[1.8,1.6,1.4,1.25,1],count:[1,1,2,2,3],reach:[.34,.36,.38,.4,.46]},lightning:{id:"lightning",art:"lightning",color:"primary",damage:[18,22,26,30,42],cooldown:[2,1.8,1.6,1.4,1.1],count:[2,3,4,5,7],reach:[.22,.23,.24,.25,.3]},drone:{id:"drone",art:"drone",color:"piece6",damage:[9,11,13,15,21],cooldown:[1,.9,.8,.7,.55],count:[1,1,2,2,3],reach:[.11,.11,.12,.12,.13]}},Or=Object.keys(fn),Ar={might:{id:"might",art:"fist",color:"danger",step:.12},haste:{id:"haste",art:"hourglass",color:"primary",step:.07},area:{id:"area",art:"aura",color:"secondary",step:.1},swift:{id:"swift",art:"boot",color:"accent",step:.08},vigor:{id:"vigor",art:"heart",color:"danger",step:20},armor:{id:"armor",art:"shield",color:"muted",step:1.5},magnet:{id:"magnet",art:"magnet",color:"danger",step:.3},luck:{id:"luck",art:"clover",color:"accent",step:.2},growth:{id:"growth",art:"crystal",color:"accent",step:.1}},ks=Object.keys(Ar),Jn={swarm:{kind:"swarm",cast:"foe5",hp:.6,speed:118,size:.045,damage:5,xp:1,from:0,weight:3},grunt:{kind:"grunt",cast:"foe",hp:1,speed:95,size:.055,damage:8,xp:1,from:0,weight:4},archer:{kind:"archer",cast:"foe3",hp:1.2,speed:88,size:.055,damage:7,xp:2,from:.8,weight:2},brute:{kind:"brute",cast:"foe2",hp:5,speed:62,size:.085,damage:14,xp:5,from:1.6,weight:1.2},charger:{kind:"charger",cast:"foe4",hp:2.5,speed:80,size:.065,damage:12,xp:3,from:2.4,weight:1.4},bomber:{kind:"bomber",cast:"foe5",hp:1.5,speed:120,size:.055,damage:16,xp:2,from:3.2,weight:1.4},miniboss:{kind:"miniboss",cast:"boss",hp:45,speed:75,size:.12,damage:18,xp:25,from:99,weight:0},boss:{kind:"boss",cast:"boss",hp:160,speed:70,size:.16,damage:24,xp:0,from:99,weight:0}},cl=["swarm","grunt","archer","brute","charger","bomber"],Es=10;function Lr(e,s){let t=Math.max(1,Math.min(Es,Math.floor(e)));return {chapter:t,duration:Math.min(600,s+(t-1)*30),hp:1+(t-1)*.45,damage:1+(t-1)*.12,headStart:(t-1)*.4,firstClearGold:100+(t-1)*60}}var Pr=[{id:"hero",cast:"hero",weapon:"blaster",passive:null,gems:0},{id:"hero2",cast:"hero2",weapon:"blades",passive:"vigor",gems:150},{id:"hero3",cast:"hero3",weapon:"lightning",passive:"area",gems:300}],ui=[{id:"Might",var:"meta:might",art:"fist",color:"danger",perLevel:4,unit:"%",maxLevel:50,price:30,growth:.09},{id:"Vitality",var:"meta:hp",art:"heart",color:"danger",perLevel:8,unit:"",maxLevel:50,price:25,growth:.09},{id:"Armor",var:"meta:armor",art:"shield",color:"muted",perLevel:.5,unit:"",maxLevel:30,price:40,growth:.1},{id:"Swiftness",var:"meta:speed",art:"boot",color:"accent",perLevel:2,unit:"%",maxLevel:25,price:35,growth:.1},{id:"Magnet",var:"meta:magnet",art:"magnet",color:"danger",perLevel:6,unit:"%",maxLevel:25,price:20,growth:.1},{id:"Luck",var:"meta:luck",art:"clover",color:"accent",perLevel:5,unit:"%",maxLevel:25,price:30,growth:.1},{id:"Growth",var:"meta:growth",art:"crystal",color:"accent",perLevel:3,unit:"%",maxLevel:30,price:30,growth:.1},{id:"Recovery",var:"meta:regen",art:"potion",color:"accent",perLevel:.1,unit:"",maxLevel:30,price:45,growth:.1}],mi="kit-survivors",ll=30,dl=10,fl={game:"survivors",character:mi,stats:ui,heroes:Pr,levels:Es,firstClearGold:e=>Lr(e,300).firstClearGold,stars:0};var Ms=b("survivors.hero"),Ne=b("survivors.foe"),er=b("survivors.shot"),Rn=b("survivors.bullet"),wt=b("survivors.drop"),$n=b("survivors.blade"),Zn=b("survivors.aura"),Qn=b("survivors.drone"),uo=b("survivors.boomerang"),mo=b("survivors.zap"),Ir=b("survivors.halo"),pl=b("survivors.hud"),Bn=b("survivors.joystick"),hi="level-up",yi="upgrade-picked",gi="upgrade-pick",bi="upgrade-reroll";var _s="boss-spawned",xi="boss-defeated",vi=e=>[...Object.entries(e.weapons).map(([s,t])=>`w:${s}:${t}`),...Object.entries(e.passives).map(([s,t])=>`p:${s}:${t}`)].join(","),ul=e=>{let s={},t={};for(let i of String(e??"").split(",")){let[n,o,d]=i.split(":");n==="w"&&o&&o in fn?s[o]=Number(d):n==="p"&&o&&o in Ar&&(t[o]=Number(d));}return {weapons:s,passives:t}},ki=e=>e.map(s=>`${s.kind}:${s.id}:${s.level}`).join(","),ml=e=>String(e??"").split(",").filter(Boolean).map(s=>{let[t,i,n]=s.split(":");return {kind:t,id:i??"",level:Number(n??1)}}),Ss=e=>e.vars.reviving===true,_n=(e,s)=>{let t=Number(e.vars[s]??0);return Number.isFinite(t)?t:0},Rs={id:"survivors",version:2,engines:["phaser"],requires:["round"],params:{duration:{type:"number",default:300,min:20,max:900},heroSpeed:{type:"number",default:260,min:80,max:800},hp:{type:"number",default:100,min:10,max:2e3},spawnRate:{type:"number",default:1.2,min:.1,max:10},spawnGrowth:{type:"number",default:.9,min:0,max:10},foeHp:{type:"number",default:10,min:1,max:1e3},foeHpGrowth:{type:"number",default:.45,min:0,max:5},foeDamage:{type:"number",default:1,min:.1,max:10},foeSpeed:{type:"number",default:1,min:.3,max:3},damage:{type:"number",default:1,min:.1,max:100},shotSpeed:{type:"number",default:640,min:100,max:2e3},xpFirst:{type:"number",default:4,min:1,max:100,integer:true},xpGrowth:{type:"number",default:1.25,min:1,max:2},coinRate:{type:"number",default:.25,min:0,max:1},killScore:{type:"number",default:10,min:0,max:1e3,integer:true},bossScore:{type:"number",default:500,min:0,max:1e5,integer:true},clearBonus:{type:"number",default:1e3,min:0,max:1e5,integer:true},graceTime:{type:"number",default:.6,min:0,max:5},maxFoes:{type:"number",default:46,min:5,max:160,integer:true},minibossEvery:{type:"number",default:120,min:0,max:900},eliteEvery:{type:"number",default:50,min:0,max:900}},setup({world:e$1,params:s}){let t=e$1.rng.stream("survivors"),i=fr(e$1),n=r=>qt(s,r),o=null,d=null,p=0,E={},O={},D={},T=0,N=0,w=0,W=1,te=0,ue=0,F=[],ie="level",Q=0,re=0,_e=0,me=false,ke=0,fe=0,he=300,se=Lr(1,300),De=false,We=null,Pe=0,K=0,Ee=0,q=0,ve=null,xe=0,ye=0,Ae=false,He=new Map,Z={maxHp:100,hp:100,regen:0,armor:0,speed:260,magnet:80,might:1,haste:1,area:1,luck:1,growth:1},be=()=>Math.min(Ie(e$1).w,Ie(e$1).h),tt=()=>be()/720,Se=()=>be()*.07,nt=()=>{let r=Ie(e$1);return {x:r.w/2,y:r.h/2}},rt=()=>{let r=b=>O[b]??0,l=Z.maxHp;Z.might=(1+_n(e$1,"meta:might")+.12*r("might"))*n("damage"),Z.haste=Math.max(.4,1-.07*r("haste")),Z.area=1+.1*r("area"),Z.speed=n("heroSpeed")*tt()*(1+_n(e$1,"meta:speed")+.08*r("swift")),Z.maxHp=n("hp")+_n(e$1,"meta:hp")+20*r("vigor"),Z.regen=_n(e$1,"meta:regen")+.3*r("vigor"),Z.armor=_n(e$1,"meta:armor")+1.5*r("armor"),Z.magnet=be()*.12*(1+_n(e$1,"meta:magnet")+.3*r("magnet")),Z.luck=1+_n(e$1,"meta:luck")+.2*r("luck"),Z.growth=1+_n(e$1,"meta:growth")+.1*r("growth"),Z.maxHp>l&&(Z.hp+=Z.maxHp-l),Z.hp=Math.min(Z.hp,Z.maxHp),e$1.vars.survivors_build=vi({weapons:E,passives:O});},Ze=r=>Math.ceil(n("xpFirst")*Math.pow(r,n("xpGrowth"))),Ue=()=>Pr.find(r=>r.id===e$1.vars["meta:hero"])??Pr[0],ot=()=>{let r=nt(),l=Se();(o===null||!e$1.isAlive(o))&&(o=e$1.create(),e$1.set(o,Ms,{size:l})),e$1.need(o,Ms).size=l,e$1.set(o,e,{x:r.x,y:r.y}),e$1.set(o,f,{shape:"actor",cast:Ue().cast,h:l*2.3,feet:l*.6,pose:"idle",depth:zt(e$1,r.y)});},Ge=(r,l,b,c)=>{let u=He.get(r);(u===void 0||!e$1.isAlive(u))&&(u=e$1.create(),e$1.set(u,pl,{id:r}),He.set(r,u)),e$1.set(u,e,{x:l,y:b}),e$1.set(u,f,c);},bt=r=>{let l=He.get(r);l!==void 0&&e$1.destroy(l),He.delete(r);},Xe=()=>{for(let r of He.values())e$1.destroy(r);He.clear(),et(e$1,pl);},st=(r,l,b,c,u,M,k,x=41)=>{let g=Math.max(0,Math.min(1,Math.round(M*100)/100));Ge(`${r}:bg`,l,b,{shape:"rect",w:c,h:u,color:"#000000",alpha:.45,radius:u/2,depth:x});let _=Math.max(0,(c-4)*g);_<1?bt(`${r}:fill`):Ge(`${r}:fill`,l-(c-4)/2+_/2,b,{shape:"rect",w:_,h:u-4,color:k,radius:(u-4)/2,depth:x+.01});},lt=r=>{let l=Ie(r),b=be(),c=l.h*.085,u=l.w*.9,M=Math.max(10,b*.026);st("xp",l.w/2,c,u,M,w/Ze(W),"accent"),Ge("lv",l.w/2+u/2-b*.04,c+M*1.6,{shape:"text",text:`Lv ${W}`,size:Math.round(b*.032),color:"text",bold:true,depth:42});let k=c+b*.075;if(We!==null&&r.isAlive(We)&&r.has(We,Ne)){let H=r.need(We,Ne);st("boss",l.w/2,k,l.w*.62,Math.max(14,b*.034),H.hp/H.maxHp,"danger"),Ge("time",l.w/2,k-b*.05,{shape:"text",text:H.kind==="boss"?"BOSS":"MINI BOSS",size:Math.round(b*.036),color:"danger",bold:true,depth:42}),r.vars.boss_hp=H.hp/H.maxHp;}else bt("boss:bg"),bt("boss:fill"),Ge("time",l.w/2,k,{shape:"text",text:No(Number(r.vars.time_left??0)),size:Math.round(b*.05),color:"text",bold:true,depth:42}),r.vars.boss_hp=0;let x=Math.round(b*.036);Ge("kills:i",l.w*.06,k,{shape:"sprite",art:"skull",w:x*1.1,h:x*1.1,color:"text",depth:42}),Ge("kills",l.w*.06+x*.75+String(re).length*x*.28,k,{shape:"text",text:String(re),size:x,color:"text",bold:true,depth:42});let g=b*.05,_=0,A=new Set,L=(H,oe,ae,pe,de,$e)=>{A.add(H),Ge(`b:${H}`,de,$e,{shape:"sprite",art:oe,w:g,h:g,color:ae,alpha:.95,depth:41}),Ge(`b:${H}:l`,de+g*.38,$e+g*.36,{shape:"text",text:pe>=5?"\u2605":String(pe),size:Math.round(g*.42),color:pe>=5?"coin":"text",bold:true,depth:42});};for(let[H,oe]of Object.entries(E)){let ae=fn[H];L(H,ae.art,ae.color,oe??1,l.w*.06+_*g*1.12,k+b*.075),_++;}_=0;for(let[H,oe]of Object.entries(O)){let ae=Ar[H];L(H,ae.art,ae.color,oe??1,l.w*.06+_*g*.95,k+b*.075+g*1.1),_++;}for(let H of [...He.keys()])if(H.startsWith("b:")){let oe=H.slice(2).replace(/:l$/,"");A.has(oe)||bt(H);}let $=Se(),U=nt();st("hp",U.x,U.y+$*1.05,$*1.7,Math.max(7,b*.013),Z.hp/Z.maxHp,Z.hp/Z.maxHp>.35?"accent":"danger",40);},je=(r=-1)=>{let l=Ie(e$1),b=be()*.08,c=r>=0?r:t.int(0,3);return {x:c===0?-b:c===1?l.w+b:t.range(-b,l.w+b),y:c===2?-b:c===3?l.h+b:t.range(-b,l.h+b)}},Fe=()=>n("foeHp")*se.hp*(1+n("foeHpGrowth")*(fe/60)),it=(r,l,b=false)=>{let c=Jn[r],u=r==="boss"||r==="miniboss",M=be()*c.size*(b?1.3:1),k=Fe()*c.hp*(b?8:1),x=xt(e$1,l.x,l.y,{shape:"actor",cast:c.cast,variant:t.int(0,99),h:M*(u?1.9:r==="brute"?1.75:2.2),feet:M*.6,pose:r==="brute"||u?"walk":"run",depth:zt(e$1,l.y)},{type:Ne,data:{kind:r,hp:k,maxHp:k,speed:c.speed*tt()*n("foeSpeed")*(1+Math.min(.5,fe/600)),size:M,damage:c.damage*se.damage*n("foeDamage")*(b?1.4:1),xp:c.xp*(b?5:1),elite:b,t:t.range(0,1.5),phase:"walk",vx:0,vy:0,hurtAt:{},next:0}});return (b||u)&&xt(e$1,l.x,l.y+M*.5,{shape:"sprite",art:"aura_field",w:M*2.2,h:M*1.1,color:u?"danger":"coin",alpha:.85,depth:2},{type:Ir,data:{of:x}}),x},dt=()=>{let r=fe/60+se.headStart,l=cl.filter(u=>Jn[u].from<=r),b=0;for(let u of l)b+=Jn[u].weight;let c=t.range(0,b);for(let u of l)if(c-=Jn[u].weight,c<=0)return u;return l[0]??"grunt"},Tt=()=>e$1.query(Ne).length,Ct=(r,l)=>{let b=fe/60+se.headStart,c=n("spawnRate")*(1+n("spawnGrowth")*b);for(xe>0&&(xe-=l,c*=.25),De&&(c*=.45),ve&&(ve.left-=l,c*=2.6),ke+=l*c;ke>=1;)ke-=1,!(Tt()>=n("maxFoes"))&&it(dt(),je(ve?ve.side:-1));if(ve&&ve.left<=0&&(ve=null),!De){if(fe>=Ee){Ee=fe+t.range(26,36);let u=q++%3;if(u===0){let M=nt(),k=12+Math.min(12,Math.floor(b*2)),x=be()*.62;for(let g=0;g<k;g++){let _=g/k*Math.PI*2;it(b>3?"grunt":"swarm",{x:M.x+Math.cos(_)*x,y:M.y+Math.sin(_)*x*1.25});}B(r,{kind:"flash",color:"danger"});}else u===1?ve={left:4,side:t.int(0,3)}:xe=5;}if(n("eliteEvery")>0&&fe>=K){K=fe+n("eliteEvery");let u=dt();it(u==="swarm"?"grunt":u,je(),true);}n("minibossEvery")>0&&fe>=Pe&&he-fe>30&&(Pe=fe+n("minibossEvery"),(We===null||!r.isAlive(We))&&(We=it("miniboss",je()),r.emit(_s,{kind:"miniboss"}),B(r,{kind:"shake",power:1.2})));}},Nt=r=>{De=true,r.vars.time_left=0;let l=nt();for(let b of r.query(Ne)){let c=r.get(b,Ne);if(!c||c.kind==="miniboss")continue;let u=r.need(b,e);Math.hypot(u.x-l.x,u.y-l.y)<be()*.3&&C(r,b,null,false);}We=it("boss",{x:l.x,y:l.y-Ie(r).h*.42}),B(r,{kind:"shake",power:2}),B(r,{kind:"flash",color:"danger"}),r.emit(_s,{kind:"boss"});},R=(r,l,b,c=1)=>{let u=Se(),M=r==="xp"?{shape:"sprite",art:"crystal",w:u*(c>=25?.62:c>=5?.5:.38),h:u*(c>=25?.62:c>=5?.5:.38),color:c>=25?"secondary":c>=5?"primary":"accent",depth:3}:r==="coin"?{shape:"sprite",art:"coin",w:u*.4,h:u*.4,depth:3}:r==="food"?{shape:"sprite",art:"heart",w:u*.5,h:u*.5,depth:3}:r==="magnet"?{shape:"sprite",art:"magnet",w:u*.6,h:u*.6,depth:3}:r==="bomb"?{shape:"sprite",art:"bomb",w:u*.6,h:u*.6,depth:3}:{shape:"sprite",art:"chest",w:u*.9,h:u*.9,color:"coin",depth:3};xt(e$1,l,b,M,{type:wt,data:{kind:r,value:c,pulled:false}});},C=(r,l,b,c=true)=>{let u=r.get(l,Ne);if(!u)return;let M=r.need(l,e),k=M.x,x=M.y;r.remove(l,Ne);for(let A of r.query(Ir))r.need(A,Ir).of===l&&r.destroy(A);Je(r,l,"die");let g=r.need(l,f);if(g.shape==="actor"&&(g.depth=zt(r,x)-.2),Fn(r,l,1.4),B(r,{kind:"burst",x:k,y:x,color:"danger",n:u.elite||u.kind==="boss"?22:8,size:u.size*1.4}),!c)return;re+=1,r.vars.kills=re,r.emit("enemy-defeated",{kind:u.kind,elite:u.elite,by:b});let _=Se();if(u.xp>0&&R("xp",k,x+u.size*.4,u.xp),t.chance(Math.min(.95,n("coinRate")*Z.luck))&&R("coin",k+_*.3,x+u.size*.4),t.chance(.012*Z.luck)&&R("food",k-_*.3,x),t.chance(.004)&&!r.query(wt).some(A=>r.need(A,wt).kind==="magnet")&&R("magnet",k,x-_*.3),t.chance(.004)&&R("bomb",k,x-_*.3),u.elite||u.kind==="miniboss"){R("chest",k,x);for(let A=0;A<3;A++)R("coin",k+t.range(-_,_),x+t.range(-_,_));}if(u.kind==="bomber"){let A=be()*.11*Z.area;B(r,{kind:"ring",x:k,y:x,color:"piece6",size:A*2});for(let L of r.query(Ne)){let $=r.need(L,e);Math.hypot($.x-k,$.y-x)<A&&h(r,L,Fe()*2.5,"blast");}}if((u.kind==="miniboss"||u.kind==="boss")&&(_e+=1,r.vars.bosses=_e,l===We&&(We=null),r.emit(xi,{kind:u.kind}),B(r,{kind:"shake",power:2}),u.kind==="boss")){for(let A of r.query(Ne))C(r,A,null,false);m(r,"cleared");}},h=(r,l,b,c)=>{if(!r.has(l,Ne))return;let u=r.need(l,Ne);if(u.hp-=b,(u.elite||u.kind==="boss"||u.kind==="miniboss")&&ye>0){ye-=1;let M=r.need(l,e);B(r,{kind:"pop",x:M.x+t.range(-10,10),y:M.y-u.size,text:String(Math.round(b)),color:"text",size:Math.round(be()*.03)});}u.hp<=0?C(r,l,c):u.kind!=="boss"&&u.kind!=="miniboss"&&Be(r,l,"hit");},S=(r,l,b,c,u)=>{let M=r.get(l,Ne);if(!M||M.kind==="boss"||M.kind==="miniboss"||M.phase==="dash")return;let k=r.need(l,e),x=k.x-b,g=k.y-c,_=Math.hypot(x,g)||1;k.x+=x/_*u,k.y+=g/_*u;},v=(r,l)=>{if(Q>0||o===null)return;let b=Math.max(1,l-Z.armor);Z.hp-=b,Q=n("graceTime"),r.vars.hp=Math.max(0,Math.ceil(Z.hp)),r.emit("player-hit",{hp:r.vars.hp}),Be(r,o,"hit"),B(r,{kind:"flash",color:"danger"}),B(r,{kind:"shake",power:.8});let c=nt();B(r,{kind:"pop",x:c.x,y:c.y-Se()*1.4,text:`-${Math.round(b)}`,color:"danger",size:Math.round(be()*.034)}),Z.hp<=0&&a(r);},a=r=>{if(r.vars.revive_ready===true&&!me){r.vars.reviving=true,St(r),d=null,r.emit(Wt,{});return}m(r,"died");},f$1=r=>{if(r.vars.reviving!==true)return;me=true,r.vars.reviving=false,Z.hp=Z.maxHp,r.vars.hp=Math.ceil(Z.hp),Q=2.5;let l=nt();for(let b of r.query(Ne)){let c=r.need(b,e);if(Math.hypot(c.x-l.x,c.y-l.y)<be()*.4){let u=r.get(b,Ne);if(!u)continue;u.kind==="boss"||u.kind==="miniboss"?S(r,b,l.x,l.y,be()*.2):C(r,b,"revive");}}for(let b of r.query(Rn))r.destroy(b);B(r,{kind:"ring",x:l.x,y:l.y,color:"coin",size:be()*.8}),B(r,{kind:"flash",color:"coin"}),o!==null&&Je(r,o,"idle");},m=(r,l)=>{if(!qe(r)||Ae)return;Ae=true;let b=Math.floor(fe);l==="cleared"&&r.vars["meta:first_clear"]===true&&we(r,"coins",se.firstClearGold),r.vars.score=re*n("killScore")+b*5+_e*n("bossScore")+(l==="cleared"?n("clearBonus")*se.chapter:0),r.vars.choosing=false,r.vars.reviving=false,r.emit(Lt,{reason:l,stats:{kills:re,seconds:b,bosses:_e,chapter:se.chapter,level:W,cleared:l==="cleared"}});},y=()=>{let r=[],l=Object.keys(E).length,b=Object.keys(O).length;for(let u of Or){let M=E[u];M!==void 0&&M<5?r.push({o:{kind:"weapon",id:u,level:M+1},weight:3}):M===void 0&&l<6&&r.push({o:{kind:"weapon",id:u,level:1},weight:1.6});}for(let u of ks){let M=O[u];M!==void 0&&M<5?r.push({o:{kind:"passive",id:u,level:M+1},weight:2}):M===void 0&&b<6&&r.push({o:{kind:"passive",id:u,level:1},weight:1.2});}let c=[];for(;c.length<3&&r.length>0;){let u=0;for(let x of r)u+=x.weight;let M=t.range(0,u),k=0;for(;k<r.length-1&&(M-=r[k].weight,!(M<=0));k++);c.push(r[k].o),r.splice(k,1);}return c.length<3&&c.push({kind:"heal",id:"heal",level:1}),c.length<3&&c.push({kind:"gold",id:"gold",level:1}),c},P=(r,l)=>{F=y(),ie=l,r.vars.choosing=true,r.vars.survivors_offer=ki(F),St(r),d=null,et(r,Bn);let b=nt();B(r,{kind:"ring",x:b.x,y:b.y,color:l==="chest"?"coin":"accent",size:be()*.5}),r.emit(hi,{level:W,source:l,options:F,build:{weapons:{...E},passives:{...O}}});},z=r=>{r.vars.choosing===true||!qe(r)||(te>0?(te-=1,P(r,"level")):ue>0&&(ue-=1,P(r,"chest")));},I=(r,l)=>{l.kind==="weapon"?(E[l.id]=l.level,D[l.id]=0):l.kind==="passive"?O[l.id]=l.level:l.kind==="heal"?Z.hp=Math.min(Z.maxHp,Z.hp+Z.maxHp*.3):l.kind==="gold"&&we(r,"coins",10),rt(),r.vars.hp=Math.ceil(Z.hp),ee(r);},X=(r,l)=>{if(r.vars.choosing!==true)return;let b=F[l];b&&(I(r,b),F=[],r.vars.choosing=false,r.vars.survivors_offer="",r.emit(yi,{kind:b.kind,id:b.id,level:b.level,source:ie}),z(r));},ee=r=>{let l=nt(),b=be(),c=E.blades,u=c?fn.blades.count[c-1]:0,M=r.query($n);for(let L of M)r.need(L,$n).index>=u&&r.destroy(L);for(let L=0;L<u;L++)M.some($=>r.isAlive($)&&r.need($,$n).index===L)||xt(r,l.x,l.y,{shape:"sprite",art:"blade",w:b*.075,h:b*.075,color:"primary",depth:31},{type:$n,data:{index:L}});for(let L of r.query($n)){let $=r.need(L,f);$.shape==="sprite"&&($.w=$.h=b*(c===5?.095:.075)*Math.sqrt(Z.area));}let k=E.aura,x=r.query(Zn);if(k){let L=b*fn.aura.reach[k-1]*Z.area;x.length===0&&xt(r,l.x,l.y,{shape:"sprite",art:"aura_field",w:L*2,h:L*2,color:k===5?"coin":"secondary",alpha:.9,depth:1.5},{type:Zn,data:{r:L}});for(let $ of r.query(Zn)){r.need($,Zn).r=L;let U=r.need($,f);U.shape==="sprite"&&(U.w=U.h=L*2,U.color=k===5?"coin":"secondary");}}else for(let L of x)r.destroy(L);let g=E.drone,_=g?fn.drone.count[g-1]:0,A=r.query(Qn);for(let L of A)r.need(L,Qn).index>=_&&r.destroy(L);for(let L=0;L<_;L++)A.some($=>r.isAlive($)&&r.need($,Qn).index===L)||xt(r,l.x,l.y,{shape:"sprite",art:"drone",w:b*.06,h:b*.06,color:"piece6",depth:33},{type:Qn,data:{index:L,cd:.3*L}});},J=(r,l,b,c,u)=>{let M=null,k=c;for(let x of r.query(Ne)){if(u&&u.includes(x))continue;let g=r.need(x,e),_=Math.hypot(g.x-l,g.y-b);_<k&&(k=_,M=x);}return M},Le=(r,l,b,c,u,M,k,x,g=1)=>{let _=Se()*g,A=n("shotSpeed")*tt(),L=xt(r,l,b,{shape:"sprite",art:"shot",w:_*.95,h:_*.48,color:x,depth:30},{type:er,data:{vx:Math.cos(c)*A,vy:Math.sin(c)*A,life:1.4,damage:u,pierce:M,hit:[],by:k}});r.need(L,e).rotation=c;},Oe=(r,l,b)=>{if(o===null)return;let c=nt(),u=be(),M=Se();for(let k of Or){let x=E[k];if(x===void 0)continue;let g=fn[k],_=x-1,A=g.damage[_]*Z.might;if(D[k]=(D[k]??0)-l,k==="blaster"&&D[k]<=0){let L=J(r,c.x,c.y,u*.75);if(L===null){D[k]=0;continue}D[k]=g.cooldown[_]*Z.haste;let $=r.need(L,e),U=Math.atan2($.y-(c.y-M*.3),$.x-c.x),H=g.count[_];for(let ae=0;ae<H;ae++)Le(r,c.x,c.y-M*.3,U+(ae-(H-1)/2)*.16,A,g.pierce[_],"blaster",x===5?"piece6":"coin",x===5?1.25:1);Be(r,o,"attack");let oe=r.need(o,f);oe.shape==="actor"&&(oe.actRate=1/Math.max(.2,g.cooldown[_]*Z.haste),b||(oe.facing=$.x>=c.x?1:-1));}else if(k==="blades"){let L=u*g.reach[_]*Z.area,$=3+.35*x;T+=$*l;let U=r.query($n),H=U.length||1;for(let oe of U){let ae=r.need(oe,$n),pe=T+ae.index/H*Math.PI*2,de=r.need(oe,e);de.x=c.x+Math.cos(pe)*L,de.y=c.y-M*.2+Math.sin(pe)*L,de.rotation=T*2.2;let $e=u*.04*Math.sqrt(Z.area);for(let Ke of r.query(Ne)){let ct=r.get(Ke,Ne);if(!ct)continue;let Mt=r.need(Ke,e);Math.hypot(Mt.x-de.x,Mt.y-de.y)>$e+ct.size*.55||r.time-(ct.hurtAt.blades??-9)<g.cooldown[_]||(ct.hurtAt.blades=r.time,h(r,Ke,A,"blades"),S(r,Ke,c.x,c.y,u*.012));}}}else if(k==="aura"){let L=r.query(Zn)[0];if(L===void 0)continue;let $=r.need(L,e);if($.x=c.x,$.y=c.y+M*.3,r.need(L,e).rotation=r.time*.6,D[k]>0)continue;D[k]=g.cooldown[_];let U=r.need(L,Zn).r;for(let H of r.query(Ne)){let oe=r.need(H,e),ae=r.get(H,Ne);!ae||Math.hypot(oe.x-c.x,oe.y-c.y)>U+ae.size*.3||(h(r,H,A,"aura"),S(r,H,c.x,c.y,u*.008));}}else if(k==="boomerang"&&D[k]<=0){let L=J(r,c.x,c.y,u*.8);if(L===null){D[k]=0;continue}D[k]=g.cooldown[_]*Z.haste;let $=r.need(L,e),U=Math.atan2($.y-c.y,$.x-c.x),H=g.count[_];for(let oe=0;oe<H;oe++){let ae=U+oe*Math.PI*2/H,pe=u*(x===5?.085:.065);xt(r,c.x,c.y,{shape:"sprite",art:"boomerang",w:pe,h:pe,color:"accent",depth:32},{type:uo,data:{dx:Math.cos(ae),dy:Math.sin(ae),dist:0,range:u*g.reach[_]*Z.area,back:false,damage:A,hit:[]}});}}else if(k==="lightning"&&D[k]<=0){let L=J(r,c.x,c.y,u*.55);if(L===null){D[k]=0;continue}D[k]=g.cooldown[_]*Z.haste;let $=[],U={x:c.x,y:c.y-M},H=L;for(let oe=0;oe<g.count[_]&&H!==null;oe++){let ae=r.get(H,Ne);if(!ae)break;let pe=r.need(H,e),de={x:pe.x,y:pe.y-ae.size*.4};Re(r,U,de,x===5?"coin":"primary"),$.push(H);let $e=J(r,pe.x,pe.y,u*g.reach[_]*Z.area,$);h(r,H,A,"lightning"),U=de,H=$e;}}else if(k==="drone"){N+=1.8*l;let L=r.query(Qn),$=L.length||1,U=u*g.reach[_];for(let H of L){let oe=r.need(H,Qn),ae=N+oe.index/$*Math.PI*2,pe=r.need(H,e);if(pe.x=c.x+Math.cos(ae)*U,pe.y=c.y-M*1.1+Math.sin(ae)*U*.5,oe.cd-=l,oe.cd>0)continue;let de=J(r,pe.x,pe.y,u*.6);if(de===null){oe.cd=0;continue}oe.cd=g.cooldown[_]*Z.haste;let $e=r.need(de,e);Le(r,pe.x,pe.y,Math.atan2($e.y-pe.y,$e.x-pe.x),A,x===5?2:1,"drone","piece6",.7);}}}},Re=(r,l,b,c)=>{let u=Math.hypot(b.x-l.x,b.y-l.y),M=xt(r,(l.x+b.x)/2,(l.y+b.y)/2,{shape:"sprite",art:"zap",w:Math.max(8,u),h:be()*.035,color:c,depth:34},{type:mo,data:{life:.16}});r.need(M,e).rotation=Math.atan2(b.y-l.y,b.x-l.x);},G=(r,l)=>{let b=nt(),c=Se(),u=be(),M=Ie(r),k=Math.hypot(M.w,M.h)*.75,x=r.query(Ne);for(let _ of x){let A=r.get(_,Ne);if(!A)continue;let L=r.need(_,e),$=b.x-L.x,U=b.y-L.y,H=Math.hypot($,U)||1;$/=H,U/=H;let oe=A.kind==="boss"||A.kind==="miniboss";if(H>(oe?k*1.3:k)){let Ke=je();L.x=Ke.x,L.y=Ke.y;continue}A.t-=l;let ae=A.speed,pe=$,de=U;if(A.kind==="archer"){let Ke=u*.3;if(H<Ke?ae*=-0.6:H<Ke*1.4&&(ae=0),A.t<=0&&H<u*.6){A.t=2.4,Be(r,_,"attack");let ct=260*tt();xt(r,L.x,L.y-A.size*.6,{shape:"sprite",art:"orb",w:u*.03,h:u*.03,color:"danger",depth:29},{type:Rn,data:{vx:$*ct,vy:U*ct,life:3,damage:A.damage}});}}else (A.kind==="charger"||A.kind==="miniboss"||A.kind==="boss")&&(A.phase==="walk"&&A.t<=0&&H<u*(oe?.6:.38)?A.kind!=="boss"||A.next%3===0?(A.phase="wind",A.t=oe?.7:.55,Be(r,_,"surprised"),B(r,{kind:"ring",x:L.x,y:L.y,color:"danger",size:A.size*2.2})):ne(r,_,A):A.phase==="wind"?(ae=0,A.t<=0&&(A.phase="dash",A.t=oe?.6:.45,A.vx=$,A.vy=U)):A.phase==="dash"&&(ae=A.speed*(oe?4:3.6),pe=A.vx,de=A.vy,A.t<=0&&(A.phase="walk",A.t=oe?A.hp<A.maxHp/2?1.6:2.4:2.8,A.kind==="boss"&&(A.next+=1))));L.x+=pe*ae*l,L.y+=de*ae*l;let $e=r.need(_,f);if($e.shape==="actor"&&(Math.abs(b.x-L.x)>A.size*.4&&($e.facing=b.x>=L.x?1:-1),$e.depth=zt(r,L.y),$e.speed=Math.abs(ae),$e.pose=ae===0?"idle":A.kind==="brute"||oe?"walk":"run"),H<(A.size+c)/2){if(A.kind==="bomber"){B(r,{kind:"ring",x:L.x,y:L.y,color:"piece6",size:u*.22}),v(r,A.damage),C(r,_,null,false);continue}if(Q<=0&&(Be(r,_,"attack"),v(r,A.damage),Ae||Ss(r)))return}}let g=r.query(Ne);for(let _=0;_<g.length;_++){let A=r.need(g[_],Ne),L=r.need(g[_],e);for(let $=_+1;$<g.length;$++){let U=r.need(g[$],Ne),H=r.need(g[$],e),oe=(A.size+U.size)*.42,ae=H.x-L.x,pe=H.y-L.y,de=ae*ae+pe*pe;if(de>=oe*oe||de===0)continue;let $e=Math.sqrt(de),Ke=(oe-$e)*.5,ct=ae/$e*Ke,Mt=pe/$e*Ke,yn=A.kind==="boss"||A.kind==="miniboss",cn=U.kind==="boss"||U.kind==="miniboss";yn||(L.x-=ct,L.y-=Mt),cn||(H.x+=ct,H.y+=Mt);}}for(let _ of r.query(Ir)){let A=r.need(_,Ir).of;if(!r.isAlive(A)||!r.has(A,Ne)){r.destroy(_);continue}let L=r.need(A,e),$=r.need(_,e);$.x=L.x,$.y=L.y+r.need(A,Ne).size*.55;let U=r.need(_,f);U.shape==="sprite"&&(U.alpha=.6+.3*Math.sin(r.time*6));}},ne=(r,l,b)=>{let c=r.need(l,e),u=be(),M=b.next%3;if(b.next+=1,b.t=b.hp<b.maxHp/2?1.4:2.2,M===1){let k=b.hp<b.maxHp/2?18:12,x=220*tt();for(let g=0;g<k;g++){let _=g/k*Math.PI*2+r.time;xt(r,c.x,c.y-b.size*.4,{shape:"sprite",art:"orb",w:u*.035,h:u*.035,color:"danger",depth:29},{type:Rn,data:{vx:Math.cos(_)*x,vy:Math.sin(_)*x,life:3.5,damage:b.damage*.6}});}Be(r,l,"attack"),B(r,{kind:"ring",x:c.x,y:c.y,color:"danger",size:b.size*3});}else {for(let k=0;k<6;k++){let x=k/6*Math.PI*2;it("swarm",{x:c.x+Math.cos(x)*b.size*1.6,y:c.y+Math.sin(x)*b.size*1.6});}Be(r,l,"cheer");}},Te=(r,l)=>{let b=Ie(r),c=nt(),u=Se(),M=be()*.2;for(let x of r.query(er)){let g=r.need(x,er),_=r.need(x,e);if(_.x+=g.vx*l,_.y+=g.vy*l,g.life-=l,g.life<=0||_.x<-M||_.y<-M||_.x>b.w+M||_.y>b.h+M){r.destroy(x);continue}for(let A of r.query(Ne)){if(g.hit.includes(A))continue;let L=r.get(A,Ne);if(!L)continue;let $=r.need(A,e);if(!(Math.abs($.x-_.x)>L.size/2+4||Math.abs($.y-(_.y+L.size*.2))>L.size*.9+4)&&(g.hit.push(A),B(r,{kind:"burst",x:_.x,y:_.y,color:"coin",n:4,size:u*.5}),S(r,A,c.x,c.y,be()*.01),h(r,A,g.damage,g.by),g.hit.length>=g.pierce)){r.destroy(x);break}}}for(let x of r.query(Rn)){let g=r.need(x,Rn),_=r.need(x,e);if(_.x+=g.vx*l,_.y+=g.vy*l,g.life-=l,g.life<=0){r.destroy(x);continue}if(Math.hypot(_.x-c.x,_.y-(c.y-u*.3))<u*.55&&(r.destroy(x),v(r,g.damage),Ae||Ss(r)))return}let k=be()*1.5;for(let x of r.query(uo)){let g=r.need(x,uo),_=r.need(x,e);if(_.rotation=(_.rotation??0)+l*14,g.back){let L=c.x-_.x,$=c.y-_.y,U=Math.hypot(L,$)||1;if(U<u*.5){r.destroy(x);continue}_.x+=L/U*k*l,_.y+=$/U*k*l;}else {let L=k*l*Math.max(.35,1-g.dist/g.range);_.x+=g.dx*L,_.y+=g.dy*L,g.dist+=L,g.dist>=g.range*.98&&(g.back=true,g.hit=[]);}let A=r.need(x,f).w*.5;for(let L of r.query(Ne)){if(g.hit.includes(L))continue;let $=r.get(L,Ne);if(!$)continue;let U=r.need(L,e);Math.hypot(U.x-_.x,U.y-_.y)>A+$.size*.5||(g.hit.push(L),S(r,L,_.x,_.y,be()*.015),h(r,L,g.damage,"boomerang"));}}for(let x of r.query(mo)){let g=r.need(x,mo);g.life-=l;let _=r.need(x,f);_.shape==="sprite"&&(_.alpha=Math.max(0,g.life/.16)),g.life<=0&&r.destroy(x);}},le=(r,l)=>{let b=nt(),c=Se(),M=r.query(wt).filter(k=>r.need(k,wt).kind==="xp");if(M.length>90){let k=M.map(L=>({e:L,d:Math.hypot(r.need(L,e).x-b.x,r.need(L,e).y-b.y)})).sort((L,$)=>$.d-L.d).slice(0,30),x=0,g=r.need(k[0].e,e),_=g.x,A=g.y;for(let L of k)x+=r.need(L.e,wt).value,r.destroy(L.e);R("xp",_,A,Math.max(25,x));}for(let k of r.query(wt)){let x=r.need(k,wt),g=r.need(k,e),_=Math.hypot(b.x-g.x,b.y-g.y);if(_<Z.magnet||x.pulled){x.pulled=true;let A=be()*(x.kind==="xp"&&_>Z.magnet?2.4:1.4),L=Math.min(1,l*A/Math.max(1,_));g.x+=(b.x-g.x)*L,g.y+=(b.y-g.y)*L;}if(!(_>c*.6))if(r.destroy(k),x.kind==="coin")we(r,"coins",x.value),r.emit("coin-collected",{value:x.value}),B(r,{kind:"pop",x:b.x,y:b.y-c*1.6,text:`+${x.value}`,size:Math.round(c*.45)});else if(x.kind==="xp"){for(w+=x.value*Z.growth;w>=Ze(W);)w-=Ze(W),W+=1,te+=1;r.vars.xp_level=W;}else if(x.kind==="food")Z.hp=Math.min(Z.maxHp,Z.hp+Z.maxHp*.25),r.vars.hp=Math.ceil(Z.hp),B(r,{kind:"ring",x:b.x,y:b.y,color:"accent",size:c*3});else if(x.kind==="magnet"){for(let A of r.query(wt))(r.need(A,wt).kind==="xp"||r.need(A,wt).kind==="coin")&&(r.need(A,wt).pulled=true);B(r,{kind:"ring",x:b.x,y:b.y,color:"coin",size:be()*1.2});}else if(x.kind==="bomb"){let A=Ie(r);B(r,{kind:"flash",color:"#ffffff"}),B(r,{kind:"shake",power:2});for(let L of r.query(Ne)){let $=r.need(L,e);if($.x<0||$.y<0||$.x>A.w||$.y>A.h)continue;let U=r.get(L,Ne);U&&h(r,L,U.kind==="boss"||U.kind==="miniboss"?U.maxHp*.1:U.hp+1,"bomb");}}else x.kind==="chest"&&(ue+=1,B(r,{kind:"burst",x:b.x,y:b.y,color:"coin",n:20,size:c*2}));}z(r);},ce=()=>{for(let l of [Ne,er,Rn,wt,$n,Zn,Qn,uo,mo,Ir,Bn])et(e$1,l);et(e$1,lr),Xe(),Et(e$1,"top",void 0,{pan:true}),e$1.vars.field_x=0,e$1.vars.field_y=0,d=null,p=0,se=Lr(_n(e$1,"meta:chapter")||1,n("duration")),he=se.duration;let r=Ue();E={[r.weapon]:1},O=r.passive?{[r.passive]:1}:{};for(let l of Or)D[l]=.4;w=0,W=1,te=0,ue=0,F=[],Q=0,re=0,_e=0,me=false,Ae=false,ke=0,fe=0,De=false,We=null,Pe=n("minibossEvery")>0?n("minibossEvery"):1/0,K=n("eliteEvery")>0?n("eliteEvery")*.8:1/0,Ee=22,q=0,ve=null,xe=0,Z.maxHp=0,Z.hp=0,rt(),Z.hp=Z.maxHp,e$1.vars.hp=Math.ceil(Z.hp),e$1.vars.hp_max=Z.maxHp,e$1.vars.time_left=he,e$1.vars.xp_level=1,e$1.vars.kills=0,e$1.vars.bosses=0,e$1.vars.chapter=se.chapter,e$1.vars.choosing=false,e$1.vars.reviving=false,e$1.vars.boss_hp=0,e$1.vars.survivors_offer="",ot(),ee(e$1);};e$1.on(j,r=>{let l=r,b=e$1.vars.choosing===true||e$1.vars.reviving===true;l.type==="press"&&qe(e$1)&&!b?d={x:l.x,y:l.y}:l.type==="release"&&(d=null),l.type==="key"&&e$1.vars.choosing===true&&(l.key==="left"||l.key==="action"||l.key==="right")&&X(e$1,l.key==="left"?0:l.key==="action"?1:2);}),e$1.on(gi,r=>X(e$1,Number(r.index??-1))),e$1.on(bi,()=>{e$1.vars.choosing===true&&(e$1.vars.choosing=false,P(e$1,ie));}),e$1.on($t,()=>f$1(e$1)),e$1.on(Bt,()=>{e$1.vars.reviving===true&&(e$1.vars.reviving=false,m(e$1,"died"));}),e$1.on(At,ce),e$1.on(It,ce),e$1.on(Pt,r=>{for(let l of e$1.query(Ne))Je(e$1,l,"idle");o!==null&&e$1.isAlive(o)&&Je(e$1,o,r.reason==="cleared"?"dance":"die"),Xe(),et(e$1,Bn);}),e$1.on(k,()=>{Et(e$1,"top",void 0,{pan:true}),ot(),qe(e$1)&&ee(e$1);});let j$1=(r,l)=>{let b=d!==null&&i.pointer.down&&r.vars.choosing!==true,c=r.query(Bn);if(!b||d===null){for(let g of c)r.destroy(g);return}c.length===0&&(xt(r,d.x,d.y,{shape:"circle",r:l,color:"#ffffff",alpha:.16,depth:70},{type:Bn,data:{part:0}}),xt(r,d.x,d.y,{shape:"circle",r:l*.42,color:"#ffffff",alpha:.55,depth:71},{type:Bn,data:{part:1}}));let u=i.pointer.x-d.x,M=i.pointer.y-d.y,k=Math.hypot(u,M)||1,x=Math.min(1,l/k);for(let g of r.query(Bn)){let _=r.need(g,e);r.need(g,Bn).part===0?(_.x=d.x,_.y=d.y):(_.x=d.x+u*x,_.y=d.y+M*x);}};e$1.addSystem({id:"survivors",order:0,run(r,l){if(!qe(r)||o===null||Ae)return;let b=r.vars.choosing===true||r.vars.reviving===true;for(let U of [o,...r.query(Ne)]){let H=r.get(U,f);H?.shape==="actor"&&(H.paused=b);}if(b)return;ye=Math.min(12,ye+l*10);let c=Ie(r);if(fe+=l,!De){let U=Math.max(0,he-fe);r.vars.time_left=U,U<=0&&Nt(r);}Q>0&&(Q=Math.max(0,Q-l)),Z.regen>0&&Z.hp<Z.maxHp&&(Z.hp=Math.min(Z.maxHp,Z.hp+Z.regen*l),r.vars.hp=Math.ceil(Z.hp)),r.vars.hp_max=Z.maxHp;let u=nt(),M=be()*.11,k=i.axis(),x=k.x,g=k.y,_=x!==0||g!==0?1:0;if(_===0&&d&&i.pointer.down){x=i.pointer.x-d.x,g=i.pointer.y-d.y;let U=Math.hypot(x,g);_=U<M*.18?0:Math.min(1,U/M);}j$1(r,M);let A=Math.hypot(x,g),L=A>0&&_>0;if(L){let U=x/A*Z.speed*_*l,H=g/A*Z.speed*_*l;for(let oe of [...r.query(Ne),...r.query(er),...r.query(Rn),...r.query(wt),...r.query(lr),...r.query(uo),...r.query(mo)]){let ae=r.need(oe,e);ae.x-=U,ae.y-=H;}yc(r,U,H),we(r,"field_x",U),we(r,"field_y",H),p+=l,p>.6&&mt(r,"survivors-move");}!pt(r,"survivors-move")&&!rn(r)&&ft(r,"circle",{x:c.w/2,y:c.h*.8},{x:M*.6,y:0});let $=r.need(o,f);$.alpha=Q>0&&Math.floor(r.time*12)%2===0?.4:1,$.shape==="actor"&&($.pose=L?"run":"idle",$.speed=Z.speed*Math.max(.3,_),L&&Math.abs(x)>A*.15&&($.facing=x>0?1:-1),$.depth=zt(r,u.y)+5e-4),Ct(r,l),G(r,l),!(Ae||Ss(r))&&(Oe(r,l,L),Te(r,l),!(Ae||Ss(r))&&(le(r,l),!Ae&&(r.vars.score=re*n("killScore")+Math.floor(fe)*5+_e*n("bossScore"),lt(r))));}}),e$1.vars.survivors_base=n("duration"),ce();}};var Ds=[{id:"archer",base:{damage:6,type:"physical",range:2.6,rate:1.2,air:true,ground:true,shot:"td_arrow",shotSpeed:13},tiers:[{cost:70,stats:{},art:"td_archer1"},{cost:100,stats:{damage:9,range:2.8,rate:1.35},art:"td_archer2"},{cost:150,stats:{damage:14,range:3,rate:1.5},art:"td_archer3"}],branches:[{id:"ranger",cost:240,stats:{damage:17,rate:2.5,multishot:2,range:3.1},art:"td_archer_ranger"},{id:"sniper",cost:260,stats:{damage:72,rate:.5,range:4.6,pierce:1,crit:.2,shotSpeed:22},art:"td_archer_sniper"}],unlockLevel:1,metaVar:"meta:tower:archer"},{id:"cannon",base:{damage:12,type:"physical",range:2.3,rate:.5,air:false,ground:true,shot:"bomb",shotSpeed:6,lob:true,splash:.9},tiers:[{cost:110,stats:{},art:"td_cannon1"},{cost:150,stats:{damage:22,splash:1},art:"td_cannon2"},{cost:210,stats:{damage:36,splash:1.1,range:2.5},art:"td_cannon3"}],branches:[{id:"bombard",cost:300,stats:{damage:72,splash:1.5,rate:.42,range:2.8,stun:.25,stunTime:.6},art:"td_cannon_bombard"},{id:"flamer",cost:280,stats:{damage:20,splash:1,rate:.9,burn:12,burnTime:3},art:"td_cannon_flamer"}],unlockLevel:1,metaVar:"meta:tower:cannon"},{id:"mage",base:{damage:14,type:"magic",range:2.4,rate:.7,air:true,ground:true,shot:"orb",shotSpeed:9},tiers:[{cost:100,stats:{},art:"td_mage1"},{cost:140,stats:{damage:26},art:"td_mage2"},{cost:200,stats:{damage:42,range:2.6},art:"td_mage3"}],branches:[{id:"arcane",cost:300,stats:{damage:110,type:"true",rate:.55,range:2.9},art:"td_mage_arcane"},{id:"storm",cost:280,stats:{damage:32,rate:.9,chain:4,beam:true,shot:"zap"},art:"td_mage_storm"}],unlockLevel:3,metaVar:"meta:tower:mage"},{id:"frost",base:{damage:3,type:"magic",range:2.2,rate:.8,air:true,ground:true,shot:"crystal",shotSpeed:10,splash:.5,slow:.35,slowTime:1.6},tiers:[{cost:90,stats:{},art:"td_frost1"},{cost:120,stats:{damage:5,slow:.45,slowTime:1.9},art:"td_frost2"},{cost:170,stats:{damage:8,slow:.5,slowTime:2.2,splash:.7,range:2.4},art:"td_frost3"}],branches:[{id:"glacier",cost:260,stats:{damage:14,slow:.6,slowTime:2.6,stun:.15,stunTime:1},art:"td_frost_glacier"},{id:"blizzard",cost:260,stats:{damage:10,splash:1.4,slow:.5,slowTime:2.4,range:2.7},art:"td_frost_blizzard"}],unlockLevel:5,metaVar:"meta:tower:frost"}],Ei=6,ho=.7,un=e=>Ds.find(s=>s.id===e);function yo(e,s,t){let i=e.base;for(let o=1;o<Math.min(s,e.tiers.length);o++)i={...i,...e.tiers[o].stats};let n=t?e.branches.find(o=>o.id===t):void 0;return n?{...i,...n.stats}:i}function go(e,s,t){let i=0;for(let o=0;o<Math.min(s,e.tiers.length);o++)i+=e.tiers[o].cost;let n=t?e.branches.find(o=>o.id===t):void 0;return i+(n?.cost??0)}var Ts=(e,s,t)=>(t?e.branches.find(i=>i.id===t)?.art:void 0)??e.tiers[Math.min(s,e.tiers.length)-1].art,Hn=[{id:"grunt",cast:"foe",hp:1,speed:1,armor:0,resist:0,bounty:6,leak:1,size:.82,hit:.25,firstLevel:1,cost:1},{id:"runner",cast:"foe5",hp:.55,speed:1.8,armor:0,resist:0,bounty:4,leak:1,size:.72,hit:.15,firstLevel:2,cost:.7},{id:"brute",cast:"foe2",hp:2.6,speed:.7,armor:.6,resist:0,bounty:14,leak:2,size:1,hit:.5,firstLevel:3,cost:2.4,badge:"shield"},{id:"flyer",cast:"foe3",hp:.8,speed:1.2,armor:0,resist:0,flying:true,bounty:8,leak:1,size:.75,hit:0,firstLevel:4,cost:1.3,badge:"wing"},{id:"shaman",cast:"foe4",hp:1.6,speed:.9,armor:0,resist:.7,bounty:12,leak:1,size:.86,hit:.3,firstLevel:6,cost:2,badge:"orb"},{id:"healer",cast:"foe4",variant:7,hp:1.3,speed:.9,armor:.2,resist:.2,bounty:14,leak:1,size:.86,hit:.2,heals:{radius:1.6,share:.08,every:2},firstLevel:8,cost:2.2,badge:"potion"},{id:"splitter",cast:"foe2",variant:5,hp:2,speed:.85,armor:.2,resist:0,bounty:10,leak:2,size:.95,hit:.4,splits:{into:"spawnling",count:3},firstLevel:11,cost:2.6,badge:"skull"},{id:"spawnling",cast:"foe5",variant:3,hp:.35,speed:1.6,armor:0,resist:0,bounty:2,leak:1,size:.55,hit:.1,firstLevel:0,cost:.4},{id:"warlord",cast:"boss",hp:30,speed:.55,armor:.2,resist:0,bounty:120,leak:10,size:1.5,hit:2,summons:{id:"grunt",count:3,every:6},boss:1,firstLevel:0,cost:0},{id:"ironclad",cast:"boss",variant:4,hp:50,speed:.5,armor:.65,resist:0,bounty:160,leak:10,size:1.6,hit:2.5,enrage:{below:.5,speed:1.7},boss:2,firstLevel:0,cost:0,badge:"shield"},{id:"broodmother",cast:"boss",variant:9,hp:62,speed:.5,armor:.2,resist:.3,bounty:200,leak:10,size:1.6,hit:2.5,summons:{id:"spawnling",count:4,every:5},splits:{into:"spawnling",count:8},boss:3,firstLevel:0,cost:0,badge:"skull"},{id:"lich",cast:"boss",variant:13,hp:80,speed:.48,armor:.3,resist:.5,bounty:260,leak:15,size:1.7,hit:3,heals:{radius:2.2,share:.05,every:3},summons:{id:"shaman",count:2,every:7},boss:4,firstLevel:0,cost:0,badge:"orb"}],Kt=e=>Hn.find(s=>s.id===e),Cr=[{id:"meteor",icon:"td_meteor",kind:"strike",cooldown:35,unlockLevel:2,damage:2.2,count:3,radius:1.1,burn:.3},{id:"reinforce",icon:"shield",kind:"summon",cooldown:22,unlockLevel:4,count:2,cast:"helper",hp:4,dps:.6,time:14}],mn=9,hn=13,Si=[{id:"meadow-a",rows:["..S......",".o#o..t..","..#......","..#####o.",".o....#..","..t...#o.",".o#####..","..#..o..t","..#.*....","o.####o..","....o#...",".t...#.o.",".....X..."]},{id:"meadow-b",rows:["......S..",".t..o.#o.","......#..",".o#####..","..#..o...","..#.t..o.","..####...",".o..o#.t.","..*..#...","..####o..",".o#......","..#.o..t.","..X......"]},{id:"meadow-c",rows:[".S.......",".#.o..o..",".#.....#X",".#o.t.o#.",".#.....#.",".#o.o..#.",".#..r..#.",".#.o.o.#o",".#.....#.",".#o.*.o#.",".#######.","..o.o.o..","t.......t"]},{id:"meadow-boss",rows:["....S....","..o.#.o..","....#....",".####.o..",".#..o....",".#.o..t..",".#######.","..o.o..#.",".o.....#o","..######.","..#.o.o..",".o#......","..X......"]},{id:"river-a",rows:[".........","S####.o..",".o..#....","..o.#.~~.","....####.",".o.r...#.","...o...#o",".#######.",".#.o.o...",".#....r..",".####.o..","..o.#....","....X...."]},{id:"river-b",rows:[".S.....S.",".#.o.o.#.",".#..t..#.",".###.###.",".o.#o#.o.","...#.#...","..o###o..","....#....",".o..#.o..","...o#....","..r.#.o..",".o..#..t.","....X...."]},{id:"river-c",rows:["..~~.....","o...####S","..o.#..o.","....#.~~.",".####.~~.",".#..o....",".#.o..r..",".######o.","..o...#..",".~~.o.#..","X######o.","..o.o....","..~~...t."]},{id:"river-boss",rows:[".o.....o.","S##.o.##S","..#.r.#..",".o#####o.","....#....",".o..#.o..",".####..t.",".#..o..o.",".#.o.....",".#######.","..o.o..#.",".o.....#o",".......X."]},{id:"wood-a",rows:["..o...o..","S#######.",".o.....#.","...o.o.#o",".#####.#.",".#.o.#.#.",".#.X.#.#.",".#.###.#.",".#..o..#.",".#######.","..o.o.o..",".t..r..o.","........."]},{id:"wood-b",rows:["...S.....",".o.#..o..","...#.t...",".o.####o.","......#..",".o.o..#o.","......##X",".o.o..#o.","......#..",".o.####o.","...#.r...",".o.#..o..","...S....."]},{id:"wood-c",rows:[".o..o..o.",".#######S",".#.o..o..",".#######.","..o.o..#.",".#######.",".#..o..o.",".#######.","..o..o.#.",".#######.",".#.o..o..",".#..r..t.",".X......."]},{id:"wood-boss",rows:["....X....",".o..#..o.","..o.#....",".####.o..",".#..o..t.",".#.o..o..",".#######.","..o..o.#.",".o.....#.","..######.","..#.o..o.",".o#..r...","..S......"]},{id:"ash-a",rows:["....S....",".o..#..o.","S##.#.##S","..#.#.#..",".o#o#o#o.","..#####..",".o..#..o.","...o#o...",".t..#..t.",".o..#..o.","..r.#.r..",".o..#..o.","....X...."]},{id:"ash-b",rows:[".S.....S.",".#.o.o.#.",".#..o..#.",".###.###.","...#o#...",".o.#.#.o.","...#o#...",".###.###.",".#.o.o.#.",".#.....#.",".#######.","..o.#.o..","....X...."]},{id:"ash-c",rows:[".S.....X.",".#.###.#.",".#o#o#o#.",".#.#.#.#.",".#o#.#o#.",".#.#o#.#.","o#.#.#.#o",".#o#.#o#.",".#.#o#.#.",".#.#.#.#.",".#o#.#o#.",".###.###.","........."]},{id:"ash-boss",rows:[".o.....o.","S#.o.o.#S",".#.....#.",".#o.r.o#.",".#.....#.",".#o.X.o#.",".#..#..#.",".#o.#.o#.",".#..#..#.",".#.o#o.#.",".#######.","..o.o.o..",".t.....t."]}],Os=e=>Si.find(s=>s.id===e);function Nr(e,s){return s==="x"?e.rows.map(t=>[...t].reverse().join("")):s==="y"?[...e.rows].reverse():e.rows}var Bd=e=>e==="#"||e==="S"||e==="X";function zr(e){let s=(D,T)=>e[T]?.[D],t=null,i=[],n=[];for(let D=0;D<e.length;D++)for(let T=0;T<e[D].length;T++){let N=s(T,D);N==="X"?t={col:T,row:D}:N==="S"?i.push({col:T,row:D}):N==="o"&&n.push({col:T,row:D});}if(!t)throw new Error("tower-defense map: no gate (X)");if(i.length===0)throw new Error("tower-defense map: no entry (S)");let o=new Map,d=(D,T)=>`${D},${T}`,p=[t];o.set(d(t.col,t.row),0);let E=[[0,1],[-1,0],[1,0],[0,-1]];for(;p.length>0;){let D=p.shift(),T=o.get(d(D.col,D.row));for(let[N,w]of E){let W=D.col+N,te=D.row+w;!Bd(s(W,te))||o.has(d(W,te))||(o.set(d(W,te),T+1),p.push({col:W,row:te}));}}let O=i.map(D=>{if(!o.has(d(D.col,D.row)))throw new Error(`tower-defense map: the entry ${D.col},${D.row} has no road to the gate`);let T=[D],N=D;for(;N.col!==t.col||N.row!==t.row;){let w=o.get(d(N.col,N.row)),W=E.map(([te,ue])=>({col:N.col+te,row:N.row+ue})).find(te=>o.get(d(te.col,te.row))===w-1);T.push(W),N=W;}return T});return {rows:e,paths:O,gate:t,spots:n}}var Mi=4,pn=5,bo=Mi*pn,_i=[0,9,24,39],Ri=[{map:"meadow-a",mirror:"none"},{map:"meadow-b",mirror:"none"},{map:"meadow-c",mirror:"none"},{map:"meadow-a",mirror:"x"},{map:"meadow-boss",mirror:"none"},{map:"river-a",mirror:"none"},{map:"river-b",mirror:"none"},{map:"river-c",mirror:"none"},{map:"river-a",mirror:"x"},{map:"river-boss",mirror:"none"},{map:"wood-a",mirror:"none"},{map:"wood-b",mirror:"none"},{map:"wood-c",mirror:"none"},{map:"wood-b",mirror:"x"},{map:"wood-boss",mirror:"none"},{map:"ash-a",mirror:"none"},{map:"ash-b",mirror:"none"},{map:"ash-c",mirror:"none"},{map:"ash-a",mirror:"y"},{map:"ash-boss",mirror:"none"}];function Hd(e){let s=e>>>0;return ()=>{s=s+1831565813>>>0;let t=s;return t=Math.imul(t^t>>>15,t|1),t^=t+Math.imul(t^t>>>7,t|61),((t^t>>>14)>>>0)/4294967296}}function Di(e,s){let t=Math.max(1,Math.min(bo,Math.floor(e))),i=Hd(t*7919+13),n=Hn.filter(D=>D.firstLevel>0&&D.firstLevel<=t),o=Hn.find(D=>D.firstLevel===t),d=Math.ceil(t/pn),p=t%pn===0?Hn.find(D=>D.boss===d):void 0,E=6+Math.floor((t-1)/2),O=[];for(let D=1;D<=E;D++){let T=5+D*1.6+t*.35,N=[],w=0,W=0,te=[];if(D===1)te.push(n[0]);else {o&&D===2&&te.push(o);let F=Math.min(4,1+Math.floor(D/3));for(;te.length<F;)te.push(n[Math.floor(i()*n.length)]);}let ue=T/te.length;for(let F of te){let ie=Math.max(1,Math.round(ue/F.cost)),Q=F.speed>=1.5?.55:F.hp>=2?1.3:.85;N.push({enemy:F.id,count:ie,gap:Q,delay:w,entry:W%Math.max(1,s)}),w+=ie*Q*.55+1,W++;}p&&D===E&&N.push({enemy:p.id,count:1,gap:1,delay:w+2,entry:0}),O.push({groups:N});}return O}function Wr(e,s=.5){let t=Math.max(1,Math.min(bo,Math.floor(e))),i=Math.ceil(t/pn),n=t-(i-1)*pn,o=Ri[t-1],d=zr(Nr(Os(o.map),o.mirror)).paths.length;return {level:t,world:i,index:n,boss:n===pn,map:o.map,mirror:o.mirror,hp:16*Math.pow(1.075,t-1)*(.8+s*.4),waves:Di(t,d),gold:220+(t-1)*25,bounty:1+(t-1)*.03,towers:Ds.filter(p=>p.unlockLevel<=t).map(p=>p.id),spells:Cr.filter(p=>p.unlockLevel<=t).map(p=>p.id),branches:t>=Ei,fresh:Hn.find(p=>p.firstLevel===t)?.id??null,enemies:Hn.filter(p=>p.firstLevel>0&&p.firstLevel<=t).map(p=>p.id),firstClearGold:(n===pn?150:60)+(t-1)*20}}var Ti=e=>_i[Math.ceil(Math.max(1,e)/pn)-1]??0,As=(e,s)=>e>=s*.9?3:e>=s*.5?2:1,Ls=5,hl=20,$r=[{id:"hero",cast:"hero",gems:0,perk:"none"},{id:"hero2",cast:"hero2",gems:150,perk:"gold"},{id:"hero3",cast:"hero3",gems:300,perk:"spells"}],Oi="kit-td",Ai=[{id:"StartGold",var:"meta:start_gold",art:"td_gold",color:"coin",perLevel:20,unit:"",maxLevel:10,price:40,growth:.12},{id:"Lives",var:"meta:lives",art:"heart",color:"danger",perLevel:1,unit:"",maxLevel:5,price:120,growth:.2},{id:"Archer",var:"meta:tower:archer",art:"td_archer1",color:"primary",perLevel:6,unit:"%",maxLevel:10,price:40,growth:.12},{id:"Cannon",var:"meta:tower:cannon",art:"td_cannon1",color:"primary",perLevel:6,unit:"%",maxLevel:10,price:40,growth:.12},{id:"Mage",var:"meta:tower:mage",art:"td_mage1",color:"primary",perLevel:6,unit:"%",maxLevel:10,price:45,growth:.12},{id:"Frost",var:"meta:tower:frost",art:"td_frost1",color:"primary",perLevel:6,unit:"%",maxLevel:10,price:45,growth:.12},{id:"Spells",var:"meta:spells",art:"td_meteor",color:"danger",perLevel:8,unit:"%",maxLevel:10,price:50,growth:.12}],yl={game:"tower-defense",character:Oi,stats:Ai,heroes:$r,levels:bo,firstClearGold:e=>Wr(e).firstClearGold,stars:3,starsToEnter:Ti};var Vd="boss-spawned",Gd="boss-defeated",Pi="wave-started",Cs=b("td.spot"),Zt=b("td.tower"),Me=b("td.raider"),tr=b("td.missile"),sn=b("td.soldier"),Ps=b("td.meteor"),gl=b("td.ground"),Li=b("td.part"),bl=b("td.bar"),Is=b("td.zap"),xo=(e,s)=>{let t=Number(e.vars[s]??0);return Number.isFinite(t)?t:0},wd=.5,Fd=.55,Ns={id:"tower-defense",version:2,engines:["phaser"],requires:["round"],params:{difficulty:{type:"number",default:.5,min:0,max:1},lives:{type:"number",default:20,min:1,max:100,integer:true},gold:{type:"number",default:0,min:0,max:1e5,integer:true},wavePause:{type:"number",default:14,min:2,max:60},firstWait:{type:"number",default:25,min:1,max:600},earlyGold:{type:"number",default:2,min:0,max:100},coinRate:{type:"number",default:.15,min:0,max:1}},setup({world:e$1,params:s}){let t=c=>qt(s,c),i=e$1.rng.stream("tower-defense"),n=Wr(1,t("difficulty")),o=zr(Nr(Os(n.map),n.mirror)),d=[],p=Ee(),E=0,O=20,D=20,T=0,N=[],w=0,W=null,te=0,ue=0,F=0,ie=false,Q=false,re=1,_e=null,me=[],ke=null,fe=new Map,he=[],se=null,De=new Map,We=new Map,Pe=()=>$r.find(c=>c.id===e$1.vars["meta:hero"])??$r[0],K=()=>e$1.vars.reviving===true;function Ee(){return Cn(Ie(e$1),mn,hn,{top:.15,bottom:.86,widthShare:.98})}let q=()=>p.cell,ve=c=>p.left+c*p.cell,xe=c=>p.top+c*p.cell,ye=c=>({x:ve(c.col+.5),y:xe(c.row+.5)}),Ae=(c,u)=>({x:(c-p.left)/p.cell,y:(u-p.top)/p.cell}),He=c=>c.row===0?{x:c.col+.5,y:-0.5}:c.row===hn-1?{x:c.col+.5,y:hn+.5}:c.col===0?{x:-0.5,y:c.row+.5}:c.col===mn-1?{x:mn+.5,y:c.row+.5}:null,Z=()=>{d=o.paths.map(c=>{let u=c.map(k=>({x:k.col+.5,y:k.row+.5})),M=He(c[0]);return M&&u.unshift(M),{pts:u,len:u.length-1}});},be=(c,u)=>{if(u<=0)return c.pts[0];if(u>=c.len)return c.pts[c.len];let M=Math.floor(u),k=c.pts[M],x=c.pts[M+1],g=u-M;return {x:k.x+(x.x-k.x)*g,y:k.y+(x.y-k.y)*g}},tt=new Set,Se=(c,u,M,k,x=1)=>{tt.add(c);let g=De.get(c);(g===void 0||!e$1.isAlive(g))&&(g=e$1.create(),e$1.set(g,Li,{id:c}),De.set(c,g)),e$1.set(g,e,{x:u,y:M,scale:x}),e$1.set(g,f,k);},nt=c=>{for(let[u,M]of [...De])tt.has(u)||!c.some(k=>u.startsWith(k))||(e$1.destroy(M),De.delete(u));},rt=c=>{for(let[u,M]of [...De])u.startsWith(c)&&(e$1.destroy(M),De.delete(u));},Ze=(c,u,M,k)=>{let x=e$1.create();return e$1.set(x,gl,{kind:c}),e$1.set(x,e,{x:u,y:M}),e$1.set(x,f,k),x},Ue=()=>{et(e$1,gl),et(e$1,Cs);let c=q();Ze("grass",ve(mn/2),xe(hn/2),{shape:"tile",art:"tile_grass",w:c*mn,h:c*hn,unit:c,color:"ground",depth:-10}),o.rows.forEach((_,A)=>[..._].forEach((L,$)=>{let U=ye({col:$,row:A}),H=U.y+c*.45;L==="#"||L==="S"||L==="X"?Ze("road",U.x,U.y,{shape:"sprite",art:"tile_road",w:c+1,h:c+1,color:"lane",depth:-9}):L==="~"?Ze("water",U.x,U.y,{shape:"rect",w:c+1,h:c+1,color:"primary",alpha:.45,depth:-9}):L==="t"?Ze("tree",U.x,H-c*.65,{shape:"sprite",art:"td_tree",w:c*1.05,h:c*1.3,depth:zt(e$1,H,5)}):L==="r"?Ze("rock",U.x,H-c*.3,{shape:"sprite",art:"rock",w:c*.8,h:c*.6,depth:zt(e$1,H,5)}):L==="*"&&Ze("bush",U.x,H-c*.3,{shape:"sprite",art:"td_bush",w:c*.85,h:c*.6,depth:zt(e$1,H,5)});})),o.spots.forEach((_,A)=>{let L=ye(_),$=Ze("spot",L.x,L.y+c*.18,{shape:"sprite",art:"td_spot",w:c*.95,h:c*.62,depth:-8});e$1.set($,Cs,{index:A,col:_.col,row:_.row});});let u=ye(o.gate),M=He(o.gate),k=M&&M.y>=0?M:null,x=k?ve(o.gate.col+.5+(k.x-(o.gate.col+.5))*.35):u.x,g=k?xe(o.gate.row+.5+(k.y-(o.gate.row+.5))*.35):u.y;Ze("gate",x,g-c*.2,{shape:"sprite",art:"td_gate",w:c*1.35,h:c*1.35,depth:zt(e$1,g+c*.45,5)});for(let _ of o.paths){if(He(_[0]))continue;let A=ye(_[0]);Ze("portal",A.x,A.y-c*.1,{shape:"sprite",art:"td_portal",w:c*1.05,h:c*.95,depth:zt(e$1,A.y,4)});}},ot=c=>e$1.query(Zt).find(u=>e$1.need(u,Zt).spot===c),Ge=c=>{let u=e$1.need(c,Zt),M=un(u.kind),k=ye(o.spots[u.spot]),x=q(),g=x*1.45,_=k.y+x*.42;e$1.set(c,e,{x:k.x,y:_-g/2}),e$1.set(c,f,{shape:"sprite",art:Ts(M,u.tier,u.branch||null),w:x*1.1,h:g,depth:zt(e$1,_,5)});},bt=c=>{E=Math.max(0,Math.round(c)),e$1.vars.gold=E;},Xe=(c,u)=>{let M=ye(o.spots[c]);B(e$1,{kind:"ring",x:M.x,y:M.y,color:u,size:q()*1.5}),B(e$1,{kind:"burst",x:M.x,y:M.y-q()*.4,color:u,n:10,size:q()});},st=(c,u)=>{let M=un(u);if(!M||ot(c)!==void 0)return false;let k=M.tiers[0].cost;if(E<k)return false;bt(E-k);let x=e$1.create();return e$1.set(x,Zt,{spot:c,kind:u,tier:1,branch:"",cooldown:.2}),Ge(x),Xe(c,"text"),e$1.emit("tower-built",{kind:u}),pt(e$1,"td-build")||(mt(e$1,"td-build"),Te()),true},lt=(c,u)=>{let M=ot(c);if(M===void 0)return false;let k=e$1.need(M,Zt),x=un(k.kind),g;if(u){let _=x.branches.find(A=>A.id===u);if(!_||k.branch||k.tier<x.tiers.length||!n.branches)return false;g=_.cost;}else {if(k.tier>=x.tiers.length)return false;g=x.tiers[k.tier].cost;}return E<g?false:(bt(E-g),u?k.branch=u:k.tier++,Ge(M),Xe(c,"coin"),e$1.emit("tower-upgraded",{kind:k.kind,tier:k.tier,branch:k.branch}),true)},je=c=>{let u=ot(c);if(u===void 0)return false;let M=e$1.need(u,Zt),k=Math.floor(go(un(M.kind),M.tier,M.branch||null)*ho);bt(E+k);let x=ye(o.spots[c]);return B(e$1,{kind:"pop",x:x.x,y:x.y-q()*.8,text:`+${k}`,color:"coin",size:Math.round(q()*.3)}),B(e$1,{kind:"burst",x:x.x,y:x.y,color:"muted",n:12,size:q()}),e$1.destroy(u),e$1.emit("tower-sold",{kind:M.kind}),true},Fe=()=>{_e=null,me=[],rt("m:"),e$1.vars.td_menu="";},it=c=>c.map(u=>`${u.action??u.id}@${Math.round(u.x)},${Math.round(u.y)}`).join(";"),dt=c=>{Fe(),_e=c,Tt();},Tt=()=>{if(_e===null)return;let c=_e;me=[];let u=q(),M=Ie(e$1),k=Math.min(M.w,M.h),x=Math.max(u*.46,k*.062),g=Math.max(u*1.1,x*2.3),_=ye(o.spots[c]),A=Math.max(g+x,Math.min(M.w-g-x,_.x)),L=Math.max(M.h*.1+g+x,Math.min(M.h*.88-g-x,_.y-u*.2)),$=(de,$e,Ke,ct,Mt,yn,cn)=>{let en=A+$e*g,On=L+Ke*g;me.push({action:de,x:en,y:On,r:x,ok:cn}),e$1.vars.td_menu=it(me),Se(`m:${de}:bg`,en,On,{shape:"circle",r:x,color:"panel",alpha:.94,depth:60});let or=de==="sell";Se(`m:${de}:rim`,en,On,{shape:"circle",r:x*1.08,color:or?"danger":cn?"coin":"muted",alpha:cn?.9:.5,depth:59.9}),Se(`m:${de}:art`,en,On-x*.12,{shape:"sprite",art:ct,w:or?x*1.25:x*1.15,h:or?x*1.25:x*1.3,alpha:cn?1:.45,depth:60.1}),yn&&Se(`m:${de}:txt`,en,On+x*.78,{shape:"text",text:yn,size:Math.round(x*.52),color:Mt!==null&&!cn?"danger":"coin",bold:true,depth:60.2});},U=ot(c);if(U===void 0){let de=n.towers.map(Ke=>un(Ke)).filter(Boolean),$e=de.length<=1?[[0,-1]]:de.length===2?[[-0.8,-0.7],[.8,-0.7]]:de.length===3?[[-0.85,-0.6],[.85,-0.6],[0,.9]]:[[-0.8,-0.75],[.8,-0.75],[-0.8,.75],[.8,.75]];de.slice(0,4).forEach((Ke,ct)=>{let Mt=Ke.tiers[0].cost;$(`build:${Ke.id}`,$e[ct][0],$e[ct][1],Ke.tiers[0].art,Mt,String(Mt),E>=Mt);});return}let H=e$1.need(U,Zt),oe=un(H.kind),ae=yo(oe,H.tier,H.branch||null);if(Se("m:range",_.x,_.y,{shape:"sprite",art:"aura_field",w:ae.range*u*2,h:ae.range*u*2,color:"primary",alpha:.4,depth:1}),H.tier<oe.tiers.length){let de=oe.tiers[H.tier];$("up",0,-1,de.art,de.cost,String(de.cost),E>=de.cost);}else !H.branch&&n.branches&&oe.branches.slice(0,2).forEach((de,$e)=>$(`branch:${de.id}`,$e===0?-0.85:.85,-0.7,de.art,de.cost,String(de.cost),E>=de.cost));let pe=Math.floor(go(oe,H.tier,H.branch||null)*ho);$("sell",0,1,"td_sell",null,`+${pe}`,true);},Ct=c=>{if(_e===null)return;let u=_e,M=false;if(c.startsWith("build:")?M=st(u,c.slice(6)):c==="up"?M=lt(u):c.startsWith("branch:")?M=lt(u,c.slice(7)):c==="sell"&&(M=je(u)),!M){B(e$1,{kind:"shake",power:.3});return}Fe();},Nt=(c,u)=>{let M=q(),k=-1,x=1/0;return o.spots.forEach((g,_)=>{let A=ye(g),L=ot(_)!==void 0?A.y-M*1.1:A.y-M*.5;if(Math.abs(c-A.x)>M*.55||u<L||u>A.y+M*.55)return;let $=Math.abs(c-A.x)+Math.abs(u-A.y);$<x&&(x=$,k=_);}),k},R=c=>1+.07*(c-1),C=(c,u,M,k)=>{let x=Kt(c);if(!x||d.length===0)return null;let g=x.hp*n.hp*(x.boss?1:R(k)),_=e$1.create();return e$1.set(_,Me,{kind:c,hp:g,maxHp:g,route:u%d.length,progress:M,x:0,y:0,slow:0,slowLeft:0,stun:0,burn:0,burnLeft:0,healCd:x.heals?.every??0,summonCd:x.summons?.every??0,heldBy:-1,enraged:false,wave:k}),e$1.set(_,e,{x:0,y:0}),e$1.set(_,f,{shape:"actor",cast:x.cast,variant:x.variant??i.int(0,99),h:q()*x.size*1.15,pose:x.flying?"air":"walk",depth:6}),h(_),x.boss&&(e$1.emit(Vd,{kind:c}),B(e$1,{kind:"shake",power:1})),_},h=c=>{let u=e$1.need(c,Me),M=Kt(u.kind),k=d[u.route],x=be(k,u.progress),g=be(k,u.progress+.05);u.x=x.x,u.y=x.y;let _=q(),A=e$1.need(c,e),L=e$1.need(c,f),$=xe(x.y)+_*.2;if(A.x=ve(x.x),A.y=$-(M.flying?_*.55:0)-(L.shape==="actor"?L.h/2:0),L.shape==="actor"){Math.abs(g.x-x.x)>1e-4&&(L.facing=g.x>x.x?1:-1),L.depth=zt(e$1,$,5),L.h=_*M.size*1.15;let U=u.heldBy<0&&u.stun<=0;L.pose=M.flying?"air":U?"walk":"idle",L.speed=M.speed*(1-u.slow)*_*re;}},S=c=>d[c.route].len-c.progress,v=c=>{let u=e$1.need(c,e);return {x:u.x,y:u.y}},a=(c,u,M,k,x=1,g="tower")=>{let _=e$1.get(c,Me);if(!_)return;let A=Kt(_.kind),L=u.damage*M*x*(k?2:1);if(u.type==="physical"?L*=1-A.armor*(1-(u.pierce??0)):u.type==="magic"&&(L*=1-A.resist),u.slow&&(_.slow=Math.max(_.slow,u.slow*(A.boss?.5:1)),_.slowLeft=Math.max(_.slowLeft,(u.slowTime??1)*M)),u.burn&&(_.burn=Math.max(_.burn,u.burn*M),_.burnLeft=Math.max(_.burnLeft,u.burnTime??2)),u.stun&&!A.boss&&i.chance(u.stun)&&(_.stun=Math.max(_.stun,u.stunTime??.5)),k){let $=v(c);B(e$1,{kind:"pop",x:$.x,y:$.y-q()*.5,text:String(Math.round(L)),color:"danger",size:Math.round(q()*.3)});}f$1(c,L,g);},f$1=(c,u,M)=>{let k=e$1.get(c,Me);k&&(k.hp-=u,k.hp<=0&&m(c,M));},m=(c,u)=>{let M=e$1.need(c,Me),k=Kt(M.kind);e$1.remove(c,Me),Je(e$1,c,"die"),Fn(e$1,c,1),ue++;let x=Math.round(k.bounty*n.bounty);bt(E+x);let g=v(c);if(B(e$1,{kind:"pop",x:g.x,y:g.y-q()*.6,text:`+${x}`,color:"coin",size:Math.round(q()*.28)}),e$1.emit("enemy-defeated",{kind:M.kind,by:u}),k.boss?(F++,we(e$1,"coins",10),e$1.emit(Gd,{kind:M.kind}),B(e$1,{kind:"shake",power:1.4}),B(e$1,{kind:"flash",color:"coin"})):i.chance(t("coinRate"))&&(we(e$1,"coins",1),e$1.emit("coin-collected",{value:1})),k.splits)for(let _=0;_<k.splits.count;_++)C(k.splits.into,M.route,Math.max(0,M.progress-.18*_),M.wave);},y=c=>{let u=e$1.need(c,Me),M=Kt(u.kind),k=ye(o.gate);B(e$1,{kind:"burst",x:k.x,y:k.y,color:"danger",n:12,size:q()}),e$1.destroy(c),O=Math.max(0,O-M.leak),e$1.vars.lives=O,e$1.emit("player-hit",{lives:O}),B(e$1,{kind:"flash",color:"danger"}),B(e$1,{kind:"shake",power:M.boss?1.6:.8}),O<=0&&X();},P=()=>{if(!(T>=n.waves.length)){T++,e$1.vars.wave=T,N=[];for(let c of n.waves[T-1].groups)for(let u=0;u<c.count;u++)N.push({at:c.delay+u*c.gap,enemy:c.enemy,entry:c.entry});N.sort((c,u)=>c.at-u.at),w=0,W=null,e$1.emit(Pi,{wave:T});}},z=()=>{if(!(W===null||T>=n.waves.length)){if(T>0){let c=Math.ceil(W*t("earlyGold")*n.bounty);if(c>0){bt(E+c);let u=he.find(M=>M.id.startsWith("call"));u&&B(e$1,{kind:"pop",x:u.x,y:u.y-q()*.6,text:`+${c}`,color:"coin",size:Math.round(q()*.32)});}}mt(e$1,"td-call"),P();}},I=c=>{if(ie||!qe(e$1))return;ie=true;let u=c==="defended",M=u?Math.min(Q?1:3,As(O,D)):0;e$1.vars.stars=M,u&&e$1.vars["meta:first_clear"]===true&&we(e$1,"coins",n.firstClearGold),e$1.vars.score=J()+(u?1e3+M*300:0),e$1.vars.reviving=false,Fe(),e$1.emit(Lt,{reason:c,stats:{chapter:n.level,seconds:Math.floor(te),cleared:u,stars:M,coins:Number(e$1.vars.coins??0),bosses:F,kills:ue,lives:O}});},X=()=>{if(e$1.vars.revive_ready===true&&!Q){e$1.vars.reviving=true,Fe(),e$1.emit(Wt,{});return}I("overrun");},ee=()=>{if(K()){Q=true,e$1.vars.reviving=false,O=Ls,e$1.vars.lives=O;for(let c of e$1.query(Me))e$1.need(c,Me).stun=2;B(e$1,{kind:"flash",color:"coin"});}},J=()=>ue*10+O*50+Math.max(0,T-1)*100,Le=()=>1+xo(e$1,"meta:spells"),Oe=(c,u,M)=>{let k=Cr.find(_=>_.id===c);if(!k||(fe.get(c)??0)>0)return;let x=Ae(u,M);if(x.x<-0.5||x.y<-0.5||x.x>mn+.5||x.y>hn+.5)return;if(k.kind==="strike")for(let _=0;_<(k.count??1);_++){let A=e$1.create(),L=(k.radius??1)*.9;e$1.set(A,Ps,{x:x.x+(_===0?0:(i.next()-.5)*L*2),y:x.y+(_===0?0:(i.next()-.5)*L*2),t:0,delay:_*.2,damage:(k.damage??1)*n.hp*Le(),radius:k.radius??1,burn:(k.burn??0)*n.hp*Le()}),e$1.set(A,e,{x:-999,y:-999}),e$1.set(A,f,{shape:"sprite",art:"td_meteor",w:q()*.9,h:q()*.9,alpha:0,depth:45});}else {let _={route:0,q:0,d:1/0};d.forEach((L,$)=>{for(let U=.5;U<=L.len-.5;U+=.25){let H=be(L,U),oe=Math.hypot(H.x-x.x,H.y-x.y);oe<_.d&&(_={route:$,q:U,d:oe});}});let A=k.count??1;for(let L=0;L<A;L++){let $=e$1.create(),U=(k.hp??3)*n.hp*Le();e$1.set($,sn,{hp:U,maxHp:U,dps:(k.dps??.5)*n.hp*Le(),left:k.time??12,route:_.route,progress:Math.max(.3,Math.min(d[_.route].len-.3,_.q+(L-(A-1)/2)*.45)),swing:0}),e$1.set($,e,{x:0,y:0}),e$1.set($,f,{shape:"actor",cast:k.cast??"helper",variant:i.int(0,99),h:q()*.85,pose:"idle",depth:6}),Re($);let H=e$1.need($,e);B(e$1,{kind:"ring",x:H.x,y:H.y,color:"accent",size:q()*1.2});}}let g=k.cooldown*(Pe().perk==="spells"?.7:1);fe.set(c,g),ke=null,se!==null&&e$1.isAlive(se)&&Be(e$1,se,"attack"),e$1.emit("spell-cast",{id:c});},Re=c=>{let u=e$1.need(c,sn),M=d[u.route],k=be(M,u.progress),x=be(M,u.progress-.2),g=q(),_=e$1.need(c,e),A=e$1.need(c,f),L=xe(k.y)+g*.2;_.x=ve(k.x),_.y=L-(A.shape==="actor"?A.h/2:0),A.shape==="actor"&&(Math.abs(x.x-k.x)>1e-4&&(A.facing=x.x>k.x?1:-1),A.depth=zt(e$1,L,5),A.h=g*.85);},G=()=>{(se===null||!e$1.isAlive(se))&&(se=e$1.create());let c=q(),u=o.gate,M=[[1,0],[-1,0],[0,-1],[0,1]].map(([g,_])=>({col:u.col+g,row:u.row+_})).find(g=>g.col>=0&&g.row>=0&&g.col<mn&&g.row<hn&&".tr*".includes(o.rows[g.row][g.col]))??u,k=ye(M),x=k.y+c*.35;e$1.set(se,e,{x:k.x,y:x-c*.6}),e$1.set(se,f,{shape:"actor",cast:Pe().cast,h:c*1.2,pose:"idle",facing:M.col>u.col?-1:1,depth:zt(e$1,x,5)});},ne=()=>{if(pt(e$1,"td-build")||o.spots.length===0)return;let c=d[0],u=be(c,c.len*.4),M=0,k=1/0;o.spots.forEach((x,g)=>{let _=Math.hypot(x.col+.5-u.x,x.row+.5-u.y);_<k&&(k=_,M=g);}),ft(e$1,"tap",ye(o.spots[M]),void 0,q()*1.2);},Te=()=>{if(pt(e$1,"td-call")||T>0)return;let c=ye(o.paths[0][0]);ft(e$1,"tap",c,void 0,q()*1.2);},le=()=>{let c=Ie(e$1),u=Math.min(c.w,c.h),M=q(),k=c.h*.085,x=u*.05,g=(H,oe,ae,pe,de="text",$e=u*.042)=>Se(H,oe,ae,{shape:"text",text:pe,size:Math.round($e),color:de,bold:true,depth:70});Se("h:lives:i",c.w*.07,k,{shape:"sprite",art:"heart",w:x,h:x,depth:70}),g("h:lives",c.w*.15,k,String(O),O<=5?"danger":"text"),Se("h:gold:i",c.w*.3,k,{shape:"sprite",art:"td_gold",w:x*1.15,h:x,depth:70}),g("h:gold",c.w*.4,k,String(E),"coin"),Se("h:wave:i",c.w*.56,k,{shape:"sprite",art:"td_call",w:x,h:x,depth:70}),g("h:wave",c.w*.66,k,`${T}/${n.waves.length}`),Se("h:coin:i",c.w*.8,k,{shape:"sprite",art:"coin",w:x*.9,h:x*.9,depth:70}),g("h:coin",c.w*.89,k,String(e$1.vars.coins??0));let _=c.h*.125,A=e$1.query(Me).find(H=>Kt(e$1.need(H,Me).kind)?.boss);if(A!==void 0){let H=e$1.need(A,Me),oe=c.w*.55,ae=Math.max(10,u*.022);Se("h:n:boss:bg",c.w/2,_,{shape:"rect",w:oe,h:ae,color:"#000000",alpha:.5,radius:ae/2,depth:69});let pe=Math.max(1,(oe-4)*Math.max(0,H.hp/H.maxHp));Se("h:n:boss:fill",c.w/2-(oe-4)/2+pe/2,_,{shape:"rect",w:pe,h:ae-4,color:"danger",radius:(ae-4)/2,depth:69.1}),Se("h:n:boss:i",c.w/2-oe/2-x*.7,_,{shape:"sprite",art:"skull",w:x,h:x,depth:70});}else if(W!==null&&T<n.waves.length){let H=new Map;for(let de of n.waves[T].groups)H.set(de.enemy,(H.get(de.enemy)??0)+de.count);let oe=[...H].slice(0,5),ae=u*.15,pe=c.w/2-(oe.length-1)*ae/2;oe.forEach(([de,$e],Ke)=>{let ct=Kt(de),Mt=pe+Ke*ae;Se(`h:n:${de}:a`,Mt-x*.4,_+x*.1,{shape:"actor",cast:ct.cast,variant:ct.variant??1,h:x*1.5*Math.min(1.3,ct.size+.25),pose:ct.flying?"air":"idle",depth:70}),g(`h:n:${de}:t`,Mt+x*.55,_+x*.1,`\xD7${$e}`,ct.boss?"danger":"text",u*.034);});}if(he=[],W!==null&&T<n.waves.length){let H=T===0?1+.08*Math.sin(e$1.time*6):1;o.paths.forEach((oe,ae)=>{let pe=ye(oe[0]),de=M*.42;he.push({id:`call:${ae}`,x:pe.x,y:pe.y,r:de*1.2}),Se(`b:call:${ae}:bg`,pe.x,pe.y,{shape:"circle",r:de,color:"danger",alpha:.92,depth:65},H),Se(`b:call:${ae}:i`,pe.x,pe.y,{shape:"sprite",art:"td_call",w:de*1.3,h:de*1.3,depth:65.1},H),Se(`b:call:${ae}:t`,pe.x,pe.y+de*1.25,{shape:"text",text:String(Math.ceil(W??0)),size:Math.round(M*.26),color:"text",bold:true,depth:65.2});});}let L=c.h*.925,$=u*.065;Cr.filter(H=>n.spells.includes(H.id)).forEach((H,oe)=>{let ae=c.w*.12+oe*$*2.6,pe=fe.get(H.id)??0;he.push({id:`spell:${H.id}`,x:ae,y:L,r:$*1.15}),ke===H.id&&Se(`b:s:${H.id}:rim`,ae,L,{shape:"circle",r:$*1.18,color:"coin",alpha:.6+.4*Math.sin(e$1.time*8),depth:64.9}),Se(`b:s:${H.id}:bg`,ae,L,{shape:"circle",r:$,color:"panel",alpha:.92,depth:65}),Se(`b:s:${H.id}:i`,ae,L,{shape:"sprite",art:H.icon,w:$*1.25,h:$*1.25,alpha:pe>0?.4:1,depth:65.1}),pe>0&&Se(`b:s:${H.id}:t`,ae,L,{shape:"text",text:String(Math.ceil(pe)),size:Math.round($*.8),color:"text",bold:true,depth:65.2});});let U=c.w*.88;he.push({id:"speed",x:U,y:L,r:$*1.15}),Se("b:speed:bg",U,L,{shape:"circle",r:$,color:re>1?"coin":"panel",alpha:.92,depth:65}),e$1.vars.td_buttons=it(he),Se("b:speed:t",U,L,{shape:"text",text:`x${re}`,size:Math.round($*.75),color:re>1?"panel":"text",bold:true,depth:65.1});},ce=()=>{let c=q(),u=new Set,M=(k,x,g,_,A)=>{u.add(k);let L=We.get(k);if(!L){L=[e$1.create(),e$1.create(),e$1.create(),e$1.create(),e$1.create()];for(let[Mt,yn]of L.entries())e$1.set(yn,bl,{of:k,part:String(Mt)});We.set(k,L);}let $=e$1.need(k,e),U=e$1.need(k,f),H=U.shape==="actor"?U.h:c,oe=$.y-H/2-c*.08,ae=Math.min(Ie(e$1).w,Ie(e$1).h),pe=Math.max(c*.62,ae*.065),de=Math.max(5,pe*.13),$e=x<.999;e$1.set(L[0],e,{x:$.x,y:oe}),e$1.set(L[0],f,{shape:"rect",w:pe,h:de,color:"#000000",alpha:$e?.55:0,radius:de/2,depth:30});let Ke=Math.max(1,(pe-2)*Math.max(0,x));e$1.set(L[1],e,{x:$.x-(pe-2)/2+Ke/2,y:oe}),e$1.set(L[1],f,{shape:"rect",w:Ke,h:de-2,color:g,alpha:$e?1:0,radius:(de-2)/2,depth:30.1}),e$1.set(L[2],e,{x:$.x-pe/2-c*.12,y:oe}),e$1.set(L[2],f,{shape:"sprite",art:_??"shield",w:c*.24,h:c*.24,alpha:_?1:0,depth:30.2});let ct=$.y+H/2;e$1.set(L[3],e,{x:$.x,y:ct}),e$1.set(L[3],f,{shape:"sprite",art:"aura_field",w:c*.75,h:c*.32,color:"primary",alpha:A?.slow?.75:0,depth:2}),e$1.set(L[4],e,{x:$.x,y:$.y}),e$1.set(L[4],f,{shape:"sprite",art:"burst",w:c*.45,h:c*.45,color:"danger",alpha:A?.burn?.5+.4*Math.sin(e$1.time*20):0,depth:29});};for(let k of e$1.query(Me)){let x=e$1.need(k,Me);M(k,x.hp/x.maxHp,"danger",Kt(x.kind)?.badge,{slow:x.slowLeft>0,burn:x.burnLeft>0});}for(let k of e$1.query(sn)){let x=e$1.need(k,sn);M(k,x.hp/x.maxHp,"accent",void 0,null);}for(let[k,x]of [...We])if(!u.has(k)){for(let g of x)e$1.destroy(g);We.delete(k);}},j$1=()=>{for(let c of [Zt,Me,tr,sn,Ps,Is,bl,Li])et(e$1,c);De.clear(),We.clear();for(let c of e$1.query(f))e$1.need(c,f).shape==="actor"&&c!==se&&!e$1.has(c,Li)&&e$1.destroy(c);},r=()=>{j$1(),n=Wr(xo(e$1,"meta:chapter")||1,t("difficulty")),o=zr(Nr(Os(n.map),n.mirror)),Z(),Et(e$1,"top"),p=Ee(),Ue(),E=0,bt((n.gold+t("gold")+xo(e$1,"meta:start_gold"))*(Pe().perk==="gold"?1.25:1)),D=t("lives")+xo(e$1,"meta:lives"),O=D,T=0,N=[],w=0,W=t("firstWait"),te=0,ue=0,F=0,ie=false,Q=false,re=1,_e=null,me=[],ke=null,fe.clear(),he=[],e$1.vars.lives=O,e$1.vars.wave=0,e$1.vars.waves=n.waves.length,e$1.vars.td_level=n.level,e$1.vars.td_world=n.world,e$1.vars.coins=0,e$1.vars.score=0,e$1.vars.stars=0,e$1.vars.reviving=false,e$1.vars.td_speed=1,e$1.vars.level_progress=0,G();},l=c=>{if(c.startsWith("call"))z();else if(c==="speed")re=re>1?1:2,e$1.vars.td_speed=re;else if(c.startsWith("spell:")){let u=c.slice(6);ke===u?ke=null:(fe.get(u)??0)<=0&&(ke=u,Fe());}};e$1.on(j,c=>{let u=c;if(u.type!=="tap"||!qe(e$1)||In(e$1)||ie||K())return;if(_e!==null){let x=me.find(g=>Math.hypot(u.x-g.x,u.y-g.y)<=g.r);if(x){Ct(x.action);return}Fe();}let M=he.find(x=>Math.hypot(u.x-x.x,u.y-x.y)<=x.r);if(M){l(M.id);return}if(ke!==null){Oe(ke,u.x,u.y);return}let k=Nt(u.x,u.y);k>=0&&(pt(e$1,"td-build")||St(e$1),dt(k));}),e$1.on(At,()=>{r(),e$1.vars.level=n.level,ne();}),e$1.on(It,r),e$1.on($t,ee),e$1.on(Bt,()=>{K()&&(e$1.vars.reviving=false,I("overrun"));}),e$1.on(Pt,c=>{Fe(),rt("b:"),he=[],se!==null&&e$1.isAlive(se)&&Je(e$1,se,c.reason==="defended"?"dance":"die");for(let u of e$1.query(Me))Je(e$1,u,"idle");}),e$1.on(k,()=>{Et(e$1,"top"),p=Ee(),Ue();for(let c of e$1.query(Zt))Ge(c);et(e$1,tr),_e!==null&&Tt(),G();}),e$1.addSystem({id:"tower-defense",order:0,run(c,u){if(!qe(c)||ie||K())return;let M=u*re;te+=u;let k=q();for(let[x,g]of fe)g>0&&fe.set(x,Math.max(0,g-M));if(N.length>0){for(w+=M;N.length>0&&N[0].at<=w;){let x=N.shift();C(x.enemy,x.entry,0,T);}N.length===0&&T<n.waves.length&&(W=t("wavePause"));}else W!==null&&(W-=M,W<=0&&P());for(let x of c.query(sn)){let g=c.need(x,sn);if(g.left-=M,g.left<=0||g.hp<=0){c.remove(x,sn),Je(c,x,"die"),Fn(c,x,.8);for(let L of c.query(Me))c.need(L,Me).heldBy===x&&(c.need(L,Me).heldBy=-1);continue}let _=be(d[g.route],g.progress),A=c.query(Me).filter(L=>c.need(L,Me).heldBy===x);if(A.length<2){let L=c.query(Me).filter($=>{let U=c.need($,Me),H=Kt(U.kind);return U.heldBy<0&&!H.flying&&!H.boss&&Math.hypot(U.x-_.x,U.y-_.y)<=Fd}).slice(0,2-A.length);for(let $ of L)c.need($,Me).heldBy=x,A.push($);}A.length>0&&(f$1(A[0],g.dps*M,"soldier"),g.swing-=M,g.swing<=0&&(Be(c,x,"attack"),g.swing=.6)),Re(x);}for(let x of c.query(Me)){let g=c.get(x,Me);if(!g)continue;let _=Kt(g.kind);if(!(g.burnLeft>0&&(g.burnLeft-=M,f$1(x,g.burn*M,"burn"),!c.has(x,Me)))){if(g.slowLeft>0&&(g.slowLeft-=M,g.slowLeft<=0&&(g.slow=0)),g.stun>0&&(g.stun-=M),_.heals&&(g.healCd-=M,g.healCd<=0)){g.healCd=_.heals.every;for(let L of c.query(Me)){let $=c.need(L,Me);Math.hypot($.x-g.x,$.y-g.y)>_.heals.radius||($.hp=Math.min($.maxHp,$.hp+$.maxHp*_.heals.share));}let A=v(x);B(c,{kind:"ring",x:A.x,y:A.y,color:"accent",size:_.heals.radius*k*2});}if(_.summons&&(g.summonCd-=M,g.summonCd<=0)){g.summonCd=_.summons.every;for(let A=0;A<_.summons.count;A++)C(_.summons.id,g.route,Math.max(0,g.progress-.45*(A+1)),g.wave);Be(c,x,"cheer");}if(_.enrage&&!g.enraged&&g.hp<g.maxHp*_.enrage.below){g.enraged=true;let A=v(x);B(c,{kind:"ring",x:A.x,y:A.y,color:"danger",size:k*2});}if(g.heldBy>=0&&!c.has(g.heldBy,sn)&&(g.heldBy=-1),g.heldBy<0&&g.stun<=0&&(g.progress+=_.speed*(1-g.slow)*(g.enraged&&_.enrage?_.enrage.speed:1)*M),g.progress>=d[g.route].len){if(y(x),ie||K())return;continue}h(x);}}for(let x of c.query(Zt)){let g=c.need(x,Zt);if(g.cooldown-=M,g.cooldown>0)continue;let _=un(g.kind),A=yo(_,g.tier,g.branch||null),L=1+xo(c,_.metaVar),$=o.spots[g.spot],U=$.col+.5,H=$.row+.5,oe=c.query(Me).filter(pe=>{let de=c.need(pe,Me);return (Kt(de.kind).flying?A.air:A.ground)&&de.progress>0&&Math.hypot(de.x-U,de.y-H)<=A.range}).sort((pe,de)=>S(c.need(pe,Me))-S(c.need(de,Me))).slice(0,A.multishot??1);if(oe.length===0){g.cooldown=0;continue}g.cooldown=1/A.rate;let ae={x:ve(U),y:xe(H)-k*.75};for(let pe of oe){let de=A.crit!==void 0&&i.chance(A.crit);if(A.beam){let yn=[],cn=ae,en=pe,On=1;for(let or=0;or<=(A.chain??0)&&en!==void 0;or++){let nc=v(en);b(cn,nc,A.type==="magic"?"secondary":"primary"),yn.push(en);let sr=c.need(en,Me),Gl=c.query(Me).filter(ar=>!yn.includes(ar)&&Math.hypot(c.need(ar,Me).x-sr.x,c.need(ar,Me).y-sr.y)<=1.6).sort((ar,rc)=>Math.hypot(c.need(ar,Me).x-sr.x,c.need(ar,Me).y-sr.y)-Math.hypot(c.need(rc,Me).x-sr.x,c.need(rc,Me).y-sr.y))[0];a(en,A,L,de,On),cn=nc,en=Gl,On*=.7;}continue}let $e=v(pe),Ke=c.create(),ct=Math.max(1,Math.hypot($e.x-ae.x,$e.y-ae.y));c.set(Ke,tr,{target:pe,x:ae.x,y:ae.y,ax:$e.x,ay:$e.y,dist0:ct,went:0,stats:A,power:L,crit:de}),c.set(Ke,e,{x:ae.x,y:ae.y});let Mt=A.shot==="td_arrow"?{w:k*.55,h:k*.18}:A.lob?{w:k*.34,h:k*.34}:{w:k*.3,h:k*.3};c.set(Ke,f,{shape:"sprite",art:A.shot,...Mt,...A.burn?{color:"danger"}:A.slow?{color:"primary"}:A.type==="magic"?{color:"secondary"}:{},depth:40});}}for(let x of c.query(tr)){let g=c.need(x,tr);if(c.has(g.target,Me)){let H=v(g.target);g.ax=H.x,g.ay=H.y;}let _=g.ax-g.x,A=g.ay-g.y,L=Math.hypot(_,A),$=g.stats.shotSpeed*k*M,U=c.need(x,e);if(L>$){g.x+=_/L*$,g.y+=A/L*$,g.went+=$;let H=Math.min(1,g.went/g.dist0);U.x=g.x,U.y=g.y-(g.stats.lob?Math.sin(Math.PI*H)*k*.9:0),U.rotation=g.stats.lob?(U.rotation??0)+M*8:Math.atan2(A,_);continue}if(c.destroy(x),g.stats.splash){let H=Ae(g.ax,g.ay);B(c,{kind:"burst",x:g.ax,y:g.ay,color:g.stats.burn?"danger":g.stats.slow?"primary":"coin",n:12,size:g.stats.splash*k*1.6}),g.stats.lob&&B(c,{kind:"shake",power:.25});for(let oe of c.query(Me)){let ae=c.need(oe,Me),pe=Kt(ae.kind);(pe.flying?g.stats.air:g.stats.ground)&&Math.hypot(ae.x-H.x,ae.y+(pe.flying?-0.55:0)-H.y)<=g.stats.splash&&a(oe,g.stats,g.power,g.crit);}}else c.has(g.target,Me)&&(B(c,{kind:"burst",x:g.ax,y:g.ay,color:g.stats.type==="magic"?"secondary":"coin",n:5,size:k*.5}),a(g.target,g.stats,g.power,g.crit));if(ie||K())return}for(let x of c.query(Ps)){let g=c.need(x,Ps);g.t+=M;let _=(g.t-g.delay)/wd,A=c.need(x,e),L=c.need(x,f);if(_<0)continue;if(_<1){let U=Ie(c).h;A.x=ve(g.x)+(1-_)*k*2,A.y=xe(g.y)-(1-_)*U*.5,A.rotation=-0.9,L.shape==="sprite"&&(L.alpha=1);continue}c.destroy(x),B(c,{kind:"burst",x:ve(g.x),y:xe(g.y),color:"danger",n:20,size:g.radius*k*2}),B(c,{kind:"ring",x:ve(g.x),y:xe(g.y),color:"coin",size:g.radius*k*2.2}),B(c,{kind:"shake",power:.8});let $={damage:g.damage,type:"true",...g.burn>0?{burn:g.burn,burnTime:2}:{}};for(let U of c.query(Me)){let H=c.need(U,Me);Math.hypot(H.x-g.x,H.y-g.y)<=g.radius&&a(U,$,1,false,1,"spell");}if(ie||K())return}for(let x of c.query(Is)){let g=c.need(x,Is);g.life-=u,g.life<=0&&c.destroy(x);}if(T>=n.waves.length&&N.length===0&&c.query(Me).length===0){I("defended");return}c.vars.level_progress=n.waves.length>0?Math.min(1,(T-(N.length>0||c.query(Me).length>0?.5:0))/n.waves.length):0,c.vars.score=J(),tt.clear(),_e!==null&&Tt(),ce(),le(),nt(["m:","h:","b:"]);}});let b=(c,u,M)=>{let k=Math.hypot(u.x-c.x,u.y-c.y),x=e$1.create();e$1.set(x,Is,{life:.16}),e$1.set(x,e,{x:(c.x+u.x)/2,y:(c.y+u.y)/2,rotation:Math.atan2(u.y-c.y,u.x-c.x)}),e$1.set(x,f,{shape:"sprite",art:"zap",w:Math.max(8,k),h:q()*.22,color:M,depth:41});};Z(),r();}};var vo=[{id:"lemon",art:"biz1",color:"coin",cost:4,income:1,cycle:1,growth:1.07,manager:60},{id:"bakery",art:"biz2",color:"accent",cost:50,income:17,cycle:2,growth:1.1,manager:600},{id:"cafe",art:"biz3",color:"secondary",cost:600,income:225,cycle:3,growth:1.11,manager:7e3},{id:"workshop",art:"biz4",color:"primary",cost:7e3,income:2800,cycle:4,growth:1.11,manager:8e4},{id:"cinema",art:"ty_cinema",color:"danger",cost:8e4,income:4e4,cycle:6,growth:1.11,manager:1e6},{id:"hotel",art:"biz6",color:"secondary",cost:9e5,income:51e4,cycle:8,growth:1.11,manager:11e6},{id:"bank",art:"biz5",color:"coin",cost:1e7,income:62e5,cycle:10,growth:1.11,manager:12e7},{id:"port",art:"ty_port",color:"primary",cost:12e7,income:8e7,cycle:12,growth:1.11,manager:15e8}],nr=e=>vo.find(s=>s.id===e),ko=[{at:10,speed:2},{at:25,speed:2},{at:50,speed:2},{at:75,income:3},{at:100,speed:2},{at:150,income:3}],Ws=.1,$s=[{id:"double",scope:"one",art:"ty_up",mult:2,price:60,after:5},{id:"triple",scope:"one",art:"ty_up3",mult:3,price:2500,after:25},{id:"all",scope:"all",art:"ty_upall",mult:2,price:40,after:15}],Eo=[{id:"rush",art:"ty_rush",effect:"rush",weight:3,ttl:7,mult:3,seconds:10},{id:"break",art:"ty_wrench",effect:"break",weight:2,ttl:99,taps:3},{id:"invest",art:"ty_investor",effect:"invest",weight:1,ttl:9,now:25,mult:2,seconds:30},{id:"courier",art:"chest",effect:"courier",weight:2,ttl:6,now:15,coins:2}],xl=e=>Eo.find(s=>s.id===e),Ii=[11,18],Ci=[{id:"rush",art:"ty_sk_rush",charge:30,effect:"rush",mult:5,seconds:12},{id:"instant",art:"ty_sk_instant",charge:26,effect:"instant",cycles:8},{id:"sale",art:"ty_sk_sale",charge:28,effect:"sale",mult:.5,seconds:15}],Bs=e=>Ci.find(s=>s.id===e),vl=.4,kl=3,Hr=[{id:"hero",cast:"hero",gems:0,skill:"rush"},{id:"hero2",cast:"hero2",gems:150,skill:"instant"},{id:"hero3",cast:"hero3",gems:300,skill:"sale"}];var El={l:"lemon",b:"bakery",c:"cafe",w:"workshop",n:"cinema",h:"hotel",k:"bank",p:"port"},Ud={r:"rush",b:"break",i:"invest",c:"courier"},ze=(e,s,t="",i)=>({businesses:[...e].map(n=>El[n]??"lemon"),goals:s,events:[...t].map(n=>Ud[n]??"rush"),...{}}),zs=e=>({...e,vip:true}),Ve=e=>({kind:"cash",n:e}),gt=(e,s)=>({kind:"level",biz:El[e]??"lemon",n:s}),Ft=e=>({kind:"managers",n:e}),rr=[ze("lb",[Ve(5200)]),ze("lb",[gt("l",25),Ve(62e3)]),ze("lbc",[Ve(17e3)],"r"),ze("lbc",[Ft(2),Ve(34e3)],"r"),ze("lbc",[gt("b",25),Ve(51e3)],"rc"),ze("lbcw",[Ve(21e4)],"rc"),ze("lbcw",[gt("c",25),Ft(2)],"rc"),ze("lbcw",[Ft(3),Ve(46e4)],"rc"),ze("lbcw",[gt("w",10),Ve(1e6)],"rc"),zs(ze("lbcw",[gt("c",25),Ft(4),Ve(5e6)],"rc")),ze("bcw",[Ve(73e3)],"rb"),ze("bcw",[gt("c",25),Ve(17e4)],"rcb"),ze("bcwn",[Ve(2e5)],"rcb"),ze("bcwn",[Ft(2),Ve(42e4)],"rcb"),ze("bcwn",[gt("n",5),Ve(97e4)],"rcb"),ze("bcwn",[gt("w",25),Ve(24e5)],"rcb"),ze("bcwn",[Ft(3),Ve(19e5)],"rcb"),ze("bcwn",[gt("c",50),Ve(32e5)],"rcb"),ze("bcwn",[gt("n",10),Ft(3)],"rcb"),zs(ze("bcwn",[gt("n",10),Ft(4),Ve(64e6)],"rcb")),ze("cwn",[Ve(12e5)],"rcbi"),ze("cwn",[gt("w",25),Ve(2e6)],"rcbi"),ze("cwnh",[Ve(27e5)],"rcbi"),ze("cwnh",[Ft(2),Ve(32e5)],"rcbi"),ze("cwnh",[gt("h",5),Ve(16e6)],"rcbi"),ze("cwnh",[gt("n",25),Ve(26e6)],"rcbi"),ze("cwnh",[Ft(3),Ve(15e6)],"rcbi"),ze("cwnh",[gt("w",50),Ve(42e6)],"rcbi"),ze("cwnh",[gt("h",10),Ft(3)],"rcbi"),zs(ze("cwnh",[gt("h",10),Ft(4),Ve(26e7)],"rcbi")),ze("wnhk",[Ve(12e6)],"rcbi"),ze("wnhk",[gt("h",10),Ve(36e6)],"rcbi"),ze("wnhk",[Ft(3),Ve(21e7)],"rcbi"),ze("nhkp",[Ve(21e7)],"rcbi"),ze("nhkp",[gt("k",10),Ve(38e7)],"rcbi"),ze("nhkp",[Ft(2),Ve(42e7)],"rcbi"),ze("nhkp",[gt("p",5),Ve(27e8)],"rcbi"),ze("nhkp",[gt("k",25),Ve(32e8)],"rcbi"),ze("nhkp",[gt("p",10),Ft(3)],"rcbi"),zs(ze("nhkp",[gt("p",10),Ft(4),Ve(11e9)],"rcbi"))],Vr=10,Sl=4,Br=rr.length,Ni=[0,18,45,75],zi=e=>Ni[Math.ceil(Math.max(1,e)/Vr)-1]??0,Hs=e=>e>=.3?3:e>=.12?2:1,Vs=30,Ml=(e,s)=>Math.round((s?40:20)+(e-1)*2),Wi=(e,s)=>(s?120:50)+(e-1)*10,$i="kit-tycoon",Bi=[{id:"StartCash",var:"meta:cash",art:"coin",color:"coin",perLevel:20,unit:"%",maxLevel:15,price:40,growth:.12},{id:"CycleSpeed",var:"meta:speed",art:"hourglass",color:"secondary",perLevel:3,unit:"%",maxLevel:15,price:45,growth:.12},{id:"Income",var:"meta:income",art:"ty_up",color:"accent",perLevel:5,unit:"%",maxLevel:20,price:40,growth:.12},{id:"Discount",var:"meta:discount",art:"ty_sk_sale",color:"primary",perLevel:2,unit:"%",maxLevel:15,price:50,growth:.12},{id:"SkillPower",var:"meta:skill",art:"ty_sk_rush",color:"secondary",perLevel:8,unit:"%",maxLevel:10,price:50,growth:.12}],_l={game:"tycoon",character:$i,stats:Bi,heroes:Hr,levels:Br,firstClearGold:e=>Wi(e,rr[Math.max(1,Math.min(Br,e))-1]?.vip===true),stars:3,starsToEnter:zi};var Xd={income:0,speed:0,discount:0};function Mo(e,s=Xd,t){return {biz:e.businesses.map((n,o)=>({def:nr(n)??vo[0],level:o===0?1:0,progress:0,ready:false,manager:false,mult:1,rush:0,rushMult:1,broken:0})),cash:t??Dl(e),earned:0,allMult:1,bought:new Set,timed:[],mods:s}}var Dl=e=>e.cash??(nr(e.businesses[1]??e.businesses[0]??"lemon")?.cost??4)*2,jd=e=>e.timed.reduce((s,t)=>s*t.income,1),Kd=e=>e.timed.reduce((s,t)=>s*t.price,1);function _o(e){let s=1,t=1,i=0;for(let n of ko)e>=n.at?(s*=n.speed??1,t*=n.income??1):i===0&&(i=n.at);return {speed:s,income:t,next:i}}function Vn(e,s){let t=_o(s.level);return Math.max(Ws,s.def.cycle/t.speed/(1+e.mods.speed))}function an(e,s,t=s.level){if(t<=0)return 0;let i=_o(t),n=s.def.cycle/i.speed/(1+e.mods.speed),o=n<Ws?Ws/n:1;return s.def.income*t*i.income*o*s.mult*e.allMult*(1+e.mods.income)*(s.rush>0?s.rushMult:1)*jd(e)}var Gs=(e,s)=>s.level<=0||s.broken>0?0:an(e,s)/Vn(e,s),ws=e=>e.biz.reduce((s,t)=>s+Gs(e,t),0),So=e=>Math.max(.1,1-Math.min(.9,e.mods.discount))*Kd(e);function Gn(e,s,t=1){let i=s.def.growth,n=s.def.cost*Math.pow(i,s.level),o=t<=1?n:n*(Math.pow(i,t)-1)/(i-1);return Math.ceil(o*So(e))}function Vi(e,s,t=1e3){let i=s.def.growth,n=s.def.cost*Math.pow(i,s.level)*So(e);if(e.cash<n)return 0;let o=Math.floor(Math.log(e.cash*(i-1)/n+1)/Math.log(i)),d=Math.max(1,Math.min(t,o));for(;d>1&&Gn(e,s,d)>e.cash;)d--;return Gn(e,s,d)<=e.cash?d:0}var Gr=(e,s)=>Math.ceil(s.def.manager*So(e));function Fs(e,s,t=1){let i=e.biz[s];if(!i||t<1)return {ok:false,milestones:[]};let n=Gn(e,i,t);if(e.cash<n)return {ok:false,milestones:[]};e.cash-=n;let o=i.level;return i.level+=t,{ok:true,milestones:ko.filter(d=>o<d.at&&i.level>=d.at).map(d=>d.at)}}function Us(e,s){let t=e.biz[s];if(!t||t.manager||t.level<=0)return false;let i=Gr(e,t);return e.cash<i?false:(e.cash-=i,t.manager=true,t.ready&&(t.ready=false,t.progress=0,Ro(e,an(e,t))),true)}var Ro=(e,s)=>{e.cash+=s,e.earned+=s;};function Xs(e,s){let t=e.biz[s];if(!t||!t.ready)return 0;t.ready=false,t.progress=0;let i=an(e,t);return Ro(e,i),i}function js(e,s){let t=e.biz[s];return !t||t.broken<=0?false:(t.broken--,t.broken===0)}function Gi(e,s){let t=0;for(let i of e.biz)i.level<=0||i.broken>0||(t+=an(e,i)*s);return Ro(e,t),t}var wi=(e,s)=>Ro(e,s);function Ks(e,s){let t=e.timed.findIndex(i=>i.id===s.id);t>=0&&e.timed.splice(t,1),e.timed.push(s);}function qs(e,s){let t=[],i=[];e.biz.forEach((n,o)=>{if(n.rush>0&&(n.rush=Math.max(0,n.rush-s)),!(n.level<=0||n.ready||n.broken>0)&&(n.progress+=s/Vn(e,n),!(n.progress<1)))if(n.manager){let d=Math.floor(n.progress);n.progress-=d;let p=an(e,n)*d;Ro(e,p),i.push({index:o,amount:p});}else n.progress=1,n.ready=true,t.push(o);});for(let n=e.timed.length-1;n>=0;n--){let o=e.timed[n];o.left-=s,o.left<=0&&e.timed.splice(n,1);}return {ready:t,paid:i}}function Fi(e){let s=[],t=e.biz.reduce((i,n)=>Math.max(i,n.def.cost),0);for(let i of $s)i.scope==="all"?s.push({key:i.id,def:i,index:-1,price:Math.ceil(t*i.price*So(e))}):e.biz.forEach((n,o)=>s.push({key:`${i.id}:${n.def.id}`,def:i,index:o,price:Math.ceil(n.def.cost*i.price*So(e))}));return s}function Ys(e,s=3){return Fi(e).filter(t=>!e.bought.has(t.key)&&(t.index<0?(e.biz[0]?.level??0)>=t.def.after:(e.biz[t.index]?.level??0)>=t.def.after)).sort((t,i)=>t.price-i.price).slice(0,s)}function Js(e,s){let t=Fi(e).find(i=>i.key===s);return !t||e.bought.has(s)||e.cash<t.price?false:(e.cash-=t.price,e.bought.add(s),t.index<0?e.allMult*=t.def.mult:e.biz[t.index].mult*=t.def.mult,true)}var Zs=e=>e.biz.filter(s=>s.manager).length;function Dn(e,s){if(s.kind==="cash")return Math.min(1,e.earned/Math.max(1,s.n));if(s.kind==="managers")return Math.min(1,Zs(e)/Math.max(1,s.n));let t=e.biz.find(i=>i.def.id===s.biz);return Math.min(1,(t?.level??0)/Math.max(1,s.n))}var Do=(e,s)=>s.every(t=>Dn(e,t)>=1),Qs=(e,s)=>s.length?s.reduce((t,i)=>t+Dn(e,i),0)/s.length:1,Hi=(e,s)=>s.manager?1:Vn(e,s)/(Vn(e,s)+1.2);function ea(e,s){let t=e.biz.findIndex(T=>T.broken>0);if(t>=0)return {kind:"fix",index:t};let i=null,n=ws(e),o=(T,N,w)=>{if(w>e.cash+n*8)return;let W=N/Math.max(1,w);(!i||W>i.value)&&(i={move:T,value:W,price:w});},d=T=>s.some(N=>N.kind==="level"&&N.biz===T&&Dn(e,N)<1),p=s.some(T=>T.kind==="managers"&&Dn(e,T)<1),E=s.some(T=>T.kind==="cash"&&Dn(e,T)<1);e.biz.forEach((T,N)=>{let w=Gs(e,T)*Hi(e,T),W={...T,level:T.level+1},ue=(an(e,W)/Vn(e,W)*Hi(e,W)-w)*(T.level===0?3:1)*(d(T.def.id)?3:1);o({kind:"buy",index:N},ue+(d(T.def.id)&&!E?n*.05:0),Gn(e,T)),T.level>0&&!T.manager&&o({kind:"hire",index:N},Gs(e,T)*(1-Hi(e,T))*1.6*(p?3:1)+(p?n*.05:0),Gr(e,T));});for(let T of Ys(e,6)){let N=T.index<0?n*(T.def.mult-1):Gs(e,e.biz[T.index])*(T.def.mult-1);o({kind:"upgrade",key:T.key},N,T.price);}let O=e.biz.map((T,N)=>({b:T,i:N})).filter(T=>T.b.ready).sort((T,N)=>an(e,N.b)-an(e,T.b))[0],D=i;return D&&D.price<=e.cash?D.move:O?{kind:"collect",index:O.i}:null}function Tl(e,s){return s?s.kind==="collect"?Xs(e,s.index)>0:s.kind==="buy"?Fs(e,s.index).ok:s.kind==="hire"?Us(e,s.index):s.kind==="fix"?js(e,s.index)||true:Js(e,s.key):false}function Ol(e,s={}){let t=Mo(e,s.mods),i=.05,n=s.tapEvery??.4,o=s.max??900,d=0,p=0;for(;d<o;){if(Do(t,e.goals))return d;if(qs(t,i),d+=i,d>=p){let E=ea(t,e.goals);E&&(Tl(t,E),p=d+n);}}return 1/0}var Rl=new Map;function ta(e){let s=Rl.get(e);return s===void 0&&(s=Ol(rr[e-1]),Rl.set(e,s)),s}function wr(e,s=.5){let t=Math.max(1,Math.min(Br,Math.floor(e))),i=rr[t-1],n=Math.ceil(t/Vr),o=t-(n-1)*Vr,d=ta(t),p=(1.6-(n-1)*.08-o*.01)*(1.1-s*.2)*(i.extra??1),E=Math.max(45,Math.min(600,Math.ceil((Number.isFinite(d)?d:400)*p/5)*5));return {level:t,world:n,index:o,def:i,boss:i.vip===true,day:E,cash:Dl(i),coins:Ml(t,i.vip===true),firstClearGold:Wi(t,i.vip===true)}}var qd=b("tycoon.part"),Ui=b("tycoon.manager"),Fr=(e,s)=>{let t=Number(e.vars[s]??0);return Number.isFinite(t)?t:0},Qt=e=>{let s=Math.abs(e);for(let[t,i]of [[1e12,"T"],[1e9,"B"],[1e6,"M"],[1e3,"K"]])if(s>=t)return `${(e/t).toFixed(s>=t*100?0:1).replace(/\.0$/,"")}${i}`;return String(Math.floor(e))},Al=new WeakMap,Ll=e=>Al.get(e),To=[1,10,0],na={id:"tycoon",version:2,engines:["phaser"],requires:["round"],params:{difficulty:{type:"number",default:.5,min:0,max:1},coinReward:{type:"number",default:1,min:0,max:10}},setup({world:e$1,params:s}){let t=a=>qt(s,a),i=e$1.rng.stream("tycoon"),n=wr(1,t("difficulty")),o=Mo(n.def),d=new Map,p=new Map,E=null,O=[],D=0,T=0,N=0,w=0,W=0,te=false,ue=false,F=0,ie=null,Q=null,re=null,_e=()=>Hr.find(a=>a.id===e$1.vars["meta:hero"])??Hr[0],me=()=>Bs(_e().skill),ke=()=>e$1.vars.reviving===true,fe=()=>n.def.goals,he=()=>{let a=Ie(e$1);return {...a,U:Math.min(a.w,a.h)}},se=a=>{let f=he(),m=Math.max(1,o.biz.length),y=f.h*.25,P=f.h*.81,z=Math.max(6,f.h*.012),I=Math.min((P-y-z*(m-1))/m,150,f.w*.26),X=Math.min(f.w*.96,660),ee=y+(P-y-(m*I+(m-1)*z))/2;return {x:f.w/2,y:ee+a*(I+z)+I/2,w:X,h:I}},De=a=>{let f=se(a);return {x:f.x-f.w/2+f.h*.56,y:f.y,size:f.h*.9}},We=()=>he().h*.9,Pe=()=>{let a=he();return Math.min(a.U*.075,a.h*.055)},K=()=>{let a=he(),f=Q?1-Q.left/Q.def.ttl:0;return {x:-a.w*.05+f*a.w*1.1,y:a.h*.21,r:a.U*.06}},Ee=new Set,q=(a,f$1,m,y,P=1)=>{Ee.add(a);let z=d.get(a);(z===void 0||!e$1.isAlive(z))&&(z=e$1.create(),e$1.set(z,qd,{id:a}),d.set(a,z)),e$1.set(z,e,{x:f$1,y:m,scale:P}),e$1.set(z,f,y);},ve=()=>{for(let[a,f]of [...d])Ee.has(a)||(e$1.destroy(f),d.delete(a));},xe=(a,f,m,y,P,z,I=70)=>q(a,f,m,{shape:"text",text:y,size:Math.max(9,Math.round(z)),color:P,bold:true,depth:I}),ye=(a,f,m,y,P,z,I,X=2)=>{q(`${a}:bg`,f,m,{shape:"rect",w:y+4,h:P+4,color:"#000000",alpha:.4,radius:(P+4)/2,depth:X});let ee=Math.max(1,y*Math.max(0,Math.min(1,z)));q(`${a}:fill`,f-y/2+ee/2,m,{shape:"rect",w:ee,h:P,color:I,radius:P/2,depth:X+.1});},Ae=a=>O.push(a),He=a=>{let f=o.biz[a],m=To[W]??1;return m===0?Math.max(1,Vi(o,f)):m},Z=()=>{o.biz.forEach((a,f$1)=>{let m=se(f$1),y=De(f$1),P=a.level>0,z=a.def.color;q(`r${f$1}`,m.x,m.y,{shape:"sprite",art:"panel",w:m.w,h:m.h,color:"panel",depth:0}),a.rush>0&&q(`r${f$1}:rush`,y.x,y.y,{shape:"circle",r:y.size*.55,color:"coin",alpha:.35+.2*Math.sin(e$1.time*8),depth:.5});let I=a.ready?1+.06*Math.abs(Math.sin(e$1.time*6)):1;q(`r${f$1}:b`,y.x,y.y,{shape:"sprite",art:a.def.art,w:y.size,h:y.size,color:z,alpha:P?a.broken>0?.55:1:.35,depth:1},I),Ae({id:`biz${f$1}`,x:y.x,y:y.y,w:y.size,h:y.size});let X=m.x-m.w*.12,ee=m.h*.2,J=_o(a.level);if(xe(`r${f$1}:lv`,X,m.y-m.h*.26,P?`Lv ${a.level}${J.next?`/${J.next}`:""}`:"Lv 0","text",ee,2),P){xe(`r${f$1}:inc`,X,m.y+m.h*0,`+${Qt(an(o,a))}`,"coin",ee*.95,2);let r=a.ready||Vn(o,a)<=.15&&a.manager?1:a.progress;ye(`r${f$1}:bar`,X,m.y+m.h*.28,m.w*.3,Math.max(6,m.h*.12),r,a.broken>0?"danger":z),a.ready&&!a.manager&&xe(`r${f$1}:ok`,y.x+y.size*.36,y.y+y.size*.34,"$","coin",y.size*.3,3);}if(ie?.index===f$1){let r=1+.12*Math.sin(e$1.time*9);q(`r${f$1}:ev`,y.x+y.size*.32,y.y-y.size*.3,{shape:"sprite",art:ie.def.art,w:y.size*.5,h:y.size*.5,depth:4},r);}else a.broken>0&&(q(`r${f$1}:ev`,y.x+y.size*.3,y.y-y.size*.28,{shape:"sprite",art:"ty_wrench",w:y.size*.48,h:y.size*.48,depth:4},1+.08*Math.sin(e$1.time*10)),xe(`r${f$1}:evn`,y.x+y.size*.3,y.y+y.size*.05,String(a.broken),"danger",y.size*.26,4.1));let Le=m.x+m.w*.13,Oe=m.h*.27;if(P&&!a.manager){let r=Gr(o,a),l=o.cash>=r;q(`r${f$1}:m:bg`,Le,m.y-m.h*.08,{shape:"circle",r:Oe,color:l?"secondary":"panel",alpha:l?.95:.7,depth:1}),q(`r${f$1}:m`,Le,m.y-m.h*.08,{shape:"sprite",art:"ty_manager",w:Oe*1.7,h:Oe*1.7,alpha:l?1:.5,depth:1.2}),xe(`r${f$1}:m:p`,Le,m.y+m.h*.32,Qt(r),l?"text":"muted",ee*.8,2),Ae({id:`mgr${f$1}`,x:Le,y:m.y,w:Oe*2.2,h:m.h*.9});}let Re=m.x+m.w/2-m.w*.14,G=m.w*.25,ne=m.h*.72,Te=He(f$1),le=Gn(o,a,Te),ce=o.cash>=le;q(`r${f$1}:buy`,Re,m.y,{shape:"sprite",art:"button",w:G,h:ne,color:ce?"accent":"panel",alpha:ce?1:.6,depth:1}),xe(`r${f$1}:buy:n`,Re,m.y-ne*.2,P?`+${Te}`:"OPEN","text",ee*.9,2),q(`r${f$1}:buy:c`,Re-G*.3,m.y+ne*.2,{shape:"sprite",art:"coin",w:ee*.8,h:ee*.8,depth:2}),xe(`r${f$1}:buy:p`,Re+G*.08,m.y+ne*.2,Qt(le),ce?"coin":"muted",ee*.85,2),Ae({id:`buy${f$1}`,x:Re,y:m.y,w:G,h:ne});let j=p.get(f$1);if(a.manager&&(j===void 0||!e$1.isAlive(j))&&(j=e$1.create(),e$1.set(j,Ui,{index:f$1}),e$1.set(j,f,{shape:"actor",cast:"helper",variant:f$1*13+5,h:m.h*.78,pose:"idle",facing:1,depth:2}),p.set(f$1,j)),j!==void 0&&e$1.isAlive(j)){e$1.set(j,e,{x:Le,y:m.y+m.h*.02});let r=e$1.need(j,f);r.shape==="actor"&&(r.h=m.h*.78);}});},be=a=>a.kind==="cash"?"coin":a.kind==="managers"?"ty_manager":nr(a.biz??"")?.art??"biz1",tt=a=>a.kind==="cash"?o.earned:a.kind==="managers"?Zs(o):o.biz.find(f=>f.def.id===a.biz)?.level??0,Se=()=>{let a=he(),f$1=a.U,m=a.h*.09;q("h:t:i",a.w*.09,m,{shape:"sprite",art:"hourglass",w:f$1*.06,h:f$1*.06,depth:70}),xe("h:t",a.w*.09+f$1*.09,m,No(D),D<=15?"danger":"text",f$1*.05),q("h:c:i",a.w*.42,m,{shape:"sprite",art:"coin",w:f$1*.07,h:f$1*.07,depth:70}),xe("h:c",a.w*.42+f$1*.13,m,Qt(o.cash),"coin",f$1*.065);let y=f$1*.17;q("h:mode",a.w*.88,m,{shape:"sprite",art:"button",w:y,h:f$1*.08,color:"secondary",depth:70}),xe("h:mode:t",a.w*.88,m,To[W]===0?"MAX":`\xD7${To[W]}`,"text",f$1*.042,70.1),Ae({id:"mode",x:a.w*.88,y:m,w:y,h:f$1*.09});let P=fe(),z=Math.min(a.w*.3,230),I=Math.max(30,a.h*.05),X=a.h*.15;if(P.forEach((G,ne)=>{let Te=a.w/2+(ne-(P.length-1)/2)*(z+f$1*.02),le=Dn(o,G)>=1;q(`h:g${ne}`,Te,X,{shape:"sprite",art:"panel",w:z,h:I,color:le?"accent":"panel",depth:70}),q(`h:g${ne}:i`,Te-z*.36,X-I*.06,{shape:"sprite",art:be(G),w:I*.75,h:I*.75,depth:70.1});let ce=tt(G),j=le?"\u2713":G.kind==="cash"?`${Qt(ce)}/${Qt(G.n)}`:G.kind==="level"?`Lv ${ce}/${G.n}`:`${ce}/${G.n}`;xe(`h:g${ne}:t`,Te+z*.1,X-I*.08,j,"text",I*.36,70.1),ye(`h:g${ne}:bar`,Te+z*.1,X+I*.3,z*.62,Math.max(4,I*.1),Dn(o,G),le?"accent":"coin",70.1);}),o.timed.forEach((G,ne)=>{let Te=a.w*.9-ne*f$1*.16,le=G.id==="sale"?"ty_sk_sale":G.id==="invest"?"ty_investor":me().art;q(`h:tm${ne}`,Te-f$1*.04,a.h*.205,{shape:"sprite",art:le,w:f$1*.06,h:f$1*.06,depth:70}),xe(`h:tm${ne}:t`,Te+f$1*.035,a.h*.205,`${Math.ceil(G.left)}`,"secondary",f$1*.04);}),Q){let G=K();q("h:courier",G.x,G.y+Math.sin(e$1.time*10)*G.r*.08,{shape:"sprite",art:Q.def.art,w:G.r*2,h:G.r*2,depth:72}),Ae({id:"courier",x:G.x,y:G.y,w:G.r*2.6,h:G.r*2.6});}let ee=We(),J=Pe(),Le=a.w*.25,Oe=w>=me().charge;Oe&&q("h:sk:glow",Le,ee,{shape:"circle",r:J*1.28,color:"secondary",alpha:.5+.3*Math.sin(e$1.time*7),depth:68.9}),q("h:sk:bg",Le,ee,{shape:"circle",r:J,color:"panel",alpha:.95,depth:69}),q("h:sk",Le,ee,{shape:"sprite",art:me().art,w:J*1.4,h:J*1.4,alpha:Oe?1:.45,depth:69.2}),ye("h:charge",Le,ee+J*1.3,J*2,Math.max(5,J*.2),w/me().charge,"secondary",69),Ae({id:"skill",x:Le,y:ee,w:J*2.4,h:J*2.4}),Ys(o,3).forEach((G,ne)=>{let Te=a.w*(.47+ne*.18),le=o.cash>=G.price;q(`h:u${ne}:bg`,Te,ee,{shape:"circle",r:J,color:le?"accent":"panel",alpha:le?.95:.7,depth:69}),q(`h:u${ne}`,Te,ee-J*.08,{shape:"sprite",art:G.def.art,w:J*1.5,h:J*1.5,alpha:le?1:.55,depth:69.2});let ce=G.index>=0?o.biz[G.index]:void 0;ce&&q(`h:u${ne}:b`,Te+J*.7,ee-J*.6,{shape:"sprite",art:ce.def.art,w:J*.9,h:J*.9,color:ce.def.color,depth:69.3}),xe(`h:u${ne}:p`,Te,ee+J*1.3,Qt(G.price),le?"coin":"muted",J*.42,69.3),Ae({id:`up:${G.key}`,x:Te,y:ee,w:J*2.3,h:J*2.6});}),(E===null||!e$1.isAlive(E))&&(E=e$1.create(),e$1.set(E,f,{shape:"actor",cast:_e().cast,h:J*2.6,pose:"idle",facing:1,depth:20})),e$1.set(E,e,{x:a.w*.09,y:ee-J*.1});let Re=e$1.need(E,f);if(Re.shape==="actor"&&(Re.h=J*2.6),re){let G=Math.min(a.w*.86,500),ne=G*.42,Te=a.w/2,le=a.h*.5;q("h:inv:dim",Te,le,{shape:"rect",w:a.w,h:a.h,color:"#000000",alpha:.35,depth:79}),q("h:inv",Te,le,{shape:"sprite",art:"panel",w:G,h:ne,color:"panel",depth:80}),q("h:inv:i",Te-G*.34,le,{shape:"sprite",art:re.def.art,w:ne*.62,h:ne*.62,depth:80.1});let ce=G*.3,j=ne*.5,r=st();q("h:inv:a",Te+G*.02,le-ne*.04,{shape:"sprite",art:"button",w:ce,h:j,color:"accent",depth:80.1}),q("h:inv:a:c",Te+G*.02-ce*.28,le-ne*.04,{shape:"sprite",art:"coin",w:j*.4,h:j*.4,depth:80.2}),xe("h:inv:a:t",Te+G*.02+ce*.1,le-ne*.04,Qt(r),"coin",j*.3,80.2),q("h:inv:b",Te+G*.33,le-ne*.04,{shape:"sprite",art:"button",w:ce,h:j,color:"secondary",depth:80.1}),xe("h:inv:b:t",Te+G*.33,le-ne*.04,`\xD7${re.def.mult??2} ${re.def.seconds??30}s`,"text",j*.28,80.2),ye("h:inv:bar",Te+G*.17,le+ne*.32,G*.6,Math.max(4,ne*.05),re.left/re.def.ttl,"coin",80.1),Ae({id:"inv_now",x:Te+G*.02,y:le-ne*.04,w:ce,h:j}),Ae({id:"inv_share",x:Te+G*.33,y:le-ne*.04,w:ce,h:j});}},nt=()=>{O=[],Ee.clear(),Z(),Se(),ve(),e$1.vars.ty_buttons=O.map(a=>`${a.id}@${Math.round(a.x)},${Math.round(a.y)}`).join(";");},rt=()=>{e$1.vars.cash=Math.floor(o.cash),e$1.vars.earned=Math.floor(o.earned),e$1.vars.time_left=D,e$1.vars.ty_charge=Math.floor(w),e$1.vars.ty_mode=To[W]??1,e$1.vars.level_progress=Qs(o,fe()),e$1.vars.ty_goals=fe().map(a=>`${a.kind}:${Math.floor(tt(a))}/${a.n}`).join("|");},Ze=()=>{for(let f of [...d.values(),...p.values()])e$1.isAlive(f)&&e$1.destroy(f);d.clear(),p.clear(),E!==null&&e$1.isAlive(E)&&e$1.destroy(E),E=null,n=wr(Fr(e$1,"meta:chapter")||1,t("difficulty"));let a={income:Fr(e$1,"meta:income"),speed:Fr(e$1,"meta:speed"),discount:Fr(e$1,"meta:discount")};o=Mo(n.def,a,Math.round(n.cash*(1+Fr(e$1,"meta:cash")))),Al.set(e$1,{s:o,level:n}),Et(e$1,"board",Ie(e$1).h*.24),D=n.day,T=0,N=0,w=0,te=false,ue=false,F=8+i.range(0,4),ie=null,Q=null,re=null,e$1.vars.ty_level=n.level,e$1.vars.ty_world=n.world,e$1.vars.coins=0,e$1.vars.score=0,e$1.vars.stars=0,e$1.vars.reviving=false,rt();},Ue=a=>{if(ue)return;ue=true;let f=a==="cleared",m=Qs(o,fe()),y=f?Math.min(te?1:3,Hs(D/Math.max(1,n.day))):0,P=Math.round(n.coins*t("coinReward")*(f?[1,1,1.25,1.5][y]:m*.5));P>0&&(we(e$1,"coins",P),e$1.emit("coin-collected",{value:P})),f&&e$1.vars["meta:first_clear"]===true&&we(e$1,"coins",n.firstClearGold),e$1.vars.stars=y,e$1.vars.score=Math.round(m*1e3)+(f?y*500+Math.floor(D)*10:0),e$1.vars.reviving=false,ie=null,Q=null,re=null,rt(),e$1.emit(Lt,{reason:a,stats:{chapter:n.level,seconds:Math.floor(T),cleared:f,stars:y,coins:Number(e$1.vars.coins??0),earned:Math.floor(o.earned),managers:Zs(o)}});},ot=()=>{ue||(B(e$1,{kind:"flash",color:"coin"}),Ue("cleared"));},Ge=()=>{if(e$1.vars.revive_ready===true&&!te){e$1.vars.reviving=true,e$1.emit(Wt,{});return}Ue("out-of-time");},bt=()=>{ke()&&(te=true,e$1.vars.reviving=false,D+=Vs,B(e$1,{kind:"flash",color:"coin"}),rt());},Xe=()=>Math.max(ws(o),n.cash*.05),st=()=>Math.round(Xe()*(re?.def.now??25)),lt=a=>{w=Math.min(me().charge,w+kl),e$1.emit("event-handled",{id:a});},je=()=>{let a=o.biz.map((I,X)=>({b:I,i:X})).filter(I=>I.b.level>0&&I.b.broken===0),f=I=>I.effect==="rush"?!ie&&a.some(X=>X.b.rush<=0):I.effect==="break"?!o.biz.some(X=>X.broken>0)&&a.some(X=>X.b.level>=3):I.effect==="invest"?!re:!Q,m=n.def.events.map(I=>Eo.find(X=>X.id===I)).filter(I=>!!I&&f(I));if(!m.length)return;let y=m.reduce((I,X)=>I+X.weight,0),P=i.range(0,y),z=m.find(I=>(P-=I.weight)<0)??m[0];if(z.effect==="rush"){let I=a.filter(X=>X.b.rush<=0);ie={index:I[i.int(0,I.length-1)].i,left:z.ttl,def:z};}else if(z.effect==="break"){let I=a.filter(ee=>ee.b.level>=3),X=I[i.int(0,I.length-1)];X.b.broken=z.taps??3,B(e$1,{kind:"shake",power:.3});}else z.effect==="invest"?re={left:z.ttl,def:z}:Q={left:z.ttl,def:z};e$1.emit("event-started",{id:z.id});},Fe=a=>{ie&&(ie.left-=a)<=0&&(ie=null),Q&&(Q.left-=a)<=0&&(Q=null),re&&(re.left-=a)<=0&&(re=null),n.def.events.length&&(F-=a,F<=0&&(je(),F=i.range(Ii[0],Ii[1])));},it=a=>{let f=o.biz[a];if(!f||f.level<=0)return;let m=De(a);if(f.broken>0){B(e$1,{kind:"burst",x:m.x,y:m.y,color:"ground",n:6,size:m.size*.6}),js(o,a)&&(B(e$1,{kind:"ring",x:m.x,y:m.y,color:"accent",size:m.size*1.2}),lt("break"));return}ie?.index===a&&(f.rush=ie.def.seconds??10,f.rushMult=ie.def.mult??3,B(e$1,{kind:"ring",x:m.x,y:m.y,color:"coin",size:m.size*1.4}),B(e$1,{kind:"pop",x:m.x,y:m.y-m.size*.45,text:`\xD7${f.rushMult}`,color:"coin",size:Math.round(m.size*.3)}),ie=null,lt("rush"));let y=Xs(o,a);y<=0||(w=Math.min(me().charge,w+vl),mt(e$1,"tycoon-collect"),B(e$1,{kind:"burst",x:m.x,y:m.y,color:"coin",n:8,size:m.size*.7}),B(e$1,{kind:"pop",x:m.x,y:m.y-m.size*.35,text:`+${Qt(y)}`,color:"coin",size:Math.round(m.size*.24)}),e$1.emit("cycle-collected",{index:a,amount:y}));},dt=a=>{let f=o.biz[a];if(!f)return;let m=Fs(o,a,He(a)),y=se(a),P=y.x+y.w/2-y.w*.14;if(!m.ok){B(e$1,{kind:"shake",power:.1});return}mt(e$1,"tycoon-buy");let z=De(a);B(e$1,{kind:"ring",x:z.x,y:z.y,color:"coin",size:z.size*1.1}),B(e$1,{kind:"burst",x:P,y:y.y,color:"accent",n:5,size:y.h*.5}),e$1.emit("business-bought",{id:f.def.id,level:f.level});for(let I of m.milestones)B(e$1,{kind:"flash",color:"coin"}),B(e$1,{kind:"pop",x:z.x,y:z.y-z.size*.5,text:`\u2605 ${I}`,color:"coin",size:Math.round(z.size*.3)}),e$1.emit("milestone",{id:f.def.id,at:I});},Tt=a=>{let f=o.biz[a];if(!f||!Us(o,a))return;mt(e$1,"tycoon-manager");let m=De(a);B(e$1,{kind:"ring",x:m.x,y:m.y,color:"secondary",size:m.size*1.3}),B(e$1,{kind:"pop",x:m.x,y:m.y-m.size*.5,text:"\u2605",color:"secondary",size:Math.round(m.size*.35)}),e$1.emit("manager-hired",{id:f.def.id});},Ct=(a,f,m)=>{Js(o,a)&&(mt(e$1,"tycoon-upgrade"),B(e$1,{kind:"ring",x:f,y:m,color:"accent",size:Pe()*2.6}),B(e$1,{kind:"flash",color:"accent"}),e$1.emit("upgrade-bought",{key:a}));},Nt=()=>{let a=me();if(w<a.charge)return false;let f=1+Fr(e$1,"meta:skill");if(w=0,E!==null&&Be(e$1,E,"cheer"),B(e$1,{kind:"flash",color:"secondary"}),a.effect==="rush")Ks(o,{id:"skill",left:(a.seconds??12)*f,income:a.mult??5,price:1});else if(a.effect==="sale")Ks(o,{id:"sale",left:(a.seconds??15)*f,income:1,price:a.mult??.5});else {let m=Gi(o,Math.max(1,Math.round((a.cycles??8)*f))),y=he();B(e$1,{kind:"pop",x:y.w/2,y:y.h*.16,text:`+${Qt(m)}`,color:"coin",size:Math.round(y.U*.07)}),o.biz.forEach((P,z)=>{if(P.level<=0)return;let I=De(z);B(e$1,{kind:"burst",x:I.x,y:I.y,color:"coin",n:10,size:I.size*.8});});}return e$1.emit("skill-cast",{id:a.id}),mt(e$1,"tycoon-skill"),true},R=()=>{if(!Q)return;let a=K(),f=Math.round(Xe()*(Q.def.now??15));wi(o,f);let m=Math.round((Q.def.coins??0)*t("coinReward"));m>0&&(we(e$1,"coins",m),e$1.emit("coin-collected",{value:m})),B(e$1,{kind:"burst",x:a.x,y:a.y,color:"coin",n:14,size:a.r*2}),B(e$1,{kind:"pop",x:a.x,y:a.y+a.r*1.4,text:`+${Qt(f)}`,color:"coin",size:Math.round(a.r*.7)}),Q=null,lt("courier");},C=a=>{if(!re)return;let f=re.def;a?Ks(o,{id:"invest",left:f.seconds??30,income:f.mult??2,price:1}):wi(o,st()),re=null,B(e$1,{kind:"flash",color:"coin"}),lt("invest");},h=(a,f,m)=>O.find(y=>(!m||y.id.startsWith(m))&&Math.abs(a-y.x)<=y.w/2&&Math.abs(f-y.y)<=y.h/2);e$1.on(j,a=>{let f=a;if(f.type!=="tap"||!qe(e$1)||In(e$1)||ue||ke())return;St(e$1),N=0;let m=re?h(f.x,f.y,"inv_")??h(f.x,f.y):h(f.x,f.y,"courier")??h(f.x,f.y);m&&(m.id==="inv_now"?C(false):m.id==="inv_share"?C(true):m.id==="courier"?R():m.id==="mode"?W=(W+1)%To.length:m.id==="skill"?Nt():m.id.startsWith("up:")?Ct(m.id.slice(3),m.x,m.y):m.id.startsWith("biz")?it(Number(m.id.slice(3))):m.id.startsWith("buy")?dt(Number(m.id.slice(3))):m.id.startsWith("mgr")&&Tt(Number(m.id.slice(3))),rt(),Do(o,fe())&&ot());}),e$1.on(At,()=>{Ze(),e$1.vars.level=n.level;}),e$1.on(It,Ze),e$1.on($t,bt),e$1.on(Bt,()=>{ke()&&(e$1.vars.reviving=false,Ue("out-of-time"));}),e$1.on(Pt,a=>{Ee.clear(),ve(),O=[],e$1.vars.ty_buttons="",E!==null&&e$1.isAlive(E)&&Je(e$1,E,a.reason==="cleared"?"dance":"idle");}),e$1.on(k,()=>Et(e$1,"board",Ie(e$1).h*.24));let S=a=>{if(!a)return;let f=a.kind==="collect"||a.kind==="fix"?`biz${a.index}`:a.kind==="buy"?`buy${a.index}`:a.kind==="hire"?`mgr${a.index}`:`up:${a.key}`;return O.find(m=>m.id===f)},v=a=>{let f=he().U,m=o.biz.findIndex(y=>y.ready);if(!pt(a,"tycoon-collect")&&m>=0){let y=De(m);return ft(a,"tap",y,void 0,y.size*.8)}if(!pt(a,"tycoon-buy")){let y=o.biz.findIndex(z=>o.cash>=Gn(o,z,He(o.biz.indexOf(z)))),P=O.find(z=>z.id===`buy${y}`);if(y>=0&&P)return ft(a,"tap",P,void 0,P.h)}if(!pt(a,"tycoon-manager")){let y=o.biz.findIndex(z=>z.level>0&&!z.manager&&o.cash>=Gr(o,z)),P=O.find(z=>z.id===`mgr${y}`);if(y>=0&&P)return ft(a,"tap",P,void 0,P.w)}if(w>=me().charge&&!pt(a,"tycoon-skill")){let y=O.find(P=>P.id==="skill");if(y)return ft(a,"tap",y,void 0,y.w)}if(N>6){let y=S(ea(o,fe()));y&&ft(a,"tap",y,void 0,Math.min(y.w,f*.18));}};e$1.addSystem({id:"tycoon",order:0,run(a,f){if(!(!qe(a)||ue)){if(!ke()){T+=f,N+=f,D=Math.max(0,D-f);for(let m of qs(o,f).paid)m.amount<=0||a.emit("cycle-collected",{index:m.index,amount:m.amount});w=Math.min(me().charge,w+f),Fe(f);}if(nt(),rt(),!ke()){if(Do(o,fe()))return ot();rn(a)||v(a),D<=0&&Ge();}}}}),Ze();}};var Tn=(e,s,t,i,n,o,d,p,E)=>({en:e,ru:s,kz:t,zh:i,ko:n,ja:o,hi:d,pt:p,de:E}),ra=Tn("Score","\u041E\u0447\u043A\u0438","\u04B0\u043F\u0430\u0439","\u5206\u6570","\uC810\uC218","\u30B9\u30B3\u30A2","\u0938\u094D\u0915\u094B\u0930","Pontos","Punkte"),ji={id:"fantasy",version:1,setting:"fantasy",names:Tn("Fantasy","\u0424\u044D\u043D\u0442\u0435\u0437\u0438","\u0424\u044D\u043D\u0442\u0435\u0437\u0438","\u5947\u5E7B","\uD310\uD0C0\uC9C0","\u30D5\u30A1\u30F3\u30BF\u30B8\u30FC","\u092B\u093C\u0948\u0902\u091F\u0947\u0938\u0940","Fantasia","Fantasy"),palette:{background:"#1f2a1d",ground:"#3b4a2e",lane:"#56683f",primary:"#4fa3e0",secondary:"#8e5bd1",danger:"#d0483b",coin:"#f2c14e",accent:"#6fbf4a",text:"#fff6e0",muted:"#b9b08f",piece1:"#e0443e",piece2:"#3f7fe0",piece3:"#43b05c",piece4:"#f2c14e",piece5:"#9b59d0",piece6:"#ef8a2f",panel:"#3a2f25"},texts:{"res.coins":Tn("Gold","\u0417\u043E\u043B\u043E\u0442\u043E","\u0410\u043B\u0442\u044B\u043D","\u91D1\u5E01","\uACE8\uB4DC","\u30B4\u30FC\u30EB\u30C9","\u0938\u094B\u0928\u093E","Ouro","Gold"),"res.score":ra},races:["human","elf","dwarf","orc","undead"],cast:{hero:{preset:"knight",races:["human"]},foe:{preset:"berserker",parts:{Hat:null,Offhand:null,Weapon:"weapon/battle_axe"},races:["orc"]},foe2:{preset:"viking",parts:{Weapon:"weapon/double_axe"},races:["orc"]},boss:{preset:"dark_knight",races:["orc"]},helper:{preset:"hunter",parts:{Weapon:null,Hat:null},races:["elf","dwarf","human"]},foe3:{preset:"crossbowman",parts:{Weapon:"weapon/crossbow"},races:["undead"]},foe4:{preset:"lumberjack",parts:{Weapon:"weapon/spear",Back:null},races:["undead"]},foe5:{preset:"hunter",parts:{Hat:null,Back:null,Weapon:"weapon/dagger"},races:["undead"]},hero2:{preset:"crusader",races:["human","dwarf"]},hero3:{preset:"archmage",races:["elf"]}}},Ki={id:"sci-fi",version:1,setting:"sci-fi",names:Tn("Sci-fi","\u041D\u0430\u0443\u0447\u043D\u0430\u044F \u0444\u0430\u043D\u0442\u0430\u0441\u0442\u0438\u043A\u0430","\u0492\u044B\u043B\u044B\u043C\u0438 \u0444\u0430\u043D\u0442\u0430\u0441\u0442\u0438\u043A\u0430","\u79D1\u5E7B","SF","SF","\u0935\u093F\u091C\u094D\u091E\u093E\u0928 \u0915\u0925\u093E","Fic\xE7\xE3o cient\xEDfica","Science-Fiction"),palette:{background:"#0b1020",ground:"#151d33",lane:"#22305a",primary:"#36e3ff",secondary:"#b45cff",danger:"#ff3d6e",coin:"#ffe14d",accent:"#3dff9a",text:"#e8f6ff",muted:"#7d8fb3",piece1:"#ff3d6e",piece2:"#36a3ff",piece3:"#3dff9a",piece4:"#ffe14d",piece5:"#b45cff",piece6:"#ff8f3d",panel:"#18213d"},texts:{"res.coins":Tn("Chips","\u0427\u0438\u043F\u044B","\u0427\u0438\u043F\u0442\u0435\u0440","\u82AF\u7247","\uCE69","\u30C1\u30C3\u30D7","\u091A\u093F\u092A\u094D\u0938","Chips","Chips"),"res.score":ra},races:["human"],cast:{hero:{preset:"soldier",races:["human"]},foe:{preset:"soldier",parts:{Hat:"hat/great_helm",Weapon:"weapon/pistol"},races:["undead"]},foe2:{preset:"gunslinger",parts:{Weapon:"weapon/rifle",Back:null},races:["orc"]},boss:{preset:"dark_knight",parts:{Weapon:"weapon/flame_sword"},races:["orc"]},helper:{preset:"gunslinger",parts:{Weapon:null,Back:null},races:["elf","human"]},foe3:{preset:"gunslinger",parts:{Weapon:"weapon/pistol",Back:null},races:["undead"]},foe4:{preset:"soldier",parts:{Hat:"hat/great_helm",Weapon:"weapon/spear"},races:["orc"]},foe5:{preset:"soldier",parts:{Hat:null,Back:null,Weapon:"weapon/dagger"},races:["undead"]},hero2:{preset:"musketeer",parts:{Weapon:"weapon/rifle"},races:["human"]},hero3:{preset:"archmage",parts:{Weapon:"weapon/wizard_staff"},races:["elf","human"]}}},qi={id:"cozy",version:1,setting:"cozy",names:Tn("Cozy cartoon","\u0423\u044E\u0442\u043D\u044B\u0439 \u043C\u0443\u043B\u044C\u0442\u044F\u0448\u043D\u044B\u0439","\u0416\u0430\u0439\u043B\u044B \u043C\u0443\u043B\u044C\u0442\u0444\u0438\u043B\u044C\u043C","\u6E29\u99A8\u5361\u901A","\uC544\uB291\uD55C \uCE74\uD230","\u307B\u306E\u307C\u306E\u30AB\u30FC\u30C8\u30A5\u30FC\u30F3","\u0906\u0930\u093E\u092E\u0926\u093E\u092F\u0915 \u0915\u093E\u0930\u094D\u091F\u0942\u0928","Cartoon aconchegante","Gem\xFCtlicher Cartoon"),palette:{background:"#fdf1e4",ground:"#f3d9bf",lane:"#e9c6a3",primary:"#ff8fab",secondary:"#8fb8ff",danger:"#ff6b6b",coin:"#ffb627",accent:"#7ccf8a",text:"#3d2b25",muted:"#9c8478",piece1:"#ff8fab",piece2:"#7fb8ff",piece3:"#8cd98f",piece4:"#ffd166",piece5:"#c39bff",piece6:"#ffa96b",panel:"#fff8f0"},texts:{"res.coins":Tn("Coins","\u041C\u043E\u043D\u0435\u0442\u043A\u0438","\u0422\u0438\u044B\u043D\u0434\u0430\u0440","\u786C\u5E01","\uCF54\uC778","\u30B3\u30A4\u30F3","\u0938\u093F\u0915\u094D\u0915\u0947","Moedas","M\xFCnzen"),"res.score":ra},races:["human","elf","dwarf"],cast:{hero:{preset:"camper",parts:{Glasses:null},races:["human"]},foe:{preset:"lumberjack",parts:{Weapon:"weapon/3",Back:null},races:["orc"]},foe2:{preset:"lumberjack",parts:{Weapon:null,Back:null},races:["dwarf"]},boss:{preset:"viking",races:["orc"]},helper:{preset:"camper",parts:{Weapon:null,Back:null,Glasses:null},races:["human","elf","dwarf"]},foe3:{preset:"hunter",parts:{Weapon:"weapon/hunting_bow"},races:["orc"]},foe4:{preset:"quarterback",races:["orc"]},foe5:{preset:"camper",parts:{Weapon:null,Back:null,Glasses:null},races:["orc"]},hero2:{preset:"quarterback",races:["human"]},hero3:{preset:"wizard",races:["elf"]}}},Yi={id:"post-apocalypse",version:1,setting:"post-apocalypse",names:Tn("Post-apocalypse","\u041F\u043E\u0441\u0442\u0430\u043F\u043E\u043A\u0430\u043B\u0438\u043F\u0441\u0438\u0441","\u041F\u043E\u0441\u0442\u0430\u043F\u043E\u043A\u0430\u043B\u0438\u043F\u0441\u0438\u0441","\u672B\u65E5\u5E9F\u571F","\uD3EC\uC2A4\uD2B8 \uC544\uD3EC\uCE7C\uB9BD\uC2A4","\u30DD\u30B9\u30C8\u30A2\u30DD\u30AB\u30EA\u30D7\u30B9","\u092A\u094D\u0930\u0932\u092F \u0915\u0947 \u092C\u093E\u0926","P\xF3s-apocalipse","Postapokalypse"),palette:{background:"#1d1a16",ground:"#3a3328",lane:"#4d4436",primary:"#d9a441",secondary:"#7a8f5b",danger:"#b8402d",coin:"#e0c060",accent:"#8fa35a",text:"#f0e6d2",muted:"#a39a86",piece1:"#b8402d",piece2:"#5a7f9a",piece3:"#7a8f5b",piece4:"#e0c060",piece5:"#8a6a4a",piece6:"#d9762f",panel:"#2c2620"},texts:{"res.coins":Tn("Caps","\u041A\u0440\u044B\u0448\u043A\u0438","\u049A\u0430\u049B\u043F\u0430\u049B\u0442\u0430\u0440","\u74F6\u76D6","\uBCD1\uB69C\uAED1","\u30AD\u30E3\u30C3\u30D7","\u0922\u0915\u094D\u0915\u0928","Tampinhas","Kronkorken"),"res.score":ra},races:["human","undead","orc"],cast:{hero:{preset:"soldier",parts:{Hat:null,Gloves:"gloves/bracers"},races:["human"]},foe:{preset:"lumberjack",parts:{Weapon:null,Back:null,Gloves:null},races:["undead"]},foe2:{preset:"berserker",parts:{Hat:null,Offhand:null,Weapon:"weapon/mace"},races:["orc"]},boss:{preset:"berserker",parts:{Hat:"hat/great_helm",Weapon:"weapon/double_axe"},races:["orc"]},helper:{preset:"soldier",parts:{Hat:null,Weapon:null},races:["human"]},foe3:{preset:"musketeer",parts:{Weapon:"weapon/musket",Hat:null},races:["undead"]},foe4:{preset:"viking",parts:{Weapon:"weapon/mace"},races:["undead"]},foe5:{preset:"lumberjack",parts:{Weapon:"weapon/dagger",Back:null},races:["undead"]},hero2:{preset:"viking",parts:{Hat:null},races:["human"]},hero3:{preset:"ranger",races:["human"]}}},oa=[ji,Ki,qi,Yi],Xi=(e,s)=>(e.flows??[]).some(t=>t.resource===s.resource&&t.by===s.by&&t.kind===s.kind)?e:{...e,flows:[...e.flows??[],s]},Pl=e=>e.resources?.find(s=>s.kind==="currency")?.id??"coins",Ji=e=>s=>Xi(s,{resource:Pl(s),by:`system:${e}`,kind:"sink"}),Zi={id:"hero-upgrade",version:1,name:"link.hero-upgrade",core:["runner","platformer","survivors","tower-defense"],systems:["character"],apply:Ji("character")},Qi={id:"puzzle-city",version:1,name:"link.puzzle-city",core:["match3","merge"],systems:[],apply(e){if(e.modes.some(i=>i.id==="city"))return e;let s=Pl(e),t={...e,modes:[...e.modes,{id:"city",preset:"tycoon",role:"meta"}]};return Xi(Xi(t,{resource:s,by:"city",kind:"source",amount:"vars.coins"}),{resource:s,by:"system:store",kind:"sink"})}},ec={id:"runner-collection",version:1,name:"link.runner-collection",core:["runner","platformer"],systems:["lootboxes","collections"],apply:Ji("lootboxes")},tc={id:"defense-boosts",version:1,name:"link.defense-boosts",core:["tower-defense","survivors"],systems:["boosts"],apply:Ji("boosts")},sa=[Zi,Qi,ec,tc];var Il=(e,s)=>`${e.character}-${s}`;var Cl={id:"runner",version:1,engine:"phaser",genre:"runner",name:"preset.runner",blocks:["round","lane-runner"],params:{difficulty:{type:"number",default:.5,min:0,max:1},generosity:{type:"number",default:.6,min:0,max:1},lanes:{type:"number",default:3,min:2,max:5,integer:true},lives:{type:"number",default:3,min:1,max:9,integer:true},length:{type:"number",default:1,min:.05,max:5}},blockParams:{"lane-runner":{lanes:"params.lanes",lives:"params.lives",difficulty:"params.difficulty",coinRate:"0.5 + params.generosity * 0.4",powerRate:"0.12 + params.generosity * 0.2",lengthScale:"params.length"}},produces:["soft","score"],placements:[{id:"reward_window",kind:"reward-window"},{id:"revive",kind:"revive",dailyLimit:5}]},Ur={difficulty:{type:"number",default:.5,min:0,max:1},generosity:{type:"number",default:.6,min:0,max:1}},Xr=[{id:"reward_window",kind:"reward-window"}],Nl={id:"platformer",version:1,engine:"phaser",genre:"platformer",name:"preset.platformer",blocks:["round","platformer"],params:{...Ur,lives:{type:"number",default:3,min:1,max:9,integer:true},doubleJump:{type:"boolean",default:false}},blockParams:{platformer:{difficulty:"params.difficulty",lives:"params.lives",doubleJump:"params.doubleJump"}},produces:["soft","score"],placements:[...Xr,{id:"revive",kind:"revive",dailyLimit:5}]},zl={id:"survivors",version:1,engine:"phaser",genre:"survivors",name:"preset.survivors",blocks:["round","survivors"],params:{...Ur,minutes:{type:"number",default:5,min:.5,max:15}},blockParams:{survivors:{duration:"params.minutes * 60",spawnRate:"0.9 + params.difficulty * 0.6",spawnGrowth:"0.6 + params.difficulty * 0.6",foeHpGrowth:"0.3 + params.difficulty * 0.3",foeDamage:"0.8 + params.difficulty * 0.4",coinRate:"0.15 + params.generosity * 0.3",hp:"120 - params.difficulty * 40"}},produces:["soft","score"],placements:[...Xr,{id:"revive",kind:"revive",dailyLimit:5},{id:"reroll",kind:"retry",dailyLimit:10}]},Wl={id:"tower-defense",version:2,engine:"phaser",genre:"tower-defense",name:"preset.tower-defense",blocks:["round","tower-defense"],params:{...Ur,lives:{type:"number",default:20,min:1,max:100,integer:true}},blockParams:{"tower-defense":{difficulty:"params.difficulty",lives:"params.lives",coinRate:"0.08 + params.generosity * 0.25",earlyGold:"1 + params.generosity * 2"}},produces:["soft","score"],placements:[...Xr,{id:"revive",kind:"revive",dailyLimit:5}]},$l={id:"match3",version:2,engine:"phaser",genre:"match3",name:"preset.match3",blocks:["round","match3"],params:{...Ur},blockParams:{match3:{difficulty:"params.difficulty",coinEvery:"12 - params.generosity * 7"}},produces:["soft","score","stars"],placements:[...Xr,{id:"revive",kind:"revive",dailyLimit:5}]},Bl={id:"merge",version:2,engine:"phaser",genre:"merge",name:"preset.merge",blocks:["round","merge"],params:{...Ur},blockParams:{merge:{difficulty:"params.difficulty",orderReward:"0.6 + params.generosity * 0.8"}},produces:["soft","score","stars"],placements:[...Xr,{id:"revive",kind:"revive",dailyLimit:5}]},Hl={id:"tycoon",version:2,engine:"phaser",genre:"idle-tycoon",name:"preset.tycoon",blocks:["round","tycoon"],params:{...Ur},blockParams:{tycoon:{difficulty:"params.difficulty",coinReward:"0.6 + params.generosity * 0.8"}},produces:["soft","score","stars"],placements:[...Xr,{id:"revive",kind:"revive",dailyLimit:5}]},Vl=[Cl,Nl,zl,Wl,$l,Bl,Hl],Yd=[zo,Bo,bs,Rs,Ns,ns,us,na];function Jd(e){Kr(e);for(let s of Yd)e.has(Ln,s.id)||e.define(Ln,s);for(let s of oa)e.has(ir,s.id)||e.define(ir,s);for(let s of sa)e.has(qr,s.id)||e.define(qr,s);for(let s of Vl)e.has(Pn,s.id)||e.define(Pn,s);}var Zd={v:1,engine:"phaser",seed:"demo-runner",modes:[{id:"run",preset:"runner",role:"core"}],resources:[{id:"coins",kind:"currency",ref:"CO",name:"res.coins"},{id:"score",kind:"score",name:"res.score"}],flows:[{resource:"coins",by:"run",kind:"source",amount:"vars.coins"},{resource:"coins",by:"system:store",kind:"sink"},{resource:"score",by:"run",kind:"source",amount:"vars.score"}],texts:{title:{en:"Lane Dash",ru:"\u0420\u044B\u0432\u043E\u043A \u043F\u043E \u043F\u043E\u043B\u043E\u0441\u0430\u043C"},hint:{en:"Swipe or tap a side to change lanes",ru:"\u0421\u0432\u0430\u0439\u043F \u0438\u043B\u0438 \u043D\u0430\u0436\u0430\u0442\u0438\u0435 \u0441\u0431\u043E\u043A\u0443 \u043C\u0435\u043D\u044F\u0435\u0442 \u043F\u043E\u043B\u043E\u0441\u0443"}}};function Qd(e,s={}){let t=e==="runner"?"run":"main";return {v:1,engine:"phaser",seed:s.seed??e,modes:[{id:t,preset:e,role:"core",...s.params?{params:s.params}:{}}],resources:[{id:"coins",kind:"currency",ref:s.coinRef??"CO",name:"res.coins"},{id:"score",kind:"score",name:"res.score"}],flows:[{resource:"coins",by:t,kind:"source",amount:"vars.coins"},{resource:"coins",by:"system:store",kind:"sink"},{resource:"score",by:t,kind:"source",amount:"vars.score"}],...s.texts?{texts:s.texts}:{},...s.palette?{palette:s.palette}:{},...s.assets?{assets:s.assets}:{}}}export{li as ABILITIES,ir as ASSET_PACKS,Ln as BLOCKS,xi as BOSS_DEFEATED,_s as BOSS_SPAWNED,Ei as BRANCH_LEVEL,Gt as Body,Rn as Bullet,Es as CHAPTERS,cc as CORE_EFFECTS,fc as DEFAULT_REWARDS,Zd as DEMO_SPEC,wt as Drop,jr as EFFECTS,Hn as ENEMIES,Io as ENGINES,oc as ENTRY_ID_RE,Xt as ExprError,Jn as FOES,pa as FUNCTIONS,Ne as Foe,Bt as GIVE_UP,zn as Gem,Pr as HEROES,tn as Jumper,lc as KNOWN_SYSTEMS,qn as LEVELS_PER_WORLD,pi as LEVEL_CLEARED,Ri as LEVEL_MAPS,hi as LEVEL_UP,qr as LINKS,Oa as M3_CHARACTER,oo as M3_ELEMENTS,Ma as M3_ENEMIES,gr as M3_HEROES,Fo as M3_LEVELS,ro as M3_LEVELS_PER_WORLD,wo as M3_LEVEL_DEFS,Tc as M3_META,Aa as M3_META_STATS,vn as M3_OBSTACLES,Sa as M3_PIECES,_a as M3_SKILLS,Un as M3_SPECIALS,_c as M3_WORLDS,Ra as M3_WORLD_STARS,Si as MAPS,mn as MAP_COLS,hn as MAP_ROWS,jt as MAX_LEVEL,vs as MAX_PASSIVES,xs as MAX_WEAPONS,mi as META_CHARACTER,ui as META_STATS,Xn as MG_BOARDS,co as MG_CHAINS,Za as MG_CHARACTER,$c as MG_COLS,Er as MG_HEROES,is as MG_LEVELS,kr as MG_LEVELS_PER_WORLD,as as MG_LEVEL_DEFS,Vc as MG_META,Qa as MG_META_STATS,Yt as MG_OBSTACLES,ls as MG_REVIVE_ENERGY,Bc as MG_ROWS,qa as MG_SKILLS,Xa as MG_SPECIAL_ITEMS,Hc as MG_WORLDS,Ya as MG_WORLD_STARS,fo as MergeItem,tr as Missile,Wo as OBSTACLE_KINDS,el as Order,Ar as PASSIVES,ks as PASSIVE_IDS,hc as PIECE_COLORS,di as PLATFORMER_CHARACTER,Tr as PLATFORMER_HEROES,ys as PLATFORMER_LEVELS,sl as PLATFORMER_META,fi as PLATFORMER_META_STATS,sa as PLATFORM_LINKS,oa as PLATFORM_PACKS,Vl as PLATFORM_PRESETS,on as POWERS,eo as POWER_IDS,Pn as PRESETS,dl as REROLL_GEMS,$t as REVIVE,ll as REVIVE_GEMS,Wt as REVIVE_OFFER,hs as ROOMS,Dt as ROOM_ROWS,Pt as ROUND_ENDED,Lt as ROUND_OVER,At as ROUND_STARTED,va as RUNNER_CHARACTER,hr as RUNNER_HEROES,Qr as RUNNER_LEVELS,bc as RUNNER_META,ka as RUNNER_META_STATS,Me as Raider,ht as RoadItem,xn as Runner,ho as SELL_SHARE,It as SHOW_START,Jr as SPEC_VERSION,Cr as SPELLS,xa as START_ROUND,fl as SURVIVORS_META,er as Shot,sn as Soldier,Cs as Spot,Ms as Survivor,Oi as TD_CHARACTER,$r as TD_HEROES,bo as TD_LEVELS,pn as TD_LEVELS_PER_WORLD,hl as TD_LIVES,yl as TD_META,Ai as TD_META_STATS,Ls as TD_REVIVE_LIVES,Mi as TD_WORLDS,_i as TD_WORLD_STARS,Ds as TOWERS,vo as TY_BUSINESSES,$i as TY_CHARACTER,Eo as TY_EVENTS,Hr as TY_HEROES,Br as TY_LEVELS,Vr as TY_LEVELS_PER_WORLD,rr as TY_LEVEL_DEFS,_l as TY_META,Bi as TY_META_STATS,ko as TY_MILESTONES,Vs as TY_REVIVE_SECONDS,Ci as TY_SKILLS,$s as TY_UPGRADES,Sl as TY_WORLDS,Ni as TY_WORLD_STARS,at as Thing,Zt as Tower,Ui as TyManager,gi as UPGRADE_PICK,yi as UPGRADE_PICKED,bi as UPGRADE_REROLL,Pi as WAVE_STARTED,fn as WEAPONS,Or as WEAPON_IDS,ai as WORLDS,ii as WORLD_STARS,gs as abilitiesFor,Be as act,ad as applyLink,ha as attachRules,Cn as boardOf,ul as buildFromVar,vi as buildToVar,bn as cellAt,Ye as cellCenter,Lr as chapterOf,ga as checkEconomy,ua as checkExpr,Lo as checkRules,nn as compileExpr,qi as cozyPack,ud as createKitRegistry,Oo as createRegistry,tc as defenseBoostsLink,gn as defineKind,Kt as enemyOf,ma as evalNumber,ji as fantasyPack,xr as findMatches,B as fx,ya as hasErrors,za as hasMove,Il as heroCharacterOf,Zi as heroUpgradeLink,Bo as laneRunnerBlock,ur as levelOf,ao as m3EnemyOf,br as m3LevelOf,Vo as m3SkillOf,Da as m3StarsToEnter,ns as match3Block,$l as match3Preset,us as mergeBlock,Bl as mergePreset,mr as metersOf,ln as mgChainOf,Sr as mgLevelOf,ss as mgSkillOf,Sn as mgSpecialOf,cs as mgStarsFor,Ja as mgStarsToEnter,pc as migrateSpec,Nr as mirrored,ml as offerFromVar,ki as offerToVar,sd as packName,Et as placeBackdrop,bs as platformerBlock,Dr as platformerLevelOf,Nl as platformerPreset,Yi as postApocalypsePack,Qi as puzzleCityLink,Kr as registerCoreEffects,Jd as registerPlatformKit,Po as resolveParams,zo as roundBlock,ec as runnerCollectionLink,Cl as runnerPreset,Ki as sciFiPack,Zr as scrollBackdrop,Je as setPose,Qt as shortCash,Qd as specForPreset,ci as starsToEnter,md as startMode,Rs as survivorsBlock,zl as survivorsPreset,Wr as tdLevelOf,As as tdStarsFor,Ti as tdStarsToEnter,Di as tdWavesOf,Ts as towerArt,Ns as towerDefenseBlock,Wl as towerDefensePreset,un as towerOf,go as towerSpent,yo as towerStats,zr as traceMap,fr as trackControls,ta as tyBotTimeOf,nr as tyBusinessOf,xl as tyEventOf,wr as tyLevelOf,Bs as tySkillOf,Hs as tyStarsFor,zi as tyStarsToEnter,na as tycoonBlock,Hl as tycoonPreset,Ll as tycoonStateOf,fd as validateSpec,Ie as viewOf};
|
|
1
|
+
import {b,m,l,i,c,j,n,f,k,e}from'./chunk-NBIYNARI.js';export{o as ART,l as DEFAULT_CAST,m as DEFAULT_LOOK,g as DEFAULT_PALETTE,n as FX_TOPIC,j as INPUT_TOPIC,e as Transform,k as VIEW_RESIZED_TOPIC,f as Visual,c as World,q as artAspect,r as artDocument,d as createFixedStepper,a as createRng,b as defineComponent,p as hasArt,i as mergePalette,h as resolveColor}from'./chunk-NBIYNARI.js';function Rn(e){if(!jd.test(e))throw new Error(`registry: bad kind name "${e}"`);return Object.freeze({name:e})}var Il=/^[a-z0-9][a-z0-9-]*(?:\.[a-z0-9][a-z0-9-]*)*$/,jd=/^[a-z][a-z0-9-]*$/;function Uo(e){let t=new Map,n=r=>{let o=t.get(r);return o||(o=new Map,t.set(r,o)),o},s={define(r,o,c){if(!o||typeof o!="object")throw new Error(`registry: ${r.name} entry must be an object`);if(typeof o.id!="string"||!Il.test(o.id))throw new Error(`registry: ${r.name} has a bad id "${String(o.id)}"`);if(!Number.isInteger(o.version)||o.version<1)throw new Error(`registry: ${r.name} "${o.id}" needs an integer version \u2265 1`);let d=n(r.name);if((d.has(o.id)||(e?.has(r,o.id)??false))&&!c?.override)throw new Error(`registry: ${r.name} "${o.id}" is already defined (pass { override: true } to replace it)`);let _=Object.freeze({...o});return d.set(o.id,_),_},get(r,o){let c=t.get(r.name)?.get(o);return c||e?.get(r,o)},require(r,o){let c=s.get(r,o);if(!c)throw new Error(`registry: no ${r.name} "${o}"`);return c},has(r,o){return s.get(r,o)!==void 0},list(r){let o=new Map;for(let c of e?.list(r)??[])o.set(c.id,c);for(let[c,d]of t.get(r.name)??[])o.set(c,d);return [...o.values()].sort((c,d)=>c.id<d.id?-1:c.id>d.id?1:0)},extend(){return Uo(s)}};return s}var Zt=class extends Error{constructor(n,s,r){super(`${n} at ${r} in "${s}"`);this.source=s;this.at=r;this.name="ExprError";}source;at},Nl=2e3,Ia=64,nt=e=>{let t=typeof e=="number"?e:typeof e=="boolean"?e?1:0:Number(e);return Number.isFinite(t)?t:0},nr=e=>typeof e=="string"?e.length>0:!!e,Na={min:(...e)=>e.length?Math.min(...e):0,max:(...e)=>e.length?Math.max(...e):0,abs:(e=0)=>Math.abs(e),floor:(e=0)=>Math.floor(e),ceil:(e=0)=>Math.ceil(e),round:(e=0)=>Math.round(e),sqrt:(e=0)=>Math.sqrt(Math.max(0,e)),pow:(e=0,t=1)=>Math.pow(e,t),log:(e=1)=>e>0?Math.log(e):0,clamp:(e=0,t=0,n=1)=>Math.min(Math.max(e,t),n),lerp:(e=0,t=0,n=0)=>e+(t-e)*n,sign:(e=0)=>Math.sign(e),step:(e=0,t=0)=>t<e?0:1},Xd=["&&","||","==","!=","<=",">=","+","-","*","/","%","^","<",">","!","?",":","(",")",","];function Yd(e){let t=[],n=0;for(;n<e.length;){let s=e[n];if(s===" "||s===" "||s===`
|
|
2
|
+
`||s==="\r"){n++;continue}if(s>="0"&&s<="9"||s==="."&&/[0-9]/.test(e[n+1]??"")){let o=/^(?:\d+\.?\d*|\.\d+)(?:[eE][+-]?\d+)?/.exec(e.slice(n));if(!o)throw new Zt("bad number",e,n);t.push({t:"num",v:Number(o[0]),at:n}),n+=o[0].length;continue}if(s==="'"||s==='"'){let o=e.indexOf(s,n+1);if(o<0)throw new Zt("unclosed string",e,n);t.push({t:"str",v:e.slice(n+1,o),at:n}),n=o+1;continue}if(/[A-Za-z_$]/.test(s)){let o=/^[A-Za-z_$][A-Za-z0-9_$]*(?:\.[A-Za-z_$][A-Za-z0-9_$]*)*/.exec(e.slice(n));if(!o)throw new Zt("bad name",e,n);t.push({t:"id",v:o[0],at:n}),n+=o[0].length;continue}let r=Xd.find(o=>e.startsWith(o,n));if(!r)throw new Zt(`unexpected "${s}"`,e,n);t.push({t:"op",v:r,at:n}),n+=r.length;}return t.push({t:"end",at:e.length}),t}var $l={"||":1,"&&":2,"==":3,"!=":3,"<":4,"<=":4,">":4,">=":4,"+":5,"-":5,"*":6,"/":6,"%":6,"^":8};function Jd(e){let t=Yd(e),n=0,s=()=>t[n],r=()=>t[n++],o=G=>{let B=s();return B.t==="op"&&B.v===G},c=G=>{let B=r();if(B.t!=="op"||B.v!==G)throw new Zt(`expected "${G}"`,e,B.at)},d=G=>{if(G>Ia)throw new Zt("formula is nested too deep",e,s().at);let B=x(0,G+1);if(!o("?"))return B;r();let Q=d(G+1);c(":");let ae=d(G+1);return {k:"cond",c:B,a:Q,b:ae}},x=(G,B)=>{if(B>Ia)throw new Zt("formula is nested too deep",e,s().at);let Q=_(B+1);for(;;){let ae=s();if(ae.t!=="op")break;let q=$l[ae.v];if(q===void 0||q<G)break;r();let ue=ae.v==="^"?x(q,B+1):x(q+1,B+1);Q={k:"bin",op:ae.v,a:Q,b:ue};}return Q},_=G=>{if(G>Ia)throw new Zt("formula is nested too deep",e,s().at);return o("-")||o("!")?{k:"un",op:r().v,a:x($l["^"],G+1)}:O(G+1)},O=G=>{let B=r();if(B.t==="num")return {k:"num",v:B.v};if(B.t==="str")return {k:"str",v:B.v};if(B.t==="op"&&B.v==="("){let Q=d(G+1);return c(")"),Q}if(B.t==="id"){if(B.v==="true")return {k:"bool",v:true};if(B.v==="false")return {k:"bool",v:false};if(o("(")){if(!Object.prototype.hasOwnProperty.call(Na,B.v))throw new Zt(`unknown function "${B.v}"`,e,B.at);r();let Q=[];if(!o(")"))for(;;){if(Q.push(d(G+1)),o(",")){r();continue}break}return c(")"),{k:"call",fn:B.v,args:Q}}return {k:"var",path:B.v.split(".")}}throw new Zt(B.t==="end"?"unexpected end":"unexpected token",e,B.at)},M=d(0),$=s();if($.t!=="end")throw new Zt("unexpected token",e,$.at);return M}function Zd(e,t){let n=e;for(let s of t){if(n===null||typeof n!="object"||!Object.prototype.hasOwnProperty.call(n,s))return 0;n=n[s];}return typeof n=="number"||typeof n=="string"||typeof n=="boolean"?n:0}function Jt(e,t){switch(e.k){case "num":case "str":case "bool":return e.v;case "var":return Zd(t,e.path);case "un":return e.op==="-"?-nt(Jt(e.a,t)):!nr(Jt(e.a,t));case "cond":return nr(Jt(e.c,t))?Jt(e.a,t):Jt(e.b,t);case "call":return nt(Na[e.fn](...e.args.map(n=>nt(Jt(n,t)))));case "bin":{if(e.op==="&&")return nr(Jt(e.a,t))&&nr(Jt(e.b,t));if(e.op==="||")return nr(Jt(e.a,t))||nr(Jt(e.b,t));let n=Jt(e.a,t),s=Jt(e.b,t);switch(e.op){case "==":return typeof n=="string"||typeof s=="string"?String(n)===String(s):nt(n)===nt(s);case "!=":return typeof n=="string"||typeof s=="string"?String(n)!==String(s):nt(n)!==nt(s);case "<":return nt(n)<nt(s);case "<=":return nt(n)<=nt(s);case ">":return nt(n)>nt(s);case ">=":return nt(n)>=nt(s);case "+":return typeof n=="string"||typeof s=="string"?`${n}${s}`:nt(n)+nt(s);case "-":return nt(n)-nt(s);case "*":return nt(n)*nt(s);case "/":{let r=nt(s);return r===0?0:nt(n)/r}case "%":{let r=nt(s);return r===0?0:nt(n)%r}case "^":return nt(Math.pow(nt(n),nt(s)))}return 0}}}function Hn(e,t){switch(e.k){case "var":t.add(e.path.join("."));return;case "un":Hn(e.a,t);return;case "bin":Hn(e.a,t),Hn(e.b,t);return;case "cond":Hn(e.c,t),Hn(e.a,t),Hn(e.b,t);return;case "call":for(let n of e.args)Hn(n,t);return;default:return}}var qo=new Map;function dn(e){let t=qo.get(e);if(t)return t;if(e.length>Nl)throw new Zt("formula is too long",e,Nl);let n=Jd(e),s=new Set;Hn(n,s);let r={source:e,reads:[...s],eval:o=>Jt(n,o),num:o=>nt(Jt(n,o)),bool:o=>nr(Jt(n,o))};return qo.size>5e3&&qo.clear(),qo.set(e,r),r}function $a(e){try{return dn(e),null}catch(t){return t instanceof Error?t.message:String(t)}}function Ba(e,t,n=0){return e===void 0?n:typeof e=="number"?Number.isFinite(e)?e:n:dn(e).num(t)}var co=Rn("effect"),Qd=/^[a-z][a-z0-9_]*$/,Bl=e=>{let t=e.name;if(typeof t!="string"||!Qd.test(t))throw new Error(`effect ${e.type}: bad var name`);return t},zl=[{id:"set-var",version:1,required:["name","value"],formulas:["value"],run(e,t){let n=t.value,s=typeof n=="string"?dn(n).eval(e.scope):typeof n=="number"||typeof n=="boolean"?n:0;e.world.vars[Bl(t)]=s;}},{id:"add-var",version:1,required:["name","amount"],formulas:["amount","min","max"],run(e,t){let n=Bl(t),s=e.world.vars[n],r=(typeof s=="number"?s:0)+e.num(t.amount);t.min!==void 0&&(r=Math.max(r,e.num(t.min))),t.max!==void 0&&(r=Math.min(r,e.num(t.max))),e.world.vars[n]=r;}},{id:"emit",version:1,required:["topic"],run(e,t){let n=t.topic;if(typeof n!="string"||n.length===0)throw new Error("effect emit: topic required");let s=t.payload,r={};if(s&&typeof s=="object")for(let[o,c]of Object.entries(s))r[o]=typeof c=="string"?dn(c).eval(e.scope):c;e.world.emit(n,r);}}];function po(e){for(let t of zl)e.has(co,t.id)||e.define(co,t);}function jo(e,t,n,s){let r=new Set;e.forEach((o,c)=>{let d=`${n}.${c}`;if(!o||typeof o!="object"){s.push({level:"error",path:d,code:"RULE_SHAPE",message:"a rule must be an object"});return}if(typeof o.id!="string"||o.id.length===0?s.push({level:"error",path:`${d}.id`,code:"RULE_ID",message:"a rule needs an id"}):r.has(o.id)?s.push({level:"error",path:`${d}.id`,code:"RULE_DUPLICATE",message:`rule "${o.id}" is defined twice`}):r.add(o.id),(typeof o.on!="string"||o.on.length===0)&&s.push({level:"error",path:`${d}.on`,code:"RULE_TRIGGER",message:"a rule needs an event topic in `on`"}),o.when!==void 0)try{dn(String(o.when));}catch(x){s.push({level:"error",path:`${d}.when`,code:"RULE_FORMULA",message:x.message});}if(!Array.isArray(o.do)||o.do.length===0){s.push({level:"error",path:`${d}.do`,code:"RULE_EFFECTS",message:"a rule needs at least one effect"});return}o.do.forEach((x,_)=>{let O=`${d}.do.${_}`,M=typeof x?.type=="string"?t.get(co,x.type):void 0;if(!M){s.push({level:"error",path:`${O}.type`,code:"EFFECT_UNKNOWN",message:`unknown effect "${String(x?.type)}"`});return}for(let $ of M.required??[])x[$]===void 0&&s.push({level:"error",path:`${O}.${$}`,code:"EFFECT_PARAM",message:`effect "${M.id}" needs "${$}"`});for(let $ of M.formulas??[]){let G=x[$];if(typeof G=="string")try{dn(G);}catch(B){s.push({level:"error",path:`${O}.${$}`,code:"RULE_FORMULA",message:B.message});}}});});}function za(e,t,n,s={}){let r=t.map(d=>({def:d,...d.when!==void 0?{when:dn(d.when)}:{},effects:d.do.map(x=>({spec:x,def:n.require(co,x.type)})),hits:0,runs:0,lastRunAt:Number.NEGATIVE_INFINITY})),o=new Map;for(let d of r){let x=o.get(d.def.on)??[];x.push(d),o.set(d.def.on,x);}let c=[...o.entries()].map(([d,x])=>e.on(d,_=>{for(let O of x){if(O.def.once&&O.runs>0)continue;let M={event:_,vars:e.vars,tick:e.tick,time:e.time};if(O.when&&!O.when.bool(M)||(O.hits++,O.def.every!==void 0&&O.def.every>1&&O.hits%O.def.every!==0)||O.def.cooldown!==void 0&&e.time-O.lastRunAt<O.def.cooldown)continue;O.runs++,O.lastRunAt=e.time;let $={world:e,rule:O.def,event:_,scope:M,num:(G,B=0)=>typeof G=="number"||typeof G=="string"?Ba(G,M,B):B};for(let G of O.effects)try{G.def.run($,G.spec);}catch(B){s.onError?.(O.def,B);}}}));return ()=>c.forEach(d=>d())}var Wa=e=>e.some(t=>t.level==="error");function Xo(e,t,n,s){let r={};for(let[o,c]of Object.entries(e))r[o]=c.default;if(!t)return r;for(let[o,c]of Object.entries(t)){let d=e[o],x=`${n}.${o}`;if(!d){s.push({level:"warning",path:x,code:"PARAM_UNKNOWN",message:`unknown parameter "${o}"`});continue}switch(d.type){case "number":{if(typeof c!="number"||!Number.isFinite(c)){s.push({level:"warning",path:x,code:"PARAM_TYPE",message:"expected a number, default used"});break}let _=d.integer?Math.round(c):c;d.min!==void 0&&_<d.min&&(_=d.min),d.max!==void 0&&_>d.max&&(_=d.max),_!==c&&s.push({level:"warning",path:x,code:"PARAM_CLAMPED",message:`${c} \u2192 ${_}`}),r[o]=_;break}case "enum":typeof c=="string"&&d.values.includes(c)?r[o]=c:s.push({level:"warning",path:x,code:"PARAM_ENUM",message:`not one of ${d.values.join(", ")}, default used`});break;case "boolean":typeof c=="boolean"?r[o]=c:s.push({level:"warning",path:x,code:"PARAM_TYPE",message:"expected true/false, default used"});break;case "string":if(typeof c=="string"){let _=d.maxLength??500;r[o]=c.length>_?c.slice(0,_):c,c.length>_&&s.push({level:"warning",path:x,code:"PARAM_CLAMPED",message:`cut to ${_} characters`});}else s.push({level:"warning",path:x,code:"PARAM_TYPE",message:"expected text, default used"});break}}return r}var Yo=["phaser","three","dom"],Vn=Rn("block"),Gn=Rn("preset");var Wl=["store","premium","character","inventory","lootboxes","boosts","leaderboard","rewards","quests","collections","craft","marketplace","deals","events","coop-events","season","pvp","mailbox","reward-window","idle"],ep=/^system:([a-z][a-z0-9-]*)$/,tp=new Set(["currency","item"]);function Ha(e,t,n,s){let r=new Set(e.map(x=>x.id)),o=new Set(t.map(x=>x.id)),c=new Map,d=new Map;n.forEach((x,_)=>{let O=`flows.${_}`;o.has(x.resource)||s.push({level:"error",path:`${O}.resource`,code:"FLOW_RESOURCE_UNKNOWN",message:`no resource "${x.resource}"`});let M=ep.exec(x.by);M?Wl.includes(M[1])||s.push({level:"warning",path:`${O}.by`,code:"FLOW_SYSTEM_UNKNOWN",message:`"${x.by}" is not a platform system`}):r.has(x.by)||s.push({level:"error",path:`${O}.by`,code:"FLOW_BY_UNKNOWN",message:`"${x.by}" is neither a mode of the spec nor "system:<id>"`}),x.kind!=="source"&&x.kind!=="sink"&&s.push({level:"error",path:`${O}.kind`,code:"FLOW_KIND",message:'kind is "source" or "sink"'});let $=x.kind==="source"?c:d;$.set(x.resource,($.get(x.resource)??0)+1);}),t.forEach((x,_)=>{let O=`resources.${_}`,M=c.get(x.id)??0,$=d.get(x.id)??0;M===0&&s.push({level:"error",path:O,code:"RESOURCE_NO_SOURCE",message:`nothing produces "${x.id}"`}),tp.has(x.kind)&&$===0&&s.push({level:"error",path:O,code:"RESOURCE_NO_SINK",message:`nothing spends "${x.id}"`});});}var kr=Rn("asset-pack"),uo=Rn("link"),np=(e,t="en")=>e.names[t]??e.names.en??e.id;function rp(e,t,n){let s=[],r=n.get(uo,t);if(!r)return s.push({level:"error",path:"link",code:"LINK_UNKNOWN",message:`no link "${t}"`}),{spec:e,systems:[],issues:s};let o=e.modes.find(d=>d.role==="core")??e.modes[0],c=o?n.get(Gn,o.preset)?.genre:void 0;return !c||!r.core.includes(c)?(s.push({level:"error",path:"link",code:"LINK_GENRE",message:`link "${t}" fits ${r.core.join(", ")}, not "${c??"?"}"`}),{spec:e,systems:[],issues:s}):{spec:r.apply(e),systems:r.systems,issues:s}}var ho=1;function pn(e,t,n){let s=e?.content[t];if(!s||s.length===0)return n;let r=n.filter(o=>!s.includes(o));return r.length>0?r:n}var Vl=Object.freeze({window:"round",adMultiplier:3,vipMultiplier:5}),op={};function Gl(e,t){let n={...e},s=n.v===void 0?1:n.v;if(typeof s!="number"||!Number.isInteger(s)||s<1)return t.push({level:"error",path:"v",code:"SPEC_VERSION",message:"v must be an integer \u2265 1"}),null;if(s>ho)return t.push({level:"error",path:"v",code:"SPEC_TOO_NEW",message:`spec v${s} is newer than this kit (v${ho})`}),null;for(;s<ho;){let r=op[s];if(!r)return t.push({level:"error",path:"v",code:"SPEC_NO_MIGRATION",message:`no migration from v${s}`}),null;n=r(n),s++;}return n.v=ho,n}var Va=/^[a-z][a-z0-9_]*$/,sp=/^#[0-9a-fA-F]{6}(?:[0-9a-fA-F]{2})?$/,ap=/^[a-z]{2}(?:-[A-Z]{2})?$/,ip=/^[a-z][a-z0-9_.-]*$/,Hl=["none","async","coop","pvp"],ut=e=>e!==null&&typeof e=="object"&&!Array.isArray(e),fo=e=>Array.isArray(e)?e:[];function lp(e,t){let n=[];if(!ut(e))return n.push({level:"error",path:"",code:"SPEC_SHAPE",message:"a spec must be an object"}),{ok:false,issues:n};let s=Gl(e,n);if(!s)return {ok:false,issues:n};let r=s;Yo.includes(r.engine)||n.push({level:"error",path:"engine",code:"SPEC_ENGINE",message:`engine is one of ${Yo.join(", ")}`});let o=fo(r.modes);o.length===0&&n.push({level:"error",path:"modes",code:"SPEC_NO_MODES",message:"a game needs at least one mode"});let c=new Set,d=[];o.forEach((q,ue)=>{let fe=`modes.${ue}`;if(!ut(q)){n.push({level:"error",path:fe,code:"MODE_SHAPE",message:"a mode must be an object"});return}typeof q.id!="string"||!Va.test(q.id)?n.push({level:"error",path:`${fe}.id`,code:"MODE_ID",message:"mode id: snake_case, starts with a letter"}):c.has(q.id)?n.push({level:"error",path:`${fe}.id`,code:"MODE_DUPLICATE",message:`mode "${q.id}" is defined twice`}):c.add(q.id);let ie=typeof q.preset=="string"?t.get(Gn,q.preset):void 0;if(!ie){n.push({level:"error",path:`${fe}.preset`,code:"MODE_PRESET_UNKNOWN",message:`no preset "${String(q.preset)}"`});return}ie.engine!==r.engine&&n.push({level:"error",path:`${fe}.preset`,code:"MODE_ENGINE",message:`preset "${ie.id}" runs on ${ie.engine}, the spec on ${String(r.engine)}`}),q.role!==void 0&&!["core","meta","embedded"].includes(q.role)&&n.push({level:"error",path:`${fe}.role`,code:"MODE_ROLE",message:"role is core, meta or embedded"});let ve=Xo(ie.params??{},ut(q.params)?q.params:void 0,`${fe}.params`,n),se={},Me=new Set(ie.blocks);for(let oe of ie.blocks){let ce=t.get(Vn,oe);if(!ce){n.push({level:"error",path:`${fe}.preset`,code:"PRESET_BLOCK_UNKNOWN",message:`preset "${ie.id}" uses unknown block "${oe}"`});continue}ce.engines&&!ce.engines.includes(ie.engine)&&n.push({level:"error",path:`${fe}.preset`,code:"BLOCK_ENGINE",message:`block "${oe}" is not drawn by ${ie.engine}`});for(let ee of ce.requires??[])Me.has(ee)||n.push({level:"error",path:`${fe}.preset`,code:"BLOCK_REQUIRES",message:`block "${oe}" needs "${ee}" in the same preset`});let Ae={};for(let[ee,xe]of Object.entries(ie.blockParams?.[oe]??{})){let je=ce.params?.[ee];if(typeof xe=="string"&&(je?.type==="number"||je?.type==="boolean"))try{let we=dn(xe).eval({params:ve});Ae[ee]=je.type==="number"?Number(we):!!we;}catch(we){n.push({level:"error",path:`${fe}.preset`,code:"PRESET_FORMULA",message:`preset "${ie.id}", ${oe}.${ee}: ${we.message}`});}else Ae[ee]=xe;}let Se={...Ae,...ut(q.blockParams)&&ut(q.blockParams[oe])?q.blockParams[oe]:{}};se[oe]=Xo(ce.params??{},Se,`${fe}.blockParams.${oe}`,n);}if(ut(q.blockParams))for(let oe of Object.keys(q.blockParams))Me.has(oe)||n.push({level:"warning",path:`${fe}.blockParams.${oe}`,code:"BLOCK_NOT_IN_PRESET",message:`preset "${ie.id}" has no block "${oe}"`});let De=[...ie.rules??[],...fo(q.rules)];jo(De,t,`${fe}.rules`,n);let ge={};if(q.content!==void 0)if(!ut(q.content))n.push({level:"warning",path:`${fe}.content`,code:"CONTENT_SHAPE",message:"content is { kind: { without: [ids] } }; ignored"});else for(let[oe,ce]of Object.entries(q.content)){let Ae=ut(ce)?ce.without:void 0;Array.isArray(Ae)&&Ae.every(Se=>typeof Se=="string")?ge[oe]=[...Ae]:n.push({level:"warning",path:`${fe}.content.${oe}`,code:"CONTENT_SHAPE",message:"expected { without: [ids] }; ignored"});}d.push({id:q.id,role:q.role??(ue===0?"core":"meta"),preset:ie,params:ve,blockParams:se,rules:De,content:ge});}),o.length>0&&!o.some((q,ue)=>ut(q)?(q.role??(ue===0?"core":"meta"))==="core":false)&&n.push({level:"error",path:"modes",code:"SPEC_NO_CORE",message:"one mode must be the core (what the player plays)"});let x=fo(r.resources),_=new Set;x.forEach((q,ue)=>{let fe=`resources.${ue}`;if(!ut(q)||typeof q.id!="string"||!Va.test(q.id)){n.push({level:"error",path:fe,code:"RESOURCE_ID",message:"resource id: snake_case, starts with a letter"});return}_.has(q.id)&&n.push({level:"error",path:`${fe}.id`,code:"RESOURCE_DUPLICATE",message:`resource "${q.id}" is defined twice`}),_.add(q.id),["currency","item","score","local"].includes(q.kind)||n.push({level:"error",path:`${fe}.kind`,code:"RESOURCE_KIND",message:"kind is currency, item, score or local"}),(q.kind==="currency"||q.kind==="item")&&q.ref!==void 0&&(typeof q.ref!="string"||q.ref.length===0)&&n.push({level:"error",path:`${fe}.ref`,code:"RESOURCE_REF",message:"ref is the engine currency or item id"});});let O=fo(r.flows);O.forEach((q,ue)=>{if(typeof q?.amount=="string"){let fe=$a(q.amount);fe&&n.push({level:"error",path:`flows.${ue}.amount`,code:"FLOW_FORMULA",message:fe});}}),Ha(o.filter(ut),x.filter(q=>ut(q)&&typeof q.id=="string"),O.filter(ut),n);let M=fo(r.rules);jo(M,t,"rules",n);let $={};if(r.vars!==void 0)if(!ut(r.vars))n.push({level:"error",path:"vars",code:"VARS_SHAPE",message:"vars must be an object"});else for(let[q,ue]of Object.entries(r.vars))Va.test(q)?typeof ue=="number"||typeof ue=="string"||typeof ue=="boolean"?$[q]=ue:n.push({level:"error",path:`vars.${q}`,code:"VAR_TYPE",message:"a var is a number, text or true/false"}):n.push({level:"error",path:`vars.${q}`,code:"VAR_NAME",message:"var name: snake_case"});let G=typeof r.assets=="string"&&r.assets?t.get(kr,r.assets):void 0;if(r.assets!==void 0&&!G&&n.push({level:"warning",path:"assets",code:"ASSETS_UNKNOWN",message:`no asset pack "${String(r.assets)}"; the default look is used`}),r.palette!==void 0)if(!ut(r.palette))n.push({level:"error",path:"palette",code:"PALETTE_SHAPE",message:"palette must be an object"});else for(let[q,ue]of Object.entries(r.palette))(typeof ue!="string"||!sp.test(ue))&&n.push({level:"warning",path:`palette.${q}`,code:"PALETTE_COLOR",message:"a colour is #rrggbb or #rrggbbaa; ignored"});if(r.texts!==void 0)if(!ut(r.texts))n.push({level:"error",path:"texts",code:"TEXTS_SHAPE",message:"texts must be an object"});else for(let[q,ue]of Object.entries(r.texts)){if(ip.test(q)||n.push({level:"error",path:`texts.${q}`,code:"TEXT_KEY",message:"text key: lower case, digits, _ . -"}),!ut(ue)){n.push({level:"error",path:`texts.${q}`,code:"TEXT_SHAPE",message:"a text is { lang: text }"});continue}for(let[fe,ie]of Object.entries(ue))(!ap.test(fe)||typeof ie!="string")&&n.push({level:"error",path:`texts.${q}.${fe}`,code:"TEXT_LANG",message:"language code like en or pt-BR, value text"});ue.en===void 0&&n.push({level:"warning",path:`texts.${q}`,code:"TEXT_NO_EN",message:"no English text: other languages fall back to it"});}let B={...Vl};if(r.rewards!==void 0)if(!ut(r.rewards))n.push({level:"error",path:"rewards",code:"REWARDS_SHAPE",message:"rewards must be an object"});else {let q=(fe,ie,ve)=>{let se=r.rewards[fe];if(se===void 0)return;if(typeof se!="number"||!Number.isFinite(se)){n.push({level:"warning",path:`rewards.${fe}`,code:"PARAM_TYPE",message:"expected a number, default used"});return}let Me=Math.min(Math.max(se,ie),ve);Me!==se&&n.push({level:"warning",path:`rewards.${fe}`,code:"PARAM_CLAMPED",message:`${se} \u2192 ${Me}`}),B[fe]=Me;};q("adMultiplier",1,10),q("vipMultiplier",1,20);let ue=r.rewards.window;ue!==void 0&&(typeof ue=="string"&&/^[A-Za-z0-9_-]{1,64}$/.test(ue)?B.window=ue:n.push({level:"warning",path:"rewards.window",code:"PARAM_TYPE",message:"expected a window id, default used"}));}let Q=r.multiplayer??"none";Hl.includes(Q)||n.push({level:"error",path:"multiplayer",code:"SPEC_MULTIPLAYER",message:`multiplayer is one of ${Hl.join(", ")}`});let ae=!Wa(n);return {ok:ae,issues:n,spec:r,...ae?{resolved:{spec:r,engine:r.engine,seed:typeof r.seed=="string"&&r.seed.length>0?r.seed:"game",modes:d,resources:x,flows:O,rules:M,vars:$,rewards:B,multiplayer:Q,palette:i({...G?.palette,...ut(r.palette)?r.palette:{}}),texts:dp(G?.texts,ut(r.texts)?r.texts:void 0),look:{style:G?G.style??G.id:m.style,cast:cp({...l,...G?.cast},r.cast)}}}:{}}}function cp(e,t){let n={...e};if(!ut(t))return n;for(let[s,r]of Object.entries(t)){if(!ut(r))continue;let o={...n[s]};typeof r.preset=="string"&&(o.preset=r.preset),Array.isArray(r.races)&&r.races.every(c=>typeof c=="string")&&r.races.length>0&&(o.races=r.races),ut(r.parts)&&(o.parts={...o.parts,...r.parts}),ut(r.colors)&&(o.colors={...o.colors,...r.colors}),n[s]=o;}return n}function dp(e,t){let n={};for(let s of [e,t])for(let[r,o]of Object.entries(s??{}))if(o&&typeof o=="object")for(let[c,d]of Object.entries(o))typeof d=="string"&&((n[r]??={})[c]=d);return n}function pp(){let e=Uo();return po(e),e}function up(e,t,n,s={}){let r=e.modes.find(d=>d.id===t);if(!r)throw new Error(`game: no mode "${t}"`);let o=new c({seed:`${e.seed}/${r.id}${s.salt!==void 0?`/${s.salt}`:""}`,vars:e.vars});for(let d of r.preset.blocks)n.require(Vn,d).setup?.({world:o,spec:e,mode:r,params:r.blockParams[d]??{},registry:n});let c$1=za(o,[...r.rules,...e.rules],n,{...s.onRuleError?{onError:s.onRuleError}:{}});return o.emit("mode-started",{mode:r.id}),o.flushEvents(),{world:o,mode:r,stop:c$1}}var Ie=e=>({w:Number(e.vars.view_w??720),h:Number(e.vars.view_h??1280)}),Ze=e=>e.vars.state==="playing",Kn=e=>e.vars.started_tick===e.tick,qe=(e,t,n)=>{let s=Number(e.vars[t]??0)+n;return e.vars[t]=s,s},nn=(e,t)=>Number(e[t]);function Et(e$1,t,n,s,r){let o=e$1.create();return e$1.set(o,e,{x:t,y:n}),e$1.set(o,f,s),r&&e$1.set(o,r.type,r.data),o}var rt=(e,t)=>{for(let n of e.query(t))e.destroy(n);};function _r(e){let t=new Set,n={down:false,x:0,y:0};return e.on(j,s=>{let r=s;r.type==="key"?t.add(r.key):r.type==="key-up"?t.delete(r.key):r.type==="press"||r.type==="move"?(n.down=true,n.x=r.x,n.y=r.y):r.type==="release"&&(n.down=false);}),{keys:t,pointer:n,axis(){return {x:(t.has("right")?1:0)-(t.has("left")?1:0),y:(t.has("down")?1:0)-(t.has("up")?1:0)}}}}function Fn(e,t,n,s){let r=e.h*(s.bottom-s.top),o=Math.floor(Math.min(e.w*(s.widthShare??.94)/t,r/n)),c=(e.w-o*t)/2,d=e.h*s.top+(r-o*n)/2;return {cols:t,rows:n,cell:o,left:c,top:d}}var Qe=(e,t,n)=>({x:e.left+e.cell*(t+.5),y:e.top+e.cell*(n+.5)});function Tn(e,t,n){let s=Math.floor((t-e.left)/e.cell),r=Math.floor((n-e.top)/e.cell);return s>=0&&s<e.cols&&r>=0&&r<e.rows?{col:s,row:r}:null}var Ul=["piece1","piece2","piece3","piece4","piece5","piece6"];b("kit.status");var Zo=e=>{let t=Math.max(0,Math.ceil(e));return `${Math.floor(t/60)}:${String(t%60).padStart(2,"0")}`},V=(e,t)=>e.emit(n,t),Mr=b("kit.backdrop");function Tt(e,t,n,s={}){for(let O of e.query(Mr))e.destroy(O);let r=Ie(e),o=(O,M,$,G)=>Et(e,M,$,G,{type:Mr,data:{speed:O}});if(t==="top"){let O=s.pan?1:0;o(O,r.w/2,r.h/2,{shape:"tile",art:"floor",w:r.w,h:r.h,unit:Math.min(r.w,r.h)*.24,depth:-100});let M=e.rng.stream("backdrop"),$=Math.round(r.w*r.h/52e3),G=Math.min(r.w,r.h);for(let B=0;B<$;B++){let Q=G*M.range(.06,.1);o(O,M.range(0,r.w),M.range(0,r.h),{shape:"sprite",art:`decor${M.int(1,4)}`,w:Q,h:Q,depth:-95});}return}let c=n??r.h*.62;o(0,r.w/2,r.h/2,{shape:"sprite",art:"sky",w:r.w,h:r.h,depth:-100});let d=Math.min(r.w,r.h)*.34;o(.02,r.w*.74,c*.3,{shape:"sprite",art:"sun",w:d,h:d,depth:-99});let x=Math.min(r.h*.32,r.w*.55);o(.12,r.w/2,c-x/2,{shape:"tile",art:"far",w:r.w,h:x,depth:-90});let _=x*.62;o(.4,r.w/2,c-_/2+2,{shape:"tile",art:"near",w:r.w,h:_,depth:-80}),t==="board"?o(0,r.w/2,(r.h+c)/2,{shape:"tile",art:"ground",w:r.w,h:r.h-c+4,unit:x*.7,depth:-79}):o(0,r.w/2,(r.h+c)/2,{shape:"rect",w:r.w,h:r.h-c,color:"#140f0c",alpha:.92,depth:-79});}function mo(e,t){for(let n of e.query(Mr)){let s=e.need(n,Mr).speed;if(s<=0)continue;let r=e.need(n,f);r.shape==="tile"&&(r.scrollX=(r.scrollX??0)+t*s);}}function ql(e$1,t,n){let s=Ie(e$1),r=Math.min(s.w,s.h)*.1;for(let o of e$1.query(Mr)){if(e$1.need(o,Mr).speed<=0)continue;let c=e$1.need(o,f);if(c.shape==="tile"){c.scrollX=(c.scrollX??0)+t,c.scrollY=(c.scrollY??0)+n;continue}let d=e$1.need(o,e);d.x-=t,d.y-=n,d.x<-r?d.x+=s.w+2*r:d.x>s.w+r&&(d.x-=s.w+2*r),d.y<-r?d.y+=s.h+2*r:d.y>s.h+r&&(d.y-=s.h+2*r);}}function et(e,t,n){let s=e.get(t,f);s?.shape==="actor"&&(s.pose=n);}function He(e,t,n){let s=e.get(t,f);s?.shape==="actor"&&(s.act=n,s.actN=(s.actN??0)+1);}var Er=b("kit.fading"),Kl=new WeakSet;function rr(e,t,n){e.set(t,Er,{left:n,total:n}),!Kl.has(e)&&(Kl.add(e),e.addSystem({id:"kit.fading",order:90,run(s,r){for(let o of s.query(Er)){let c=s.need(o,Er);c.left-=r;let d=s.get(o,f);d&&(d.alpha=Math.max(0,Math.min(1,c.left/c.total*2))),c.left<=0&&s.destroy(o);}}}));}var Vt=(e,t,n=5)=>n+t/Math.max(1,Ie(e).h),Sr=b("kit.hint"),Fl=new WeakSet,Jo=(e,t,n)=>({x:e+n*.11,y:t+n*.42});function ft(e$1,t,n,s=n,r){Ot(e$1);let o=r??Math.min(Ie(e$1).w,Ie(e$1).h)*.13,c={kind:t,ax:n.x,ay:n.y,bx:s.x,by:s.y,size:o,t:0},d=Jo(n.x,n.y,o);Et(e$1,n.x,n.y,{shape:"circle",r:o*.22,color:"#ffffff",alpha:0,depth:89},{type:Sr,data:{...c,part:"ring"}}),Et(e$1,d.x,d.y,{shape:"sprite",art:"hand",w:o,h:o,alpha:0,depth:90},{type:Sr,data:{...c,part:"hand"}}),!Fl.has(e$1)&&(Fl.add(e$1),e$1.addSystem({id:"kit.hints",order:95,run(x,_){for(let O of x.query(Sr)){let M=x.need(O,Sr);M.t+=_;let $=x.need(O,e),G=x.need(O,f);if(M.kind==="tap"){let B=M.t%1.2/1.2,Q=B>.35&&B<.55;if(M.part==="hand"){let ae=Jo(M.ax,M.ay+(Q?M.size*.06:0),M.size);$.x=ae.x,$.y=ae.y,$.scale=Q?.9:1,G.alpha=Math.min(1,M.t*4);}else {let ae=B<.4?0:(B-.4)/.6;$.scale=1+ae*2.2,G.alpha=B<.4?0:.55*(1-ae);}}else if(M.kind==="swipe"){let B=M.t%1.6/1.6,Q=B<.15?0:B>.75?1:(B-.15)/.6,ae=Q*Q*(3-2*Q),q=M.ax+(M.bx-M.ax)*ae,ue=M.ay+(M.by-M.ay)*ae;if(M.part==="hand"){let fe=Jo(q,ue,M.size);$.x=fe.x,$.y=fe.y,G.alpha=B<.1?B*10:B>.85?Math.max(0,(1-B)/.15):1;}else $.x=q,$.y=ue,G.alpha=B>.15&&B<.8?.35:0;}else {let B=M.t*3,Q=M.ax+Math.cos(B)*M.bx,ae=M.ay+Math.sin(B)*M.bx;if(M.part==="hand"){let q=Jo(Q,ae,M.size);$.x=q.x,$.y=q.y,G.alpha=Math.min(1,M.t*3);}else $.x=Q,$.y=ae,G.alpha=.3;}}}}));}function Ot(e){for(let t of e.query(Sr))e.destroy(t);}var un=e=>e.query(Sr).length>0,ht=(e,t)=>e.vars[`learned:${t}`]===true;function vt(e,t){ht(e,t)||(e.vars[`learned:${t}`]=true,Ot(e));}var Rr=b("round.start"),$t="round-started",Bt="round-over",zt="round-ended",Ga="start-round",Wt="show-start",Gt="revive-offer",Kt="revive",Ft="give-up",Qo={id:"round",version:1,setup({world:e$1}){e$1.vars.state="ready",e$1.vars.score=0,e$1.vars.coins=0,e$1.vars.best=typeof e$1.vars.best=="number"?e$1.vars.best:0,e$1.vars.round=0;let t=s=>{for(let d of s.query(Rr))s.destroy(d);if(s.vars.state!=="ready")return;let r=Ie(s),o=Math.min(r.w,r.h)*.26,c={x:r.w/2,y:r.h*.55};Et(s,r.w/2,r.h/2,{shape:"rect",w:r.w,h:r.h,color:"#05040a",alpha:.4,depth:84},{type:Rr,data:{t:-1}}),Et(s,c.x,c.y,{shape:"sprite",art:"play",w:o,h:o,color:"accent",depth:85},{type:Rr,data:{t:0}}),ft(s,"tap",{x:c.x+o*.12,y:c.y+o*.1});},n=()=>{for(let s of e$1.query(Rr))e$1.destroy(s);Ot(e$1),e$1.vars.state="playing",e$1.vars.score=0,e$1.vars.coins=0,e$1.vars.round=Number(e$1.vars.round??0)+1,e$1.vars.started_tick=e$1.tick,e$1.emit($t,{round:e$1.vars.round});};e$1.on(j,s=>{let r=s;e$1.vars.state==="ready"&&(r.type==="tap"||r.type==="key"&&r.key==="action")&&n();}),e$1.on(Ga,()=>{e$1.vars.state!=="playing"&&n();}),e$1.on(Wt,()=>{e$1.vars.state==="ended"&&(e$1.vars.state="ready",t(e$1));}),e$1.on(k,()=>t(e$1)),e$1.addSystem({id:"round.start",order:96,run(s,r){for(let o of s.query(Rr)){let c=s.need(o,Rr);c.t<0||(c.t+=r,s.need(o,e).scale=1+.06*Math.sin(c.t*5));}}}),t(e$1),e$1.on(Bt,s=>{if(e$1.vars.state!=="playing")return;e$1.vars.state="ended",Ot(e$1);let r=Number(e$1.vars.score??0),o=Math.max(Number(e$1.vars.best??0),r);e$1.vars.best=o,e$1.emit(zt,{score:r,coins:Number(e$1.vars.coins??0),best:o,reason:typeof s.reason=="string"?s.reason:"over",...s.stats&&typeof s.stats=="object"?{stats:s.stats}:{}});});}};var es=["wall","barrier","pit","mover","train","rock"];var go=["magnet","shield","double","dash","flight"],fn={magnet:{art:"magnet",color:"danger",seconds:6,var:"meta:magnet_t",weight:3},shield:{art:"shield",color:"muted",seconds:8,var:"meta:shield_t",weight:2.5},double:{art:"coin2x",color:"coin",seconds:8,var:"meta:double_t",weight:2.5},dash:{art:"boot",color:"accent",seconds:2.5,var:"meta:dash_t",weight:1.5},flight:{art:"wing",color:"secondary",seconds:4,var:"meta:flight_t",weight:1}},yo=20,jl={wall:1,barrier:2,pit:3,mover:4,train:5,rock:6};function Tr(e,t=.5){let n=Math.max(1,Math.min(yo,Math.floor(e))),s=(n-1)/(yo-1),r=es.filter(d=>jl[d]<=n),o=es.find(d=>jl[d]===n)??null,c=330+t*120+s*220;return {level:n,length:Math.round(16e3+(n-1)*3e3),speed:c,topSpeed:c*(1.25+s*.1),density:Math.min(.72,.3+t*.12+s*.3),kinds:r,fresh:o,coinStar:.6,firstClearGold:60+(n-1)*25}}var Or=e=>Math.floor(e/30),Dr=[{id:"hero",cast:"hero",gems:0,perk:"none"},{id:"hero2",cast:"hero2",gems:150,perk:"heart"},{id:"hero3",cast:"hero3",gems:300,perk:"power"}],Ka="kit-runner",Fa=[{id:"MagnetTime",var:"meta:magnet_t",art:"magnet",color:"danger",perLevel:.6,unit:"s",maxLevel:15,price:20,growth:.12},{id:"ShieldTime",var:"meta:shield_t",art:"shield",color:"muted",perLevel:.8,unit:"s",maxLevel:15,price:25,growth:.12},{id:"DoubleTime",var:"meta:double_t",art:"coin2x",color:"coin",perLevel:.8,unit:"s",maxLevel:15,price:25,growth:.12},{id:"DashTime",var:"meta:dash_t",art:"boot",color:"accent",perLevel:.3,unit:"s",maxLevel:15,price:30,growth:.12},{id:"FlightTime",var:"meta:flight_t",art:"wing",color:"secondary",perLevel:.4,unit:"s",maxLevel:15,price:35,growth:.12},{id:"Luck",var:"meta:luck",art:"clover",color:"accent",perLevel:5,unit:"%",maxLevel:20,price:30,growth:.1},{id:"HeadStart",var:"meta:head_start",art:"lightning",color:"primary",perLevel:.4,unit:"s",maxLevel:10,price:50,growth:.15},{id:"Greed",var:"meta:greed",art:"coin",color:"coin",perLevel:2,unit:"%",maxLevel:25,price:40,growth:.1}],Xl={game:"runner",character:Ka,stats:Fa,heroes:Dr,levels:yo,firstClearGold:e=>Tr(e).firstClearGold,stars:3};var xt=b("runner.item"),On=b("runner.player"),ts=b("runner.stripe"),Yl=b("runner.hud"),At=(e,t)=>{let n=Number(e.vars.view_w??720),s=Number(e.vars.view_h??1280),r=Math.min(s*.11,n*.2,s*.5/t),o=s*.6-r*t/2;return {viewW:n,viewH:s,top:o,laneH:r,playerX:Math.min(n*.24,s*.3)}},Ar=(e,t)=>e.top+e.laneH*(t+.72),bo=(e,t)=>{let n=Number(e.vars[t]??0);return Number.isFinite(n)?n:0},Mt={wall:1.3,barrier:.5,mover:1,train:.95,rock:1.05,jump:1.25,flight:1.9},ns={id:"lane-runner",version:2,engines:["phaser"],requires:["round"],params:{lanes:{type:"number",default:3,min:2,max:5,integer:true},difficulty:{type:"number",default:.5,min:0,max:1},coinRate:{type:"number",default:.7,min:0,max:1},powerRate:{type:"number",default:.22,min:0,max:1},lives:{type:"number",default:3,min:1,max:9,integer:true},coinScore:{type:"number",default:10,min:0,max:1e3,integer:true},graceTime:{type:"number",default:1.2,min:0,max:5},jumpTime:{type:"number",default:.62,min:.3,max:1.5},lengthScale:{type:"number",default:1,min:.05,max:5}},setup({world:e$1,params:t,mode:n}){let s=f=>nn(t,f),r=s("lanes"),o=e$1.rng.stream("lane-runner"),c=null,d=f=>({...f,kinds:[...pn(n,"obstacles",f.kinds)]}),x=pn(n,"powers",go),_=d(Tr(1,s("difficulty"))),O=_.length,M=0,$=0,G=0,B=false,Q=false,ae=false,q=0,ue=0,fe=0,ie=0,ve=0,se=0,Me=0,De=3,ge=0,oe=false,ce=new Map,Ae=new Map,Se=()=>Dr.find(f=>f.id===e$1.vars["meta:hero"])??Dr[0],ee=f=>(fn[f].seconds+bo(e$1,fn[f].var))*(Se().perk==="power"?1.25:1),xe=()=>e$1.vars.reviving===true,je=()=>{for(let y of e$1.query(ts))e$1.destroy(y);let f$1=At(e$1,r);Tt(e$1,"side",f$1.top+2);for(let y=0;y<r;y++){let l=e$1.create();e$1.set(l,ts,{index:y}),e$1.set(l,e,{x:f$1.viewW/2,y:f$1.top+f$1.laneH*(y+.5)}),e$1.set(l,f,{shape:"tile",art:"road",w:f$1.viewW,h:f$1.laneH,unit:f$1.laneH*1.28,depth:-20+y*.1});}let m=f$1.viewH-(f$1.top+f$1.laneH*r),p=e$1.create();e$1.set(p,ts,{index:-1}),e$1.set(p,e,{x:f$1.viewW/2,y:f$1.viewH-m/2+1}),e$1.set(p,f,{shape:"tile",art:"ground",w:f$1.viewW,h:m+2,unit:f$1.laneH*1.2,depth:-21});},we=(f,m,p)=>Ar(f,m.lane)-m.alt-p/2,te=(f,m,p,y,l)=>{let u=f.laneH,b=9+p;switch(m){case "wall":return {v:{shape:"sprite",art:"obstacle",w:y,h:u*Mt.wall,depth:b},h:u*Mt.wall};case "barrier":return {v:{shape:"sprite",art:"hurdle",w:y,h:u*Mt.barrier,depth:b},h:u*Mt.barrier};case "pit":return {v:{shape:"sprite",art:"pit",w:y,h:u*.42,depth:-19+p*.1+.05},h:-u*.42};case "mover":return {v:{shape:"actor",cast:"foe",h:u*1.5,pose:"run",facing:-1,depth:b},h:u*1.5};case "train":return {v:{shape:"sprite",art:"wagon",w:y,h:u*Mt.train,depth:b},h:u*Mt.train};case "ramp":return {v:{shape:"sprite",art:"ramp",w:y,h:u*Mt.train,depth:b},h:u*Mt.train};case "rock":return {v:{shape:"sprite",art:"shadow",w:y,h:u*.3,alpha:.5,depth:-19+p*.1+.06},h:-u*.3};case "coin":return {v:{shape:"sprite",art:"coin",w:y,h:y,depth:b+.2},h:y};case "power":return {v:{shape:"sprite",art:fn[l??"magnet"].art,color:fn[l??"magnet"].color,w:y,h:y,depth:b+.2},h:y};case "finish":return {v:{shape:"sprite",art:"finish",w:u*.7,h:u*r+u*.9,depth:8},h:0}}},me=(f$1,m,p,y={})=>{let l=At(e$1,r),u=y.size??(f$1==="coin"?l.laneH*.42:f$1==="power"?l.laneH*.62:l.laneH*.85),b=y.alt??(f$1==="coin"?l.laneH*.5:f$1==="power"?l.laneH*.6:0),A=e$1.create();e$1.set(A,xt,{lane:m,kind:f$1,size:u,alt:b,...y.power!==void 0?{power:y.power}:{}});let{v:I,h:N}=te(l,f$1,m,u,y.power),U=l.viewW+l.laneH+u/2+p,X=f$1==="finish"?l.top+l.laneH*r/2:N<0?Ar(l,m)+N/2+l.laneH*.08:we(l,{lane:m,alt:b},N);return e$1.set(A,e,{x:U,y:X}),e$1.set(A,f,I),f$1==="coin"&&ie++,A},Ee=(f,m,p,y)=>{let l=At(e$1,r);for(let u=0;u<p;u++)me("coin",f,m+u*l.laneH*.75,y!==void 0?{alt:y}:{});},Re=(f,m)=>{let p=1+bo(e$1,"meta:luck");o.chance(Math.min(.9,s("powerRate")*p))&&me("power",f,m,{power:o.weighted(x,y=>fn[y].weight)});},Ce=f=>_.kinds.includes(f),Y=()=>[...Array(r).keys()],Le=f=>{let m=["wall",...Ce("barrier")?["barrier"]:[],...Ce("pit")?["pit"]:[]],p=new Map;for(let u of Y())o.chance(_.density)&&p.set(u,o.pick(m));p.size>=r&&p.delete(o.int(0,r-1));let y=At(e$1,r);for(let[u,b]of p)me(b,u,f,b==="pit"?{size:y.laneH*1.25}:{});let l=Y().filter(u=>!p.has(u));l.length>0&&o.chance(s("coinRate"))&&Ee(o.pick(l),f-y.laneH,3);for(let[u,b]of p)(b==="barrier"||b==="pit")&&o.chance(.5)&&Ee(u,f-y.laneH*.75,3,y.laneH*1.3);},Ye=()=>{let m=At(e$1,r).laneH,p=l=>l+Math.round(_.density*3),y=[{id:"scatter",weight:3,make:l=>{let u=p(2);for(let b=0;b<u;b++)Le(b*l);return Re(o.int(0,r-1),u*l-l/2),u*l}},{id:"rest",weight:1,make:l=>{let u=o.int(0,r-1);for(let b=0;b<4;b++)Ee(u,b*l*.8,3),u=Math.max(0,Math.min(r-1,u+(o.chance(.5)?1:-1)));return Re(u,4*l*.8),4*l*.8}}];return _.level>=3&&y.push({id:"corridor",weight:2,make:l=>{let u=p(3),b=o.int(0,r-1);for(let A=0;A<u;A++){for(let I of Y())I!==b&&me("wall",I,A*l);Ee(b,A*l-m*.4,2),A%2===1&&(b=Math.max(0,Math.min(r-1,b+(o.chance(.5)?1:-1))));}return u*l}}),(Ce("barrier")||Ce("pit"))&&y.push({id:"hurdles",weight:2,make:()=>{let l=Math.max(m*3.6,_.speed*s("jumpTime")*1.45),u=2+Math.round(_.density*2),b=[...Ce("barrier")?["barrier"]:[],...Ce("pit")?["pit"]:[]],A=o.int(0,r-1);for(let I=0;I<u;I++){for(let N of Y()){let U=o.pick(b);me(U,N,I*l,U==="pit"?{size:m*1.25}:{});}Ee(A,I*l-m*.75,3,m*1.3);}return u*l}}),Ce("train")&&y.push({id:"train",weight:2,make:l=>{let u=o.int(0,r-1),b=m*o.int(5,8),A=o.chance(.75),I=m*1.4;A&&me("ramp",u,0,{size:I}),me("train",u,(A?I:0)+b/2-m*.42,{size:b}),A&&Ee(u,I+m*.4,Math.floor(b/(m*.75))-1,m*(Mt.train+.5));let N=Y().filter(X=>X!==u),U=o.pick(N);if(o.chance(.5))me("train",U,l*.5+b/2,{size:b*.8});else for(let X=0;X<2;X++)me("wall",U,l*(.5+X*1.4));return (A?I:0)+b+l*.5}}),Ce("mover")&&y.push({id:"movers",weight:1.5,make:l=>{let u=1+(o.chance(_.density)?1:0),b=new Set;for(let I=0;I<u;I++){let N=o.int(0,r-1);b.has(N)&&(N=(N+1)%r),b.add(N),me("mover",N,I*l*1.6,{size:m*.6});}let A=Y().filter(I=>!b.has(I));return A.length>0&&Ee(o.pick(A),0,4),u*l*1.6}}),Ce("rock")&&y.push({id:"rocks",weight:1.5,make:l=>{let u=2+(o.chance(_.density)?1:0);for(let b=0;b<u;b++){let A=o.int(0,r-1);me("rock",A,b*l*1.2,{size:m*.9});let I=Y().filter(N=>N!==A);Ee(o.pick(I),b*l*1.2,2);}return u*l*1.2}}),y},at=f=>{let m=At(e$1,r),p=Math.floor(r/2),y=_.fresh;if(y===null||y==="wall")return 0;if(y==="barrier"||y==="pit"){for(let l=0;l<3;l++)me(y,p,l*f*1.6,y==="pit"?{size:m.laneH*1.25}:{}),Ee(p,l*f*1.6-m.laneH*.75,3,m.laneH*1.3);return 3*f*1.6}return y==="train"?(me("ramp",p,0,{size:m.laneH*1.4}),me("train",p,m.laneH*1.4+m.laneH*3-m.laneH*.42,{size:m.laneH*6}),Ee(p,m.laneH*1.8,7,m.laneH*(Mt.train+.5)),m.laneH*8+f):(me(y,p,0,{size:y==="mover"?m.laneH*.6:m.laneH*.9}),f*1.5)},_e=()=>{let f=Math.max(At(e$1,r).laneH*2.1,300-_.density*110),m;if(!oe&&_.fresh!==null&&_.fresh!=="wall")oe=true,m=at(f);else {let p=Ye();m=(G>0&&G%4===3?p.find(l=>l.id==="rest"):o.weighted(p,l=>l.weight)).make(f);}G++,$=Number(e$1.vars.distance??0)+m+f*1.2;},Pt=(f,m,p)=>{let y=f.laneH*1.05;return {x:f.playerX,y:Ar(f,m)-p-y/2,h:y}},Ge=()=>{let f$1=At(e$1,r);(c===null||!e$1.isAlive(c))&&(c=e$1.create(),e$1.set(c,On,{lane:Math.floor(r/2),size:f$1.laneH*.5,alt:0,vy:0}),e$1.set(c,f,{shape:"actor",cast:Se().cast,h:0,pose:"idle",depth:10}));let m=e$1.need(c,On);m.size=f$1.laneH*.5;let p=Pt(f$1,m.lane,m.alt);e$1.set(c,e,{x:p.x,y:p.y});let y=e$1.need(c,f);y.shape==="actor"&&(y.cast=Se().cast,y.h=p.h,y.depth=10+m.lane);},Xe=()=>{for(let m of e$1.query(xt))e$1.destroy(m);_t(),_=d(Tr(bo(e$1,"meta:chapter")||1,s("difficulty"))),O=Math.round(_.length*s("lengthScale")),De=s("lives")+(Se().perk==="heart"?1:0),e$1.vars.distance=0,e$1.vars.meters=0,e$1.vars.level_length=O,e$1.vars.runner_length_scale=s("lengthScale"),e$1.vars.runner_level=_.level,e$1.vars.speed=_.speed,e$1.vars.lives=De,e$1.vars.coins=0,e$1.vars.score=0,e$1.vars.mult=1,e$1.vars.stars=0,e$1.vars.reviving=false,M=0,$=At(e$1,r).laneH*2,G=0,B=false,Q=false,ae=false,q=0,ue=0,fe=0,ie=0,ve=0,se=0,Me=0,ge=0,oe=false,ce.clear();let f=bo(e$1,"meta:head_start");if(f>0&&ce.set("dash",f),c!==null&&e$1.isAlive(c)){let m=e$1.need(c,On);m.lane=Math.floor(r/2),m.alt=0,m.vy=0;}Ge();},tt=f=>{if(!Ze(e$1)||xe()||c===null)return;let m=e$1.need(c,On),p=Math.min(r-1,Math.max(0,m.lane+f));p!==m.lane&&vt(e$1,"runner-lanes"),m.lane=p;},ot=()=>{let f=At(e$1,r),m=s("jumpTime");return 8*f.laneH*Mt.jump/(m*m)},ct=(f,m,p)=>{let y=At(f,r),l=y.playerX,u=y.laneH*.22,b=0;for(let A of f.query(xt)){let I=f.need(A,xt);if(I.lane!==m||I.kind!=="train"&&I.kind!=="ramp")continue;let N=f.need(A,e),U=N.x-I.size/2,X=N.x+I.size/2;if(l+u<U||l-u>X)continue;let ye=y.laneH*Mt.train;if(I.kind==="ramp")b=Math.max(b,ye*Math.max(0,Math.min(1,(l-U)/I.size)));else if(p>=ye-y.laneH*.12)b=Math.max(b,ye);else return null}return b},it=()=>{if(!Ze(e$1)||xe()||c===null||ce.has("flight"))return;let f=e$1.need(c,On),m=ct(e$1,f.lane,f.alt)??0;f.alt-m>2||(f.vy=ot()*s("jumpTime")/2,Me++,vt(e$1,"runner-jump"),Ot(e$1),e$1.emit("jumped",{}),He(e$1,c,"jump"));},bt=()=>{if(ht(e$1,"runner-lanes")||c===null)return;let f=At(e$1,r),m=f.playerX+f.laneH*1.6,p=Ar(f,Math.floor(r/2))-f.laneH*.4;ft(e$1,"swipe",{x:m,y:p+f.laneH*.5},{x:m,y:p-f.laneH*.9},f.laneH);},Ke=(f$1,m,p,y)=>{let l=Ae.get(f$1);(l===void 0||!e$1.isAlive(l))&&(l=e$1.create(),e$1.set(l,Yl,{id:f$1}),Ae.set(f$1,l)),e$1.set(l,e,{x:m,y:p}),e$1.set(l,f,y);},ze=f=>{let m=Ae.get(f);m!==void 0&&e$1.destroy(m),Ae.delete(f);};function _t(){for(let f of Ae.values())e$1.destroy(f);Ae.clear(),rt(e$1,Yl);}let Fe=(f,m,p,y,l,u,b,A=41)=>{let I=Math.max(0,Math.min(1,Math.round(u*100)/100));Ke(`${f}:bg`,m,p,{shape:"rect",w:y,h:l,color:"#000000",alpha:.45,radius:l/2,depth:A});let N=Math.max(0,(y-4)*I);N<1?ze(`${f}:fill`):Ke(`${f}:fill`,m-(y-4)/2+N/2,p,{shape:"rect",w:N,h:l-4,color:b,radius:(l-4)/2,depth:A+.01});},Ct=f=>{let m=At(f,r),p=Math.min(m.viewW,m.viewH),y=m.viewH*.085,l=m.viewW*.66,u=Math.max(10,p*.026),b=Number(f.vars.distance??0)/Math.max(1,O);Fe("way",m.viewW/2,y,l,u,b,"accent");let A=p*.055;Ke("flag",m.viewW/2+l/2+A*.45,y-A*.25,{shape:"sprite",art:"flag",w:A,h:A,depth:42}),Ke("lvl",m.viewW/2-l/2-p*.05,y,{shape:"text",text:`${_.level}`,size:Math.round(p*.04),color:"text",bold:true,depth:42});let I=y+p*.07,N=p*.05,U=Number(f.vars.lives??0);for(let Pe=0;Pe<De;Pe++)Ke(`h${Pe}`,m.viewW*.07+Pe*N*1.1,I,{shape:"sprite",art:"heart",w:N,h:N,alpha:Pe<U?1:.25,depth:42});for(let Pe=De;Pe<10;Pe++)ze(`h${Pe}`);let X=p*.045,ye=String(f.vars.coins??0);Ke("coin:i",m.viewW*.93-ye.length*X*.6-X*.7,I,{shape:"sprite",art:"coin",w:X,h:X,depth:42}),Ke("coin",m.viewW*.93-ye.length*X*.6/2,I,{shape:"text",text:ye,size:Math.round(X),color:"text",bold:true,depth:42});let ke=Number(f.vars.mult??1);ke>1?Ke("mult",m.viewW*.9,I+X*1.2,{shape:"text",text:`x${ke}`,size:Math.round(X*1.05),color:"coin",bold:true,depth:42}):ze("mult");let Ue=p*.055,st=0;for(let Pe of go){let re=ce.get(Pe);if(re===void 0){ze(`p:${Pe}`),ze(`pb:${Pe}:bg`),ze(`pb:${Pe}:fill`);continue}let H=m.viewW*.07+st*Ue*1.25,J=I+N*1.25;Ke(`p:${Pe}`,H,J,{shape:"sprite",art:fn[Pe].art,color:fn[Pe].color,w:Ue,h:Ue,depth:42}),Fe(`pb:${Pe}`,H,J+Ue*.7,Ue,Math.max(6,p*.011),re/Math.max(.1,ee(Pe)),"coin",42),st++;}},Ht=(f,m)=>{if(!Ze(f)||Q)return;Q=true;let p=m==="cleared",y=p?1+(ie>0&&ve>=ie*_.coinStar?1:0)+(se===0?1:0):0;f.vars.stars=y,p&&f.vars["meta:first_clear"]===true&&qe(f,"coins",_.firstClearGold);let l=Or(Number(f.vars.distance??0));f.vars.score=ge+l*2+(p?500*y:0),f.vars.reviving=false,f.emit(Bt,{reason:m,stats:{chapter:_.level,seconds:Math.floor(q),cleared:p,stars:y,coins:ve,meters:l,jumps:Me,hits:se}});},It=f=>{if(f.vars.revive_ready===true&&!ae){f.vars.reviving=true,Ot(f),f.emit(Gt,{});return}Ht(f,"crashed");},tn=f=>{if(!xe())return;ae=true,f.vars.reviving=false,f.vars.lives=Math.max(1,Math.ceil(De/2)),M=2.5,ce.set("shield",Math.max(ce.get("shield")??0,3));let m=At(f,r);for(let p of f.query(xt)){let y=f.need(p,xt);if(y.kind==="coin"||y.kind==="power"||y.kind==="finish")continue;let l=f.need(p,e);l.x-y.size/2<m.playerX+m.laneH*6&&(V(f,{kind:"burst",x:l.x,y:l.y,color:"coin",n:8,size:m.laneH*.6}),f.destroy(p));}if(c!==null){let p=f.need(c,On);p.alt=0,p.vy=0,et(f,c,"run");let y=f.need(c,e);V(f,{kind:"ring",x:y.x,y:y.y,color:"coin",size:m.laneH*4});}V(f,{kind:"flash",color:"coin"});},pt=(f,m)=>{if(c===null)return;let p=f.need(m,e),y=At(f,r);if(ce.has("dash")){V(f,{kind:"burst",x:p.x,y:p.y,color:"accent",n:14,size:y.laneH*.8}),V(f,{kind:"shake",power:.6}),f.need(m,xt).kind!=="pit"&&f.destroy(m);return}if(M>0)return;if(ce.has("shield")){ce.delete("shield"),M=.8,V(f,{kind:"ring",x:y.playerX,y:f.need(c,e).y,color:"muted",size:y.laneH*2}),f.need(m,xt).kind!=="pit"&&f.destroy(m);return}se++,ue=0,f.vars.mult=1;let l=Number(f.vars.lives??1)-1;f.vars.lives=l,f.emit("player-hit",{lives:l}),V(f,{kind:"burst",x:p.x,y:p.y,color:"danger",n:14,size:y.laneH*.9}),V(f,{kind:"shake",power:1.5}),He(f,c,"hit"),f.need(m,xt).kind!=="pit"&&f.destroy(m),M=s("graceTime"),l<=0&&It(f);},w=(f,m)=>{let p=f.need(m,xt),y=f.need(m,e),l=At(f,r);if(p.kind==="power"&&p.power!==void 0){ce.set(p.power,ee(p.power)),f.emit("power-up",{id:p.power}),V(f,{kind:"ring",x:y.x,y:y.y,color:fn[p.power].color,size:l.laneH*1.6}),f.destroy(m);return}ue++;let u=Math.min(5,1+Math.floor(ue/12));u>Number(f.vars.mult??1)&&V(f,{kind:"pop",x:l.playerX,y:y.y-l.laneH,text:`x${u}`,color:"coin",size:Math.round(l.laneH*.42)}),f.vars.mult=u;let b=(ce.has("double")?2:1)*(1+bo(f,"meta:greed"));fe+=b;let A=Math.floor(fe);fe-=A,A>0&&qe(f,"coins",A),ve++,ge+=Math.round(b*s("coinScore")*u),f.emit("coin-collected",{value:b}),V(f,{kind:"burst",x:y.x,y:y.y,color:"coin",n:6,size:p.size*1.3}),f.destroy(m);};e$1.on(j,f=>{let m=f;e$1.vars.started_tick!==e$1.tick&&(m.type==="swipe"&&(m.dir==="up"||m.dir==="down")?tt(m.dir==="up"?-1:1):m.type==="swipe"&&m.dir==="right"?it():m.type==="key"&&(m.key==="left"||m.key==="up")?tt(-1):m.type==="key"&&(m.key==="right"||m.key==="down")?tt(1):(m.type==="key"&&m.key==="action"||m.type==="tap")&&it());}),e$1.on($t,()=>{Xe(),c!==null&&et(e$1,c,"run"),bt();}),e$1.on(Wt,Xe),e$1.on(Kt,()=>tn(e$1)),e$1.on(Ft,()=>{xe()&&(e$1.vars.reviving=false,Ht(e$1,"crashed"));}),e$1.on(zt,f=>{c!==null&&e$1.isAlive(c)&&et(e$1,c,f.reason==="cleared"?"dance":"die");for(let m of e$1.query(xt))e$1.need(m,xt).kind==="mover"&&et(e$1,m,"idle");_t();}),e$1.on(k,()=>{je(),c!==null&&Ge();let f$1=At(e$1,r);for(let m of e$1.query(xt)){let p=e$1.need(m,xt),{v:y,h:l}=te(f$1,p.kind,p.lane,p.size,p.power);e$1.set(m,f,y),e$1.need(m,e).y=p.kind==="finish"?f$1.top+f$1.laneH*r/2:l<0?Ar(f$1,p.lane)+l/2+f$1.laneH*.08:we(f$1,p,l);}}),e$1.addSystem({id:"lane-runner",order:0,run(f$1,m){if(!Ze(f$1)||c===null||Q||xe())return;let p=At(f$1,r),y=p.laneH;q+=m;let l=Number(f$1.vars.distance??0),b=(_.speed+(_.topSpeed-_.speed)*Math.min(1,l/Math.max(1,O)))*(ce.has("dash")?1.6:1);f$1.vars.speed=Math.round(b);let A=b*m;f$1.vars.distance=l+A,f$1.vars.meters=Or(l+A),M>0&&(M=Math.max(0,M-m));for(let[re,H]of [...ce])H-m<=0?(ce.delete(re),re==="flight"&&(M=Math.max(M,.8))):ce.set(re,H-m);mo(f$1,A);for(let re of f$1.query(ts)){let H=f$1.need(re,f);H.shape==="tile"&&(H.scrollX=(H.scrollX??0)+A);}let I=O-(l+A);if(!B&&I<=p.viewW-p.playerX+y){B=true;let re=me("finish",0,0);f$1.need(re,e).x=p.playerX+I;}else !B&&l>=$&&I>p.viewW&&_e();let N=f$1.need(c,On),U=ce.has("flight");if(U)N.alt+=(y*Mt.flight-N.alt)*Math.min(1,m*6),N.vy=0,Math.floor((l+A)/(y*.9))!==Math.floor(l/(y*.9))&&me("coin",N.lane,0,{alt:y*(Mt.flight+.4)});else {N.vy-=ot()*m,N.alt+=N.vy*m;let re=ct(f$1,N.lane,N.alt);if(re===null){let H=f$1.query(xt).find(J=>{let j=f$1.need(J,xt);return j.lane===N.lane&&j.kind==="train"&&Math.abs(f$1.need(J,e).x-p.playerX)<j.size/2+y*.22});if(H!==void 0&&pt(f$1,H),Q||xe())return;N.alt=Math.max(0,N.alt);}else N.alt<=re&&(N.alt=re,N.vy=0);}let X=f$1.need(c,e),ye=Pt(p,N.lane,N.alt);X.y+=(ye.y-X.y)*Math.min(1,m*14),X.x=ye.x;let ke=f$1.need(c,f);ke.shape==="actor"&&(ke.alpha=M>0&&Math.floor(f$1.time*12)%2===0?.35:1,ke.depth=10+N.lane+.5,ke.speed=b,ke.pose=N.alt>2&&N.vy!==0?"air":"run");let Ue=y*.24,st=ce.has("magnet"),Pe=N.alt+y*.5;for(let re of f$1.query(xt)){if(!f$1.isAlive(re)||!f$1.has(re,xt))continue;let H=f$1.need(re,xt),J=f$1.need(re,e);if(J.x-=A,H.kind==="mover"){if(J.x-=b*.35*m,H.to===void 0&&J.x-p.playerX<y*6&&J.x-p.playerX>y*3){let E=[H.lane-1,H.lane+1].filter(a=>a>=0&&a<r);H.to=N.lane!==H.lane&&E.includes(N.lane)?N.lane:o.pick(E),H.warn=.45;}if(H.warn!==void 0&&H.warn>0){H.warn-=m;let E=f$1.need(re,f);E.alpha=Math.floor(f$1.time*14)%2===0?.4:1,H.warn<=0&&H.to!==void 0&&(H.lane=H.to,E.alpha=1,E.depth=9+H.lane);}J.y+=(we(p,H,y*1.5)-J.y)*Math.min(1,m*10);}if(H.kind==="rock"&&!H.landed&&J.x-p.playerX<y*2.6&&(H.landed=true,f$1.set(re,f,{shape:"sprite",art:"rock",w:H.size,h:y*Mt.rock,depth:9+H.lane}),J.y=Ar(p,H.lane)-y*Mt.rock/2,V(f$1,{kind:"burst",x:J.x,y:J.y+y*.4,color:"muted",n:10,size:y*.7}),V(f$1,{kind:"shake",power:.5})),H.kind==="rock"&&!H.landed){let E=f$1.need(re,f);E.shape==="sprite"&&(E.alpha=.35+.3*Math.abs(Math.sin(f$1.time*6)));}if(H.kind==="power"&&(J.y=we(p,H,H.size)+Math.sin(f$1.time*4+J.x*.01)*y*.06),J.x+H.size/2<-y*2){f$1.destroy(re);continue}if(H.kind==="finish"){if(J.x<=p.playerX){V(f$1,{kind:"flash",color:"coin"}),Ht(f$1,"cleared");return}continue}if(H.kind==="coin"&&st&&J.x>p.playerX-y*.5&&J.x<p.playerX+y*4&&(H.pulled=true),H.kind==="coin"&&H.pulled){J.x+=(p.playerX-J.x)*Math.min(1,m*10),J.y+=(X.y-J.y)*Math.min(1,m*10),Math.hypot(J.x-p.playerX,J.y-X.y)<y*.4&&w(f$1,re);continue}let j=H.kind==="barrier"?H.size*.3:H.size/2;if(Math.abs(J.x-p.playerX)>Ue+j||H.lane!==N.lane)continue;if(H.kind==="coin"||H.kind==="power"){(Math.abs(H.alt-Pe)<y*.6||U)&&w(f$1,re);continue}if(U||H.kind==="ramp"||H.kind==="train"||H.kind==="rock"&&!H.landed)continue;let k=H.kind==="wall"?Mt.wall:H.kind==="barrier"?Mt.barrier*.85:H.kind==="mover"?Mt.mover:H.kind==="rock"?Mt.rock:0;if(H.kind==="pit"?N.alt<2&&Math.abs(J.x-p.playerX)<H.size*.32&&pt(f$1,re):N.alt<y*k&&pt(f$1,re),Q||xe())return}ht(f$1,"runner-jump")||f$1.query(xt).find(H=>{let J=f$1.need(H,xt),j=f$1.need(H,e).x-p.playerX;return (J.kind==="barrier"||J.kind==="pit")&&J.lane===N.lane&&j>y*1.5&&j<y*3.2})!==void 0&&!un(f$1)&&ft(f$1,"tap",{x:p.playerX+y*1.2,y:X.y}),f$1.vars.score=ge+Or(l+A)*2,Ct(f$1);}}),je(),Xe();}};var or=[{id:"rainbow",shape:"color",art:"m3_rainbow",make:e=>e>=5},{id:"bomb",shape:"area:1",art:"m3_bomb",make:(e,t)=>t},{id:"col",shape:"col",art:"m3_col",make:(e,t,n)=>e===4&&n==="h"},{id:"row",shape:"row",art:"m3_row",make:(e,t,n)=>e===4&&n==="v"}],Jl=[{a:"row",b:"row",effect:"cross"},{a:"col",b:"col",effect:"cross"},{a:"row",b:"col",effect:"cross"},{a:"bomb",b:"row",effect:"cross:1"},{a:"bomb",b:"col",effect:"cross:1"},{a:"bomb",b:"bomb",effect:"area:2"},{a:"rainbow",b:"plain",effect:"color"},{a:"rainbow",b:"row",effect:"turn"},{a:"rainbow",b:"col",effect:"turn"},{a:"rainbow",b:"bomb",effect:"turn"},{a:"rainbow",b:"rainbow",effect:"all"}],Dn={ice:{id:"ice",layer:"under",hp:1,art:"m3_ice",max:20},slime:{id:"slime",layer:"under",hp:1,art:"m3_slime",spreads:true,max:16},chain:{id:"chain",layer:"over",hp:1,art:"m3_chain",max:10},stone:{id:"stone",layer:"block",hp:1,art:"m3_stone",hitByNear:true,max:10},cage:{id:"cage",layer:"block",hp:1,art:"m3_cage",hitByNear:true}},Ua={"-":{},".":{hole:true},i:{under:{id:"ice",hp:1}},I:{under:{id:"ice",hp:2}},m:{under:{id:"slime",hp:1}},c:{over:{id:"chain",hp:1}},s:{block:{id:"stone",hp:1}},S:{block:{id:"stone",hp:2}},g:{block:{id:"cage",hp:1}}},ko={fire:{beats:["nature"],color:"piece1"},water:{beats:["fire"],color:"piece2"},nature:{beats:["water"],color:"piece3"},light:{beats:["dark"],color:"piece4"},dark:{beats:["light"],color:"piece5"}},qa=[{index:0,art:"gem1",color:"piece1",role:"attack",element:"fire"},{index:1,art:"gem2",color:"piece2",role:"attack",element:"water"},{index:2,art:"gem3",color:"piece3",role:"attack",element:"nature"},{index:3,art:"gem4",color:"piece4",role:"attack",element:"light"},{index:4,art:"gem5",color:"piece5",role:"attack",element:"dark"},{index:5,art:"m3_heart",color:"danger",role:"heal"},{index:6,art:"m3_shield",color:"primary",role:"shield"},{index:7,art:"gem6",color:"piece6",role:"attack"}],So=e=>qa.find(t=>t.index===e),ja=[{id:"goblin",cast:"foe5",element:"nature",hp:1,attack:1,every:3,size:.8},{id:"wolf",cast:"foe",element:"nature",hp:.8,attack:.7,every:2,size:.85},{id:"orc",cast:"foe",variant:5,element:"fire",hp:1.4,attack:1.3,every:3,skill:{kind:"sow",obstacle:"stone",count:2},size:.95},{id:"frost-imp",cast:"foe3",element:"water",hp:1,attack:.9,every:3,skill:{kind:"sow",obstacle:"ice",count:3},size:.85},{id:"spider",cast:"foe4",element:"dark",hp:1.1,attack:1,every:3,skill:{kind:"sow",obstacle:"chain",count:3},size:.85},{id:"golem",cast:"foe2",element:"light",hp:2,attack:1.5,every:4,skill:{kind:"sow",obstacle:"stone",count:3},size:1.05},{id:"slime-beast",cast:"foe2",variant:9,element:"water",hp:1.3,attack:1.1,every:3,skill:{kind:"sow",obstacle:"slime",count:2},size:.95},{id:"shaman",cast:"foe4",variant:7,element:"dark",hp:1,attack:.9,every:3,skill:{kind:"heal",share:.15},size:.9},{id:"troll",cast:"boss",element:"nature",hp:3,attack:1.6,every:3,skill:{kind:"sow",obstacle:"stone",count:3},boss:true,enrage:.5,size:1.2},{id:"frost-queen",cast:"boss",variant:4,element:"water",hp:3.5,attack:1.5,every:3,skill:{kind:"sow",obstacle:"ice",count:5},boss:true,enrage:.5,size:1.2},{id:"spider-queen",cast:"boss",variant:9,element:"dark",hp:4,attack:1.7,every:3,skill:{kind:"sow",obstacle:"chain",count:4},boss:true,enrage:.5,size:1.2},{id:"lich",cast:"boss",variant:13,element:"dark",hp:4.5,attack:1.8,every:3,skill:{kind:"sow",obstacle:"slime",count:3},boss:true,enrage:.5,size:1.25}],Eo=e=>ja.find(t=>t.id===e),rs=100,Zl=4,Ql=1.5,ec=2,tc=1,Xa=[{id:"blast",art:"m3_skill_blast",mana:30,kind:"shape",shape:"area:1",bigShape:"area:2",bigAt:1.5,damage:6},{id:"cross",art:"m3_skill_cross",mana:28,kind:"shape",shape:"cross",bigShape:"cross:1",bigAt:1.5,damage:5},{id:"storm",art:"m3_skill_storm",mana:34,kind:"storm",count:4,damage:4}],os=e=>Xa.find(t=>t.id===e),Lr=[{id:"hero",cast:"hero",gems:0,element:"fire",skill:"blast"},{id:"hero2",cast:"hero2",gems:150,element:"light",skill:"cross"},{id:"hero3",cast:"hero3",gems:300,element:"water",skill:"storm"}],ss={plain:["--------","--------","--------","--------","--------","--------","--------","--------"],diamond:["..----..",".------.","--------","--------","--------","--------",".------.","..----.."],"ice-mid":["--------","--------","--iiii--","--iiii--","--iiii--","--iiii--","--------","--------"],"ice-low":["--------","--------","--------","--------","iiiiiiii","iiiiiiii","IIIIIIII","IIIIIIII"],stones:["--------","--------","--------","ss-ss-ss","--------","--------","--------","--------"],chains:["--------","-c----c-","--c--c--","---cc---","---cc---","--c--c--","-c----c-","--------"],cages:["--------","-g----g-","--------","---gg---","--------","--------","-g----g-","--------"],slime:["--------","--------","--------","--------","--------","--------","mm----mm","mmm--mmm"],hourglass:["--------","--------",".------.","..----..","..----..",".------.","--------","--------"],ring:["--------","--------","--------","---..---","---..---","--------","--------","--------"],"ice-stone":["--------","-S----S-","--IIII--","--IIII--","--IIII--","--IIII--","-S----S-","--------"],fortress:["s------s","-iiiiii-","-i-cc-i-","-ic--ci-","-ic--ci-","-i-cc-i-","-iiiiii-","s------s"],"slime-cages":["-g----g-","--------","--------","---mm---","---mm---","--------","--------","-g----g-"],"cross-holes":["---..---","--------","--------",".------.",".------.","--------","--------","---..---"]},mt=(e,t,n,s,r)=>({kind:"goal",board:e,moves:t,colors:n,goals:s,...r?{drops:r}:{}}),Ut=(e,t,...n)=>({kind:"battle",board:e,elements:t,enemies:n}),on=(e,t)=>({kind:"color",color:e,count:t}),kt=e=>({kind:"clear",obstacle:e}),vo=e=>({kind:"drops",count:e}),as=[mt("plain",20,5,[on(0,12),on(1,12)]),mt("diamond",20,5,[on(2,15),on(3,15)]),Ut("plain",3,"goblin"),mt("ice-mid",22,5,[kt("ice")]),mt("ring",20,5,[on(0,20),on(4,20)]),Ut("plain",3,"goblin","wolf"),mt("stones",22,5,[kt("stone"),on(1,15)]),mt("ice-low",25,5,[kt("ice")]),Ut("diamond",3,"wolf","orc"),Ut("plain",3,"troll"),mt("chains",24,5,[kt("chain")]),mt("plain",25,5,[vo(3)],3),Ut("plain",4,"frost-imp","goblin"),mt("cages",22,5,[kt("cage")]),mt("slime",25,5,[kt("slime")]),Ut("ice-mid",4,"orc","frost-imp"),mt("hourglass",24,5,[vo(3),on(2,20)],3),mt("ice-low",26,5,[kt("ice")]),Ut("plain",4,"spider","frost-imp","wolf"),Ut("plain",4,"frost-queen"),mt("ice-stone",26,5,[kt("ice"),kt("stone")]),mt("cross-holes",26,6,[on(0,20),on(3,20)]),Ut("chains",4,"spider","golem"),mt("fortress",28,5,[kt("ice"),kt("chain")]),mt("slime-cages",26,5,[kt("cage"),kt("slime")]),Ut("plain",4,"slime-beast","golem"),mt("diamond",28,5,[vo(3)],3),mt("ice-low",28,5,[kt("ice"),on(4,20)]),Ut("ring",5,"shaman","golem","spider"),Ut("plain",5,"spider-queen"),mt("fortress",28,6,[kt("ice"),kt("chain")]),mt("slime",28,5,[kt("slime"),vo(3)],3),Ut("ice-stone",5,"golem","shaman"),mt("ice-stone",28,6,[kt("ice"),kt("stone")]),mt("slime-cages",28,6,[kt("cage"),kt("slime")]),Ut("plain",5,"slime-beast","shaman","orc"),mt("cross-holes",30,5,[vo(3),on(1,18)],3),mt("fortress",32,5,[kt("ice"),kt("chain"),on(2,15)]),Ut("diamond",5,"golem","shaman","spider"),Ut("plain",5,"lich")],xo=10,nc=4,is=as.length,Ya=[0,18,45,75];function fp(e){return e.kind==="goal"?[0,1,2,3,4,7].slice(0,Math.max(3,Math.min(6,e.colors))):[...[0,1,2,3,4].slice(0,Math.max(2,Math.min(5,e.elements))),5,6]}function wr(e,t=.5){let n=Math.max(1,Math.min(is,Math.floor(e))),s=as[n-1],r=Math.ceil(n/xo),o=s.kind==="battle"&&s.enemies.some(c=>Eo(c)?.boss);return {level:n,world:r,index:n-(r-1)*xo,def:s,boss:o,colors:fp(s),enemyHp:180*Math.pow(1.07,n-1)*(.8+t*.4),enemyAttack:14*Math.pow(1.06,n-1)*(.8+t*.4),firstClearGold:(o?120:50)+(n-1)*10}}var Ja=e=>Ya[Math.ceil(Math.max(1,e)/xo)-1]??0,Za=(e,t)=>t?e>=.7?3:e>=.35?2:1:e>=.3?3:e>=.1?2:1,rc=5,oc=.5,Qa="kit-match3",ei=[{id:"Attack",var:"meta:attack",art:"m3_skill_blast",color:"danger",perLevel:5,unit:"%",maxLevel:20,price:40,growth:.12},{id:"Health",var:"meta:health",art:"m3_heart",color:"danger",perLevel:6,unit:"%",maxLevel:20,price:40,growth:.12},{id:"Defense",var:"meta:defense",art:"m3_shield",color:"primary",perLevel:5,unit:"%",maxLevel:15,price:45,growth:.12},{id:"SkillPower",var:"meta:skill",art:"m3_skill_cross",color:"secondary",perLevel:8,unit:"%",maxLevel:10,price:50,growth:.12},{id:"ManaGain",var:"meta:mana",art:"m3_skill_storm",color:"secondary",perLevel:5,unit:"%",maxLevel:10,price:50,growth:.12},{id:"Moves",var:"meta:moves",art:"m3_bomb",color:"coin",perLevel:1,unit:"",maxLevel:5,price:120,growth:.2}],sc={game:"match3",character:Qa,stats:ei,heroes:Lr,levels:is,firstClearGold:e=>wr(e).firstClearGold,stars:3,starsToEnter:Ja};var ri=()=>({cleared:[],created:[],fired:[],hits:[],spawned:[],dropsCollected:0,slimeCleared:false}),oi=-1,An=-2,ds=(e,t,n)=>t>=0&&n>=0&&t<e.cols&&n<e.rows,Un=(e,t,n)=>ds(e,t,n)?e.cells[n][t]:null,ps=(e,t)=>t[Math.floor(e.rnd()*t.length)%t.length],ac=[[1,0],[-1,0],[0,1],[0,-1]],ti=e=>e.hole||e.block!==null||e.over!==null,hp=e=>e!==null&&e.color>=0;function us(e,t,n,s,r=0){let o={cols:e[0].length,rows:e.length,cells:e.map(c=>[...c].map(d=>{let x=s[d]??{};return {hole:x.hole===true,piece:null,under:x.under?{...x.under}:null,over:x.over?{...x.over}:null,block:x.block?{...x.block}:null}})),colors:t,nextId:1,dropsToSpawn:r,rnd:n};return ni(o),o}var cs=(e,t,n=null)=>({id:e.nextId++,color:t,special:n});function ni(e){for(let t=0;t<50;t++){for(let n=0;n<e.rows;n++)for(let s=0;s<e.cols;s++){let r=e.cells[n][s];if(r.hole||r.block||r.piece&&r.piece.color<0||r.piece?.special)continue;let o=new Set,c=Un(e,s-1,n)?.piece,d=Un(e,s-2,n)?.piece;c&&d&&c.color>=0&&c.color===d.color&&o.add(c.color);let x=Un(e,s,n-1)?.piece,_=Un(e,s,n-2)?.piece;x&&_&&x.color>=0&&x.color===_.color&&o.add(x.color);let O=e.colors.filter($=>!o.has($)),M=ps(e,O.length>0?O:e.colors);r.piece?r.piece.color=M:r.piece=cs(e,M);}if(Pr(fs(e)).size===0&&Cr(e)!==null)return}}function si(e){for(let t=0;t<e.rows;t++)for(let n=0;n<e.cols;n++){let s=e.cells[t][n].piece;s&&s.color>=0&&!s.special&&!e.cells[t][n].over&&(s.color=-100);}for(let t=0;t<e.rows;t++)for(let n=0;n<e.cols;n++)e.cells[t][n].piece?.color===-100&&(e.cells[t][n].piece.color=ps(e,e.colors));if(ni(e),Cr(e)===null){for(let t of e.cells)for(let n of t)n.over=null;ni(e);}}var fs=e=>e.cells.map(t=>t.map(n=>n.piece&&n.piece.color>=0&&!n.block?n.piece.color:null));function Pr(e){let t=new Set;for(let n of ic(e))for(let[s,r]of n.cells)t.add(`${s},${r}`);return t}function ic(e){let t=[],n=e.length,s=e[0]?.length??0;for(let r=0;r<n;r++)for(let o=0;o<s;){let c=e[r][o],d=1;for(;c!=null&&o+d<s&&e[r][o+d]===c;)d++;c!=null&&d>=3&&t.push({cells:Array.from({length:d},(x,_)=>[o+_,r]),dir:"h"}),o+=d;}for(let r=0;r<s;r++)for(let o=0;o<n;){let c=e[o][r],d=1;for(;c!=null&&o+d<n&&e[o+d][r]===c;)d++;c!=null&&d>=3&&t.push({cells:Array.from({length:d},(x,_)=>[r,o+_]),dir:"v"}),o+=d;}return t}function ai(e){return mp(e)!==null}function mp(e){let t=e.length,n=e[0]?.length??0,s=(r,o)=>{let c=e[r[1]][r[0]];e[r[1]][r[0]]=e[o[1]][o[0]],e[o[1]][o[0]]=c;};for(let r=0;r<t;r++)for(let o=0;o<n;o++)for(let[c,d]of [[1,0],[0,1]]){if(o+c>=n||r+d>=t||e[r][o]===null||e[r+d][o+c]===null)continue;s([o,r],[o+c,r+d]);let x=Pr(e).size>0;if(s([o,r],[o+c,r+d]),x)return [[o,r],[o+c,r+d]]}return null}function Mo(e,t,n){if(Math.abs(t.col-n.col)+Math.abs(t.row-n.row)!==1)return false;let s=Un(e,t.col,t.row),r=Un(e,n.col,n.row);if(!s||!r)return false;for(let o of [s,r])if(o.hole||o.block||o.over||!o.piece)return false;return true}function Cr(e){let t=fs(e);for(let n=0;n<e.rows;n++)for(let s=0;s<e.cols;s++)for(let[r,o]of [[1,0],[0,1]]){let c={col:s,row:n},d={col:s+r,row:n+o};if(!Mo(e,c,d))continue;let x=e.cells[n][s].piece,_=e.cells[d.row][d.col].piece;if(x.color===An&&_.color===An)continue;if(x.special==="rainbow"||_.special==="rainbow")return [c,d];if(x.special&&_.special)return [c,d];let O=t[n][s];t[n][s]=t[d.row][d.col],t[d.row][d.col]=O;let M=Pr(t).size>0;if(t[d.row][d.col]=t[n][s],t[n][s]=O,M)return [c,d]}return null}function ii(e){let t=new Map;for(let n=0;n<e.rows;n++)for(let s=0;s<e.cols;s++){let r=e.cells[n][s].piece;r&&t.set(r.id,{col:s,row:n,piece:r});}return t}function hs(e,t){let n=0;for(let s of e.cells)for(let r of s)for(let o of [r.under,r.over,r.block])o?.id===t&&n++;return n}function li(e,t,n){if(!Mo(e,t,n))return null;let s=e.cells[t.row][t.col],r=e.cells[n.row][n.col],o=s.piece,c=r.piece;if(o.special==="rainbow"||c.special==="rainbow"||o.special&&c.special){s.piece=c,r.piece=o;let x=ri();return vp(e,x,n,o,t,c),fi(e,x),x}s.piece=c,r.piece=o;let d=lc(e,[t,n]);return d||(s.piece=o,r.piece=c,null)}function ms(e){return lc(e,[])}function ys(e,t,n="skill"){let s=ri(),r=t.filter(o=>ds(e,o.col,o.row)).map(o=>({...o,match:false}));return t[0]&&s.fired.push({...t[0],kind:n}),pi(e,s,r),fi(e,s),s}function ci(e,t){let n=[];if(t)return n;let s=Object.values(Dn).filter(r=>r.spreads);for(let r of s){let o=[];for(let x=0;x<e.rows;x++)for(let _=0;_<e.cols;_++)e.cells[x][_].under?.id===r.id&&o.push({col:_,row:x});if(o.length===0)continue;let c=[];for(let x of o)for(let[_,O]of ac){let M=Un(e,x.col+_,x.row+O);M&&!M.hole&&!M.block&&!M.under&&c.push({col:x.col+_,row:x.row+O});}if(c.length===0)continue;let d=ps(e,c);e.cells[d.row][d.col].under={id:r.id,hp:1},n.push(d);}return n}function di(e,t,n){let s=Dn[t];if(!s)return [];let r=[];for(let d=0;d<e.rows;d++)for(let x=0;x<e.cols;x++){let _=e.cells[d][x];_.hole||_.block||!_.piece||_.piece.color<0||_.piece.special||s.layer==="under"&&_.under||s.layer==="over"&&_.over||r.push({col:x,row:d});}let o=[],c=s.max===void 0?n:Math.max(0,s.max-hs(e,t));for(let d=0;d<Math.min(n,c)&&r.length>0;d++){let x=Math.floor(e.rnd()*r.length)%r.length,_=r.splice(x,1)[0],O=e.cells[_.row][_.col],M={id:t,hp:s.hp};s.layer==="under"?O.under=M:s.layer==="over"?O.over=M:(O.block=M,O.piece=null),o.push(_);}return o}function gs(e,t,n){let s=[];for(let o=0;o<e.rows;o++)for(let c=0;c<e.cols;c++){let d=e.cells[o][c].piece;d&&d.color>=0&&!d.special&&!e.cells[o][c].over&&s.push({col:c,row:o});}let r=[];for(let o=0;o<n&&s.length>0;o++){let c=s.splice(Math.floor(e.rnd()*s.length)%s.length,1)[0];e.cells[c.row][c.col].piece.special=e.rnd()<.5?"row":"col",r.push(c);}return r}function lc(e,t){let n=ic(fs(e));if(n.length===0)return null;let s=ri(),r=[];for(let d of n){let x=new Set(d.cells.map(([M,$])=>`${M},${$}`)),_=r.filter(M=>M.some($=>$.cells.some(([G,B])=>x.has(`${G},${B}`)))),O=[d,..._.flat()];for(let M of _)r.splice(r.indexOf(M),1);r.push(O);}let o=[],c=[];for(let d of r){let x=new Map;for(let $ of d)for(let[G,B]of $.cells)x.set(`${G},${B}`,{col:G,row:B});let _=d.reduce(($,G)=>Math.max($,G.cells.length),0),O=d.some($=>$.dir==="h")&&d.some($=>$.dir==="v"),M=or.filter($=>$.make!==null).find($=>$.make(_,O,d.find(G=>G.cells.length===_).dir));if(M){let $=t.find(B=>x.has(`${B.col},${B.row}`))??(O?yp(d):null)??gp(d.find(B=>B.cells.length===_)),G=e.cells[$.row][$.col].piece?.color??0;c.push({at:$,special:M.id,color:G});}for(let $ of x.values())o.push({...$,match:true});}pi(e,s,o);for(let d of c){let x=e.cells[d.at.row][d.at.col];x.piece||x.block||x.hole||(x.piece=cs(e,d.special==="rainbow"?oi:d.color,d.special),s.created.push({...d.at,piece:x.piece}));}return fi(e,s),s}function yp(e){let t=new Set;for(let n of e)for(let[s,r]of n.cells){let o=`${s},${r}`;if(t.has(o))return {col:s,row:r};t.add(o);}return null}var gp=e=>{let[t,n]=e.cells[Math.floor(e.cells.length/2)];return {col:t,row:n}};function pi(e,t,n){let s=new Set,r=new Set;for(;n.length>0;){let o=n.shift(),c=`${o.col},${o.row}`;if(!ds(e,o.col,o.row))continue;let d=e.cells[o.row][o.col];if(d.hole)continue;if(d.block){!o.match&&!r.has(c)&&(r.add(c),ls(t,d,"block",o));continue}if(s.has(c))continue;s.add(c);let x=d.piece;if(x){if(d.over){ls(t,d,"over",o);continue}if(x.color!==An){if(d.piece=null,t.cleared.push({...o,piece:x}),d.under&&(d.under.id==="slime"&&(t.slimeCleared=true),ls(t,d,"under",o)),o.match)for(let[_,O]of ac){let M=Un(e,o.col+_,o.row+O),$=`${o.col+_},${o.row+O}`;M?.block&&!r.has($)&&Dn[M.block.id]?.hitByNear&&(r.add($),ls(t,M,"block",{col:o.col+_,row:o.row+O}));}x.special&&bp(e,t,x.special,o,x.color,n);}}}}function ls(e,t,n,s){let r=t[n];r.hp-=1,e.hits.push({...s,id:r.id,hp:Math.max(0,r.hp)}),r.hp<=0&&(t[n]=null);}function bp(e,t,n,s,r,o){t.fired.push({...s,kind:n});let d=or.find(x=>x.id===n)?.shape??n;for(let x of ui(e,d,s,r))o.push({...x,match:false});}var bs=(e,t,n)=>ui(e,t,n,-1);function ui(e,t,n,s){let r=[],o=d=>{for(let x=0;x<e.cols;x++)r.push({col:x,row:d});},c=d=>{for(let x=0;x<e.rows;x++)r.push({col:d,row:x});};if(t==="row")o(n.row);else if(t==="col")c(n.col);else if(t==="cross")o(n.row),c(n.col);else if(t.startsWith("cross:")){let d=Number(t.slice(6));for(let x=-d;x<=d;x++)o(n.row+x),c(n.col+x);}else if(t.startsWith("area:")){let d=Number(t.slice(5));for(let x=-d;x<=d;x++)for(let _=-d;_<=d;_++)r.push({col:n.col+_,row:n.row+x});}else if(t==="color"){let d=s>=0?s:cc(e);for(let x=0;x<e.rows;x++)for(let _=0;_<e.cols;_++)e.cells[x][_].piece?.color===d&&r.push({col:_,row:x});}else if(t==="all")for(let d=0;d<e.rows;d++)o(d);return r.filter(d=>ds(e,d.col,d.row))}function cc(e){let t=new Map;for(let r of e.cells)for(let o of r)hp(o.piece)&&!o.block&&t.set(o.piece.color,(t.get(o.piece.color)??0)+1);let n=e.colors[0]??0,s=-1;for(let[r,o]of t)o>s&&(s=o,n=r);return n}function vp(e,t,n,s,r,o){let c=[],d=s.special??"plain",x=o.special??"plain",_=Jl.find(M=>M.a===d&&M.b===x||M.a===x&&M.b===d);e.cells[n.row][n.col].piece=null,e.cells[r.row][r.col].piece=null,t.cleared.push({...n,piece:s},{...r,piece:o}),t.fired.push({...r,kind:_?.effect??"combo"});let O=d==="rainbow"?o:s;if(_?.effect==="color"||_?.effect==="turn"){let M=O.color>=0?O.color:cc(e);for(let $=0;$<e.rows;$++)for(let G=0;G<e.cols;G++){let B=e.cells[$][G].piece;B?.color===M&&(_.effect==="turn"&&O.special&&O.special!=="rainbow"&&(B.special=O.special==="row"||O.special==="col"?e.rnd()<.5?"row":"col":O.special),c.push({col:G,row:$,match:false}));}}else for(let M of ui(e,_?.effect??"cross",r,O.color))c.push({...M,match:false});pi(e,t,c);}function fi(e,t){for(let n=0;n<4;n++){for(let r=0;r<e.cols;r++){let o=e.rows-1;for(;o>=0;){if(ti(e.cells[o][r])){o--;continue}let c=o;for(;c-1>=0&&!ti(e.cells[c-1][r]);)c--;let d=[];for(let O=o;O>=c;O--){let M=e.cells[O][r].piece;M&&d.push(M);}let x=o;for(let O of d)e.cells[x--][r].piece=O;let _=-1;for(;x>=c;x--){let O=c===xp(e,r)&&e.dropsToSpawn>0&&Sp(e)<2&&e.rnd()<.35,M=O?cs(e,An):cs(e,ps(e,e.colors));O&&e.dropsToSpawn--,e.cells[x][r].piece=M,t.spawned.push({col:r,row:x,piece:M,from:c+_--});}o=c-1;}}let s=false;for(let r=0;r<e.cols;r++){let o=kp(e,r);if(o<0)continue;let c=e.cells[o][r];c.piece?.color===An&&(c.piece=null,t.dropsCollected++,s=true);}if(!s)break}}var xp=(e,t)=>{for(let n=0;n<e.rows;n++)if(!ti(e.cells[n][t]))return n;return -1},kp=(e,t)=>{for(let n=e.rows-1;n>=0;n--)if(!e.cells[n][t].hole)return e.cells[n][t].block?-1:n;return -1},Sp=e=>{let t=0;for(let n of e.cells)for(let s of n)s.piece?.color===An&&t++;return t};var Ep="boss-spawned",Mp="boss-defeated",qn=b("match3.gem"),dc=b("match3.overlay"),hi=b("match3.layer"),pc=b("match3.backdrop"),uc=b("match3.part"),Ln=(e,t)=>{let n=Number(e.vars[t]??0);return Number.isFinite(n)?n:0},vs={id:"match3",version:2,engines:["phaser"],requires:["round"],params:{difficulty:{type:"number",default:.5,min:0,max:1},pieceScore:{type:"number",default:10,min:1,max:1e3,integer:true},coinEvery:{type:"number",default:8,min:1,max:100,integer:true},moveBonus:{type:"number",default:100,min:0,max:1e4,integer:true}},setup({world:e$1,params:t}){let n=k=>nn(t,k),s=e$1.rng.stream("match3"),r=wr(1,n("difficulty")),o=us(ss.plain,[0,1,2,3,4],()=>s.next(),Ua),c=Pt(),d="idle",x=new Map,_=new Map,O=null,M=null,$=null,G=null,B=0,Q=false,ae=0,q=0,ue=0,fe=0,ie=0,ve=false,se=false,Me={colors:new Map,drops:0},De=rs,ge=rs,oe=0,ce=0,Ae=false,Se=[],ee=null,xe=0,je=0,we=0,te=null,me=[],Ee=new Map,Re=()=>Lr.find(k=>k.id===e$1.vars["meta:hero"])??Lr[0],Ce=()=>os(Re().skill),Y=()=>r.def.kind==="battle",Le=()=>e$1.vars.reviving===true,Ye=()=>Zl*Math.pow(1.06,r.level-1)*(1+Ln(e$1,"meta:attack")),at=()=>1+Ln(e$1,"meta:skill"),_e=()=>Ce().mana;function Pt(){return Fn(Ie(e$1),o.cols,o.rows,{top:.33,bottom:.96,widthShare:.94})}let Ge=()=>c.cell,Xe=new Set,tt=(k,E,a,S,L=1)=>{Xe.add(k);let i=Ee.get(k);(i===void 0||!e$1.isAlive(i))&&(i=e$1.create(),e$1.set(i,uc,{id:k}),Ee.set(k,i)),e$1.set(i,e,{x:E,y:a,scale:L}),e$1.set(i,f,S);},ot=k=>{for(let[E,a]of [...Ee])E.startsWith(k)&&(e$1.destroy(a),Ee.delete(E));},ct=k=>{let E=Ge();if(k===oi)return {shape:"sprite",art:"m3_rainbow",w:E*.9,h:E*.9,depth:3};if(k===An)return {shape:"sprite",art:"m3_crate",w:E*.86,h:E*.86,depth:3};let a=So(k);return {shape:"sprite",art:a?.art??"gem1",w:E*.88,h:E*.88,color:a?.color??"piece1",depth:3}},it=(k,E,a,S,L)=>{let i=Qe(c,E,L),h=e$1.create();return e$1.set(h,qn,{id:k,col:E,row:a,kind:S}),e$1.set(h,e,{x:i.x,y:i.y}),e$1.set(h,f,ct(S)),x.set(k,h),h},bt=()=>{let k=ii(o);for(let[E,a]of [...x])k.has(E)||(e$1.destroy(a),x.delete(E));for(let[E,a]of k){let S=x.get(E);S===void 0&&(S=it(E,a.col,a.row,a.piece.color,a.row-o.rows));let L=e$1.need(S,qn);L.col=a.col,L.row=a.row,L.kind!==a.piece.color&&(L.kind=a.piece.color,e$1.set(S,f,ct(a.piece.color)));let i=a.piece.special&&a.piece.special!=="rainbow"?or.find(D=>D.id===a.piece.special):void 0,h=_.get(E);i&&h===void 0&&(h=e$1.create(),e$1.set(h,dc,{of:E}),e$1.set(h,e,{x:0,y:0}),_.set(E,h)),i&&h!==void 0&&e$1.set(h,f,{shape:"sprite",art:i.art,w:Ge()*.95,h:Ge()*.95,depth:4}),!i&&h!==void 0&&(e$1.destroy(h),_.delete(E));}for(let[E,a]of [..._])k.has(E)||(e$1.destroy(a),_.delete(E));Ke();},Ke=()=>{rt(e$1,hi);let k=Ge();for(let E=0;E<o.rows;E++)for(let a=0;a<o.cols;a++){let S=o.cells[E][a],L=Qe(c,a,E),i=(h,D,R,v=1)=>{if(!D)return;let g=Dn[D.id],T=e$1.create();e$1.set(T,hi,{key:h}),e$1.set(T,e,{x:L.x,y:L.y}),e$1.set(T,f,{shape:"sprite",art:D.hp>=2&&g?.id==="ice"?"m3_ice2":D.hp>=2&&g?.id==="stone"?"m3_stone2":g?.art??"m3_stone",w:k*v,h:k*v,depth:R});};i(`u${a},${E}`,S.under,1.5,.98),i(`o${a},${E}`,S.over,5,.98),i(`b${a},${E}`,S.block,3,.95);}},ze=()=>{rt(e$1,pc),Tt(e$1,"board",c.top+c.cell*o.rows*.35);let k=Ge(),E=Qe(c,(o.cols-1)/2,(o.rows-1)/2),a=k*.25,S=(L,i,h)=>{let D=e$1.create();e$1.set(D,pc,{i:0}),e$1.set(D,e,{x:L,y:i}),e$1.set(D,f,h);};S(E.x,E.y,{shape:"sprite",art:"panel",w:k*o.cols+a*2,h:k*o.rows+a*2,color:"panel",alpha:.9,depth:-10});for(let L=0;L<o.rows;L++)for(let i=0;i<o.cols;i++){if(o.cells[L][i].hole)continue;let h=Qe(c,i,L);S(h.x,h.y,{shape:"sprite",art:"cell",w:k-2,h:k-2,color:(L+i)%2?"panel":"ground",alpha:.85,depth:-9});}},_t=()=>{let k=Ie(e$1),E=k.h*.12,a=c.top-Ge()*.4,S=Math.max(40,(a-E)*.92);if((te===null||!e$1.isAlive(te))&&(te=e$1.create()),e$1.set(te,e,{x:k.w*.15,y:a-S/2}),e$1.set(te,f,{shape:"actor",cast:Re().cast,h:S,pose:"idle",facing:1,depth:20}),ee&&e$1.isAlive(ee.entity)){let L=S*ee.def.size;e$1.set(ee.entity,e,{x:k.w*.82,y:a-L/2});let i=e$1.need(ee.entity,f);i.shape==="actor"&&(i.h=L);}},Fe=()=>r.def.kind!=="goal"?[]:r.def.goals.map(k=>({goal:k,left:k.kind==="color"?Math.max(0,k.count-(Me.colors.get(k.color)??0)):k.kind==="clear"?hs(o,k.obstacle):k.kind==="drops"?Math.max(0,k.count-Me.drops):Math.max(0,k.value-Number(e$1.vars.score??0))})),Ct=()=>Fe().every(k=>k.left===0),Ht=k=>{let E=Ie(e$1).w*.07;if(k.kind==="color"){let a=So(k.color);return {shape:"sprite",art:a?.art??"gem1",w:E,h:E,color:a?.color??"piece1",depth:70}}return k.kind==="clear"?{shape:"sprite",art:Dn[k.obstacle]?.art??"m3_stone",w:E,h:E,depth:70}:k.kind==="drops"?{shape:"sprite",art:"m3_crate",w:E,h:E,depth:70}:{shape:"sprite",art:"coin",w:E,h:E,depth:70}},It=(k,E,a,S,L,i)=>{let h=Math.max(8,S*.09);tt(`${k}:bg`,E,a,{shape:"rect",w:S,h,color:"#000000",alpha:.5,radius:h/2,depth:69});let D=Math.max(1,(S-4)*Math.max(0,Math.min(1,L)));tt(`${k}:fill`,E-(S-4)/2+D/2,a,{shape:"rect",w:D,h:h-4,color:i,radius:(h-4)/2,depth:69.1});},tn=()=>{let k=Ie(e$1),E=Math.min(k.w,k.h),a=(v,g,T,C,P="text",z=E*.045)=>tt(v,g,T,{shape:"text",text:C,size:Math.round(z),color:P,bold:true,depth:70}),S=c.top-Ge()*.4,L=k.h*.085;me=[],Xe.clear();let i=k.w*.36,h=(L+S)/2+E*.02,D=E*.07,R=ce>=_e();if(me.push({id:"skill",x:i,y:h,r:D*1.15}),R&&tt("h:skill:glow",i,h,{shape:"circle",r:D*1.25,color:Ae?"coin":"secondary",alpha:.5+.3*Math.sin(e$1.time*7),depth:68.9}),tt("h:skill:bg",i,h,{shape:"circle",r:D,color:"panel",alpha:.95,depth:69}),tt("h:skill:i",i,h,{shape:"sprite",art:Ce().art,w:D*1.4,h:D*1.4,alpha:R?1:.45,depth:69.2}),It("h:mana",i,h+D*1.45,D*2.2,ce/_e(),"secondary"),Y()){let v=k.w*.15;if(It("h:hp",v,L,k.w*.24,De/ge,"accent"),a("h:hp:t",v+k.w*.12+E*.05,L,`${Math.ceil(De)}`,"text",E*.034),oe>0&&(tt("h:sh:i",v+k.w*.12+E*.05,L+E*.055,{shape:"sprite",art:"m3_shield",w:E*.045,h:E*.045,color:"primary",depth:70}),a("h:sh:t",v+k.w*.12+E*.11,L+E*.055,`${Math.ceil(oe)}`,"primary",E*.03)),ee){let g=k.w*.78;It("h:foe",g,L,k.w*.26,ee.hp/ee.max,"danger"),a("h:foe:t",g-k.w*.13-E*.05,L,`${Math.ceil(ee.hp)}`,"text",E*.034);let T=ko[ee.def.element];tt("h:foe:el",g+k.w*.13+E*.03,L,{shape:"circle",r:E*.018,color:T.color,depth:70});let C=(L+S)/2;tt("h:foe:in:bg",k.w*.62,C,{shape:"circle",r:E*.045,color:ee.in<=1?"danger":"panel",alpha:.95,depth:69}),a("h:foe:in",k.w*.62,C,String(ee.in),"text",E*.045);let P=r.def.kind==="battle"?r.def.enemies.length:0;for(let z=0;z<P;z++)tt(`h:q:${z}`,k.w*.8+(z-(P-1)/2)*E*.04,S+E*.005,{shape:"circle",r:E*.012,color:z<xe?"muted":z===xe?"danger":"text",alpha:.9,depth:70});}}else {a("h:moves",k.w*.5,L+E*.01,String(q),q<=3?"danger":"text",E*.075);let v=Fe(),g=k.w*.64,T=k.w*.11,C=(L+S)/2+E*.02;v.forEach((P,z)=>{let Z=g+z*T;tt(`h:g:${z}`,Z,C,Ht(P.goal)),a(`h:g:${z}:t`,Z,C+E*.06,P.left===0?"\u2713":String(P.left),P.left===0?"accent":"text",E*.038);});}e$1.vars.m3_phase=d,e$1.vars.m3_buttons=me.map(v=>`${v.id}@${Math.round(v.x)},${Math.round(v.y)}`).join(";");for(let[v,g]of [...Ee])!v.startsWith("h:")||Xe.has(v)||(e$1.destroy(g),Ee.delete(v));},pt=()=>{ee&&e$1.isAlive(ee.entity)&&et(e$1,ee.entity,"die");let k=Se.shift();if(k===void 0){ee=null;return}let E=Eo(k),a=e$1.create();e$1.set(a,e,{x:0,y:0}),e$1.set(a,f,{shape:"actor",cast:E.cast,variant:E.variant??s.int(0,99),h:50,pose:"idle",facing:-1,depth:20});let S=E.hp*r.enemyHp;ee={def:E,hp:S,max:S,in:E.every,rage:1,entity:a},_t(),E.boss&&(e$1.emit(Ep,{kind:k}),V(e$1,{kind:"shake",power:1})),w();},w=()=>{if(e$1.vars.moves=q,e$1.vars.hero_hp=Math.ceil(De),e$1.vars.mana=Math.floor(ce),e$1.vars.m3_goals=Fe().map(k=>`${k.goal.kind==="color"?`color${k.goal.color}`:k.goal.kind==="clear"?k.goal.obstacle:k.goal.kind}:${k.left}`).join(","),e$1.vars.m3_enemy=ee?`${ee.def.id}:${Math.ceil(ee.hp)}/${Math.ceil(ee.max)}:${ee.in}`:"",Y()){let k=r.def.kind==="battle"?r.def.enemies.length:1;e$1.vars.level_progress=Math.min(1,(xe+(ee?1-ee.hp/ee.max:0))/k);}else {let k=r.def;if(k.kind==="goal"){let E=k.goals.map(S=>S.kind==="color"||S.kind==="drops"?S.count:S.kind==="score"?S.value:1),a=Fe();e$1.vars.level_progress=a.reduce((S,L,i)=>S+(L.goal.kind==="clear"?L.left===0?1:0:1-L.left/E[i]),0)/Math.max(1,a.length);}}},f$1=()=>{rt(e$1,qn),rt(e$1,dc),rt(e$1,hi),rt(e$1,uc),x.clear(),_.clear(),Ee.clear(),ee&&e$1.isAlive(ee.entity)&&e$1.destroy(ee.entity),ee=null,r=wr(Ln(e$1,"meta:chapter")||1,n("difficulty"));let k=r.def;o=us(ss[k.board]??ss.plain,r.colors,()=>s.next(),Ua,k.kind==="goal"?k.drops??0:0),c=Pt(),ze(),d="idle",O=null,M=null,$=null,G=null,B=0,Q=false,ae=0,Me.colors.clear(),Me.drops=0,q=k.kind==="goal"?k.moves+Ln(e$1,"meta:moves"):0,ue=q,fe=0,ie=0,ve=false,se=false,ge=rs*Math.pow(1.06,r.level-1)*(1+Ln(e$1,"meta:health")),De=ge,oe=0,ce=0,Ae=false,xe=0,je=0,we=0,Se=k.kind==="battle"?[...k.enemies]:[],e$1.vars.m3_level=r.level,e$1.vars.m3_world=r.world,e$1.vars.m3_kind=k.kind,e$1.vars.coins=0,e$1.vars.score=0,e$1.vars.stars=0,e$1.vars.reviving=false,bt(),_t(),k.kind==="battle"&&pt(),w();},m=k=>{if(!k||!ee)return 1;let E=ko[k].beats.includes(ee.def.element),a=k===ee.def.element;return (E?1.5:a?.5:1)*(k===Re().element?1.25:1)},p=(k,E=0)=>{B++,Q||=k.slimeCleared,Me.drops+=k.dropsCollected;let a=E,S=0,L=0,i=Ge();for(let v of k.cleared){let g=v.piece;g.color>=0&&Me.colors.set(g.color,(Me.colors.get(g.color)??0)+1);let T=So(g.color),C=Qe(c,v.col,v.row);V(e$1,{kind:"burst",x:C.x,y:C.y,color:T?.color??"coin",n:6,size:i*.8}),ce=Math.min(_e(),ce+tc*(1+Ln(e$1,"meta:mana"))),!(!Y()||!T)&&(T.role==="attack"?a+=Ye()*m(T.element)*(1+.25*(B-1)):T.role==="heal"?S+=Ql*Math.pow(1.06,r.level-1)*(1+Ln(e$1,"meta:health")):T.role==="shield"&&(L+=ec*Math.pow(1.06,r.level-1)*(1+Ln(e$1,"meta:defense"))));}for(let v of k.fired){let g=Qe(c,v.col,v.row);V(e$1,{kind:"ring",x:g.x,y:g.y,color:"coin",size:i*2.4});}k.fired.length>0&&V(e$1,{kind:"shake",power:.4+Math.min(1,k.fired.length*.2)});for(let v of k.created)e$1.emit("special-made",{kind:v.piece.special});let h=k.cleared.length*n("pieceScore")*B+k.fired.length*30;qe(e$1,"score",h),ae+=k.cleared.length;let R=Math.floor(ae/n("coinEvery"))-Math.floor((ae-k.cleared.length)/n("coinEvery"));R>0&&(qe(e$1,"coins",R),e$1.emit("coin-collected",{value:R})),e$1.emit("pieces-cleared",{count:k.cleared.length,cascade:B}),Y()&&(S>0&&(De=Math.min(ge,De+S),te!==null&&V(e$1,{kind:"pop",x:e$1.need(te,e).x,y:e$1.need(te,e).y-i,text:`+${Math.round(S)}`,color:"accent",size:Math.round(i*.45)})),L>0&&(oe+=L),a>0&&ee&&y(a)),bt(),w();},y=k=>{if(!ee)return;ee.hp-=k,te!==null&&He(e$1,te,"attack"),He(e$1,ee.entity,"hit");let E=e$1.need(ee.entity,e);V(e$1,{kind:"pop",x:E.x,y:E.y-Ge(),text:`-${Math.round(k)}`,color:"danger",size:Math.round(Ge()*.5)}),!(ee.hp>0)&&(xe++,e$1.emit("enemy-defeated",{kind:ee.def.id}),l(),ee.def.boss&&(je++,qe(e$1,"coins",10),e$1.emit(Mp,{kind:ee.def.id}),V(e$1,{kind:"flash",color:"coin"})),pt());},l=()=>{if(!ee)return;et(e$1,ee.entity,"die");let k=ee.entity;e$1.need(k,f).alpha=.6,b(()=>{e$1.isAlive(k)&&e$1.destroy(k);});},u=[],b=k=>u.push({t:.9,f:k}),A=()=>{if(ci(o,Q),Q=false,B=0,bt(),r.def.kind==="goal"){if(Ct())return U();if(q<=0)return ye("out-of-moves")}else {if(!ee)return U();if(ee.in--,ee.in<=0){d="enemy",ie=.45;return}}I();},I=()=>{d="idle",Cr(o)===null&&(si(o),bt(),e$1.emit("board-shuffled",{})),w();},N=()=>{if(!ee)return I();let k=ee.def,E=r.enemyAttack*k.attack*ee.rage;ee.rage=1,He(e$1,ee.entity,"attack");let a=Math.min(oe,E);if(oe-=a,E=(E-a)*(1-Math.min(.6,Ln(e$1,"meta:defense"))),E>0){if(De-=E,te!==null){He(e$1,te,"hit");let L=e$1.need(te,e);V(e$1,{kind:"pop",x:L.x,y:L.y-Ge(),text:`-${Math.round(E)}`,color:"danger",size:Math.round(Ge()*.5)});}V(e$1,{kind:"shake",power:.8}),e$1.emit("player-hit",{hp:Math.ceil(De)});}let S=k.skill;if(S?.kind==="sow"?di(o,S.obstacle,S.count):S?.kind==="heal"?ee.hp=Math.min(ee.max,ee.hp+ee.max*S.share):S?.kind==="rage"&&(ee.rage=S.mult),ee.in=k.enrage&&ee.hp<ee.max*k.enrage?Math.max(1,k.every-1):k.every,bt(),De<=0)return De=0,ye("fell");I();},U=()=>{if(r.def.kind==="goal"){we=Math.min(q,12),e$1.vars.stars=Math.min(ve?1:3,Za(q/Math.max(1,ue),false)),qe(e$1,"score",q*n("moveBonus")),d="finale",ie=.3;return}e$1.vars.stars=Math.min(ve?1:3,Za(De/ge,true)),X("cleared");},X=k=>{if(se)return;se=true,d="over";let E=k==="cleared";E&&e$1.vars["meta:first_clear"]===true&&qe(e$1,"coins",r.firstClearGold),E||(e$1.vars.stars=0),e$1.vars.reviving=false,w(),e$1.emit(Bt,{reason:k,stats:{chapter:r.level,seconds:Math.floor(fe),cleared:E,stars:Number(e$1.vars.stars??0),coins:Number(e$1.vars.coins??0),bosses:je,kills:xe,battle:Y()}});},ye=k=>{if(e$1.vars.revive_ready===true&&!ve){e$1.vars.reviving=true,e$1.vars.m3_revive_reason=k,d="idle",e$1.emit(Gt,{});return}X(k);},ke=()=>{Le()&&(ve=true,e$1.vars.reviving=false,Y()?(De=ge*oc,ee&&(ee.in=ee.def.every)):q+=rc,V(e$1,{kind:"flash",color:"coin"}),I());},Ue=k=>{let E=o.cells[k.row]?.[k.col];if(!E||E.hole)return 0;let a=r.def.kind==="goal"?r.def.goals:[],S=0;for(let i of [E.under,E.over,E.block])i&&(S+=a.some(h=>h.kind==="clear"&&h.obstacle===i.id)?6:3);let L=E.piece;if(L&&!E.block){S+=1,L.special&&(S+=3),a.some(h=>h.kind==="color"&&h.color===L.color)&&(S+=2);let i=So(L.color);Y()&&i?.role==="attack"&&(S+=m(i.element));}if(a.some(i=>i.kind==="drops"))for(let i=0;i<k.row;i++)o.cells[i][k.col].piece?.color===An&&(S+=2);return S},st=k=>{let E={col:Math.floor(o.cols/2),row:Math.floor(o.rows/2)},a=-1;for(let S=0;S<o.rows;S++)for(let L=0;L<o.cols;L++){if(o.cells[S][L].hole)continue;let i=bs(o,k,{col:L,row:S}).reduce((h,D)=>h+Ue(D),0);i>a&&(a=i,E={col:L,row:S});}return E},Pe=()=>{let k=Ce();if(ce<k.mana||d!=="idle")return false;let E=at(),a=[];if(k.kind==="shape"){let i=E>=(k.bigAt??99)&&k.bigShape?k.bigShape:k.shape??"area:1",h=st(i);a=bs(o,i,h);let D=Qe(c,h.col,h.row);V(e$1,{kind:"ring",x:D.x,y:D.y,color:"coin",size:Ge()*4}),V(e$1,{kind:"flash",color:"coin"});}else a=gs(o,"line",Math.round((k.count??3)*E));ce=0,Ae=false,B=0,te!==null&&He(e$1,te,"attack"),e$1.emit("skill-cast",{id:k.id}),vt(e$1,"m3-skill");let S=Y()&&ee?k.damage*Ye()*E*m(Re().element):0,L=ys(o,a,k.id);return p(L,S),d="falling",true},re=k=>{if($){let E=o.cells[$.row]?.[$.col]?.piece?.id,a=E!==void 0?x.get(E):void 0;a!==void 0&&(e$1.need(a,e).scale=1);}if($=k,k){let E=o.cells[k.row]?.[k.col]?.piece?.id,a=E!==void 0?x.get(E):void 0;a!==void 0&&(e$1.need(a,e).scale=1.15);}},H=0,J=(k,E)=>{if(H=0,Ot(e$1),d!=="idle"||Le()||!Mo(o,k,E))return;re(null);let a=o.cells[k.row][k.col].piece.id,S=o.cells[E.row][E.col].piece.id;O=new Map([[a,E],[S,k]]),M=[k,E],d="swapping",vt(e$1,"match3-swap");};e$1.on(j,k=>{let E=k;if(!(!Ze(e$1)||Kn(e$1)||se||Le()))if(E.type==="tap"){if(me.find(L=>Math.hypot(E.x-L.x,E.y-L.y)<=L.r)?.id==="skill"){if(ce<_e())return;Pe()||(Ae=true);return}let S=Tn(c,E.x,E.y);if(!S||d!=="idle")return;$&&Math.abs($.col-S.col)+Math.abs($.row-S.row)===1?J($,S):re($&&$.col===S.col&&$.row===S.row?null:S);}else if(E.type==="press"){let a=Tn(c,E.x,E.y);G=a?{x:E.x,y:E.y,...a}:null;}else if(E.type==="move"&&G){let a=E.x-G.x,S=E.y-G.y;if(Math.max(Math.abs(a),Math.abs(S))<c.cell*.45)return;let L={col:G.col,row:G.row},i=Math.abs(a)>Math.abs(S)?{col:L.col+Math.sign(a),row:L.row}:{col:L.col,row:L.row+Math.sign(S)};G=null,J(L,i);}else E.type==="release"&&(G=null);}),e$1.on($t,()=>{f$1(),e$1.vars.level=r.level;}),e$1.on(Wt,f$1),e$1.on(Kt,ke),e$1.on(Ft,()=>{Le()&&(e$1.vars.reviving=false,X(Y()?"fell":"out-of-moves"));}),e$1.on(zt,k=>{ot("h:"),me=[],te!==null&&e$1.isAlive(te)&&et(e$1,te,k.reason==="cleared"?"dance":"die");}),e$1.on(k,()=>{c=Pt(),ze();for(let[k,E]of x){let a=e$1.need(E,qn);e$1.set(E,f,ct(a.kind));}bt(),_t();});let j$1=k=>{let E=true,a=Math.min(1,k*14),S=Ge();for(let L of e$1.query(qn)){let i=e$1.need(L,qn),h=O?.get(i.id)??i,D=e$1.need(L,e),R=Qe(c,h.col,h.row),v=R.x-D.x,g=R.y-D.y,T=e$1.need(L,f);Math.abs(v)<.5&&Math.abs(g)<.5?(D.x=R.x,D.y=R.y,T.alpha=1):(E=false,T.alpha=D.y<c.top-S*.3?0:1,D.x+=v*a,D.y+=Math.abs(g)>S*.3?Math.sign(g)*Math.min(Math.abs(g),S*12*k):g*a);}for(let[L,i]of _){let h=x.get(L);if(h===void 0)continue;let D=e$1.need(h,e);e$1.set(i,e,{x:D.x,y:D.y,scale:1+.06*Math.sin(e$1.time*6)}),e$1.need(i,f).alpha=e$1.need(h,f).alpha??1;}return E};e$1.addSystem({id:"match3",order:0,run(k,E){for(let a of [...u])a.t-=E,a.t<=0&&(u.splice(u.indexOf(a),1),a.f());if(!Ze(k)||se){j$1(E);return}if(fe+=E,tn(),!Le()&&j$1(E)){if(ie>0){ie-=E;return}if(d==="swapping"&&M){let[a,S]=M;M=null,O=null,B=0;let L=li(o,a,S);if(!L){let i=o.cells[a.row][a.col].piece.id,h=o.cells[S.row][S.col].piece.id;O=new Map([[i,S],[h,a]]),d="returning";return}r.def.kind==="goal"&&q--,p(L),d="falling";return}if(d==="returning"){if(O){O=null;return}d="idle";return}if(d==="falling"){let a=ms(o);if(a){p(a);return}A();return}if(d==="enemy"){N();return}if(d==="finale"){if(we>0){we--,q=Math.max(0,q-1);let S=gs(o,"line",1);S.length>0&&p(ys(o,S,"finale")),bt(),ie=.12;return}let a=ms(o);if(a){p(a);return}X("cleared");return}if(d==="idle"&&Ae){Pe();return}if(d==="idle"){if(H+=E,(!ht(k,"match3-swap")||H>7)&&!un(k)){let a=Cr(o);a&&ft(k,"swipe",Qe(c,a[0].col,a[0].row),Qe(c,a[1].col,a[1].row),c.cell*1.1);}if(ce>=_e()&&!ht(k,"m3-skill")&&!un(k)){let a=me.find(S=>S.id==="skill");a&&ft(k,"tap",a,void 0,c.cell*1.2);}}}}}),f$1();}};var _o=[{id:"garden",prefix:"item",levels:8,color:"accent",gen:"mg_gen_garden"},{id:"bake",prefix:"mg_bake",levels:7,color:"coin",gen:"mg_gen_bake"},{id:"jewel",prefix:"mg_jewel",levels:7,color:"primary",gen:"mg_gen_jewel"},{id:"potion",prefix:"mg_potion",levels:7,color:"secondary",gen:"mg_gen_potion"}],gn=e=>_o.find(t=>t.id===e),mi=3,fc=[0,.2,.35],hc=.06,rn={box:{id:"box",layer:"block",art:["mg_box","mg_box2"],neighbour:true,coins:1},fog:{id:"fog",layer:"cover",art:["mg_fog"],neighbour:true,hides:true},web:{id:"web",layer:"cover",art:["mg_web"],neighbour:true,mergeInto:true},bubble:{id:"bubble",layer:"cover",art:["mg_bubble"],neighbour:false,mergeInto:true,ttl:14}},yi=[{id:"joker",art:"mg_joker",effect:"joker"},{id:"scissors",art:"mg_scissors",effect:"split"},{id:"chest",art:"chest",effect:"chest",amount:3},{id:"battery",art:"mg_energy",effect:"energy",amount:6}],wn=e=>yi.find(t=>t.id===e),gi=[[1,.5],[2,.35],[3,.15]],bi={"-":{kind:"free"},".":{kind:"hole"},A:{kind:"gen",chain:0},B:{kind:"gen",chain:1},C:{kind:"gen",chain:2},D:{kind:"gen",chain:3},a:{kind:"item",chain:0,level:1},b:{kind:"item",chain:1,level:1},c:{kind:"item",chain:2,level:1},d:{kind:"item",chain:3,level:1},x:{kind:"block",obstacle:"box",hp:1},X:{kind:"block",obstacle:"box",hp:2},f:{kind:"cover",obstacle:"fog",levels:[1,2,2,3]},w:{kind:"cover",obstacle:"web",levels:[2,2,3]},u:{kind:"cover",obstacle:"bubble",levels:[3,3,4]},J:{kind:"special",special:"joker"},S:{kind:"special",special:"scissors"},K:{kind:"special",special:"chest"},E:{kind:"special",special:"battery"}},mc=7,yc=8,sr={start:["-------","-------","--a-a--","---A---","--a----","-------","-------","-------"],two:["-------","-------","-a---b-","--A-B--","-------","-------","-------","-------"],boxes:["-------","-------","--A-B--","-------","xxxxxxx","x--K--x","x-----x","xxxxxxx"],fog:["fffffff","fffffff","-------","--A-B--","-------","-------","xx-E-xx","xx---xx"],yard:["X-----X","-------","-A-J-B-","-------","xx---xx","fx---xf","ffx-xff","fffffff"],cellar:["XxxxxxX","x-----x","x-A-B-x","x-----x","x--K--x","xfffffx","xfffffx","XxxxxxX"],webs:["-------","-w---w-","--A-B--","---C---","-w---w-","-------","--www--","-------"],mine:["XX---XX","X--S--X","--A-C--","---B---","-------","ffXXXff","fff-fff","fffffff"],workshop:["w--E--w","-------","-A-B-C-","-------","xwxwxwx","-------","x--K--x","XXXXXXX"],vault:["XfffffX","fx---xf","f-A-B-f","f--J--f","f-C---f","fx---xf","XfffffX","XXXXXXX"],bubbles:["-------","-u---u-","--A-B--","---C---","-------","-u---u-","--uuu--","-------"],holes:["..---..",".-----.","--A-B--","---C---","---D---","--fff--",".-fff-.","..---.."],lab:["u-----u","-x-E-x-","--A-D--","-------","--B-C--","-w---w-","xxwuwxx","XXXXXXX"],terrace:["...-...","..---..",".-A-B-.","---J---","-C---D-","-u-x-u-","xxfffxx","XXfffXX"],four:["-------","-A---B-","-------","---J---","-------","-C---D-","xxxxxxx","XXXXXXX"],fortress:["ffXXXff","fx---xf","X-A-B-X","X--S--X","X-C-D-X","fx-K-xf","ffXXXff","fffffff"],maze:["-x-u-x-","-x---x-","-xA-Bx-","--w-w--","-xC-Dx-","-x---x-","-xfffx-","XXfffXX"],palace:["uXXXXXu","X--E--X","X-A-B-X","X--J--X","X-C-D-X","Xw---wX","XffKffX","XXXXXXX"]},vi=[{id:"upgrade",art:"mg_sk_merge",charge:10,effect:"upgrade",count:3},{id:"free",art:"mg_sk_free",charge:9,effect:"free",count:6},{id:"joker",art:"mg_sk_joker",charge:12,effect:"joker",count:2}],Ss=e=>vi.find(t=>t.id===e),Nr=[{id:"hero",cast:"hero",gems:0,skill:"upgrade"},{id:"hero2",cast:"hero2",gems:150,skill:"free"},{id:"hero3",cast:"hero3",gems:300,skill:"joker"}],Ne=(e,t,n,s,r=0,o=3,c)=>({board:e,chains:[...t].map(d=>({g:"garden",b:"bake",j:"jewel",p:"potion"})[d]??"garden"),orders:n,top:s,double:r,visible:o,...c?{slack:c}:{}}),xs=e=>({...e,vip:true}),qt=(e,t)=>({...e,extra:t}),Es=[Ne("start","g",3,3,0,1,1.6),Ne("start","g",4,3,0,2,1.5),Ne("two","gb",4,3,0,2,1.45),Ne("two","gb",5,4,0,2),Ne("boxes","gb",5,4,0,3),Ne("boxes","gb",6,4,.2,3),Ne("fog","gb",6,4,.2,3),Ne("yard","gb",6,5,.2,3),Ne("fog","gb",7,5,.3,3),qt(xs(Ne("cellar","gb",6,5,.3,3)),.92),qt(Ne("webs","gbj",5,4,.2,3),.92),qt(Ne("webs","gbj",6,4,.3,3),.92),qt(Ne("mine","gbj",6,5,.2,3),1.15),qt(Ne("workshop","gbj",6,5,.3,3),.9),qt(Ne("mine","gbj",7,5,.3,3),1.08),qt(Ne("yard","gj",6,5,.3,3),1.15),qt(Ne("workshop","gbj",7,5,.4,3),.92),Ne("vault","gbj",7,5,.3,3),qt(Ne("webs","jbg",7,6,.3,3),.92),xs(Ne("vault","gbj",7,6,.4,3)),qt(Ne("bubbles","gbp",6,5,.2,3),1.15),qt(Ne("bubbles","gbp",6,5,.3,3),1.12),qt(Ne("holes","gbpj",6,5,.3,3),.92),qt(Ne("lab","gbjp",7,5,.3,3),.92),Ne("holes","gbpj",7,5,.4,3),Ne("bubbles","pjg",7,6,.3,3),Ne("lab","gbjp",7,6,.4,3),Ne("terrace","gbjp",8,5,.4,3),Ne("holes","gbpj",8,6,.4,3),xs(Ne("terrace","gbjp",7,6,.4,3)),Ne("four","gbjp",7,5,.3,3),qt(Ne("fortress","gbjp",7,5,.4,3),1.06),Ne("maze","gbjp",7,6,.4,3),Ne("four","gbjp",8,6,.4,3),qt(Ne("fortress","gbjp",8,6,.5,3),1.06),Ne("palace","gbjp",8,6,.4,3),Ne("maze","gbjp",8,6,.5,3),Ne("lab","gbjp",9,6,.5,3),Ne("palace","gbjp",9,6,.5,3),qt(xs(Ne("fortress","gbjp",8,6,.5,3)),1.06)],Ir=10,gc=4,Ms=Es.length,xi=[0,18,45,75];function _p(e){let t=e>>>0;return ()=>{t=t+1831565813>>>0;let n=t;return n=Math.imul(n^n>>>15,n|1),n^=n+Math.imul(n^n>>>7,n|61),((n^n>>>14)>>>0)/4294967296}}var ks=e=>Math.pow(2,Math.max(0,e-1));function Rp(e,t){let n=_p(t*7919+13),s=[],r=e.chains;for(let o=0;o<e.orders;o++){let c=e.orders<=1?1:o/(e.orders-1),d=e.vip===true&&o===e.orders-1,x=2+Math.round(c*(e.top-2)),_=Math.max(2,Math.min(e.top,x-(n()<.3?1:0))),O=r[(o+Math.floor(n()*r.length))%r.length],M=[{chain:O,level:d?Math.min(e.top+1,(gn(O)?.levels??7)-1):_}];if(d||o>0&&r.length>1&&n()<e.double){let $=r[(r.indexOf(O)+1+Math.floor(n()*(r.length-1)))%r.length];M.push({chain:$,level:d?e.top:Math.max(2,_-1)});}s.push({wants:M,vip:d});}return s}function Tp(e){let t=r=>r.reduce((o,c)=>o+ks(c),0)/Math.max(1,r.length),n=gi.reduce((r,[o,c])=>r+ks(o)*c,0),s=0;for(let r of e.join("")){let o=bi[r];if(o){if(o.kind==="item")s+=ks(o.level);else if(o.kind==="cover")s+=t(o.levels)*(rn[o.obstacle]?.mergeInto&&!rn[o.obstacle]?.ttl?.5:.2);else if(o.kind==="special"){let c=wn(o.special);s+=c?.effect==="energy"?c.amount??0:c?.effect==="chest"?n*(c.amount??0):c?.effect==="joker"?3:2;}}}return s}function $r(e,t=.5){let n=Math.max(1,Math.min(Ms,Math.floor(e))),s=Es[n-1],r=Math.ceil(n/Ir),o=Rp(s,n),c=o.reduce((_,O)=>_+O.wants.reduce((M,$)=>M+ks($.level),0),0),d=Math.max(c*.4,c-Tp(sr[s.board]??[])*.7),x=(s.slack??1.32-(r-1)*.08-(n-(r-1)*Ir)*.006)*(1.1-t*.2)*(s.extra??1);return {level:n,world:r,index:n-(r-1)*Ir,def:s,boss:s.vip===true,orders:o,energy:Math.ceil(d*x),firstClearGold:(s.vip?120:50)+(n-1)*10}}var ki=e=>xi[Math.ceil(Math.max(1,e)/Ir)-1]??0,_s=e=>e>=.2?3:e>=.08?2:1,Rs=15,Si="kit-merge",Ei=[{id:"Energy",var:"meta:energy",art:"mg_energy",color:"coin",perLevel:2,unit:"",maxLevel:15,price:40,growth:.12},{id:"GenLuck",var:"meta:luck",art:"mg_joker",color:"secondary",perLevel:2,unit:"%",maxLevel:15,price:45,growth:.12},{id:"Reward",var:"meta:reward",art:"coin",color:"coin",perLevel:5,unit:"%",maxLevel:20,price:40,growth:.12},{id:"SkillPower",var:"meta:skill",art:"mg_sk_merge",color:"secondary",perLevel:8,unit:"%",maxLevel:10,price:50,growth:.12},{id:"Charge",var:"meta:charge",art:"mg_sk_free",color:"primary",perLevel:5,unit:"%",maxLevel:10,price:50,growth:.12}],bc={game:"merge",character:Si,stats:Ei,heroes:Nr,levels:Ms,firstClearGold:e=>$r(e).firstClearGold,stars:3,starsToEnter:ki};var Ts=e=>({kind:"none",at:e,hits:[],coins:0}),Pn=e=>gn(e)?.levels??8,Mi=(e,t,n,s,r="")=>({id:e.nextId++,kind:t,chain:n,level:s,special:r}),Ro=(e,t,n)=>Mi(e,"item",t,n),xc=(e,t)=>Mi(e,"special","",0,t);function _i(e,t,n){let s=Math.max(...e.map(c=>c.length)),r={cols:s,rows:e.length,cells:[],chains:t,nextId:1,rand:n},o=c=>t[c]??null;for(let c=0;c<e.length;c++){let d=[];for(let x=0;x<s;x++){let _=bi[e[c][x]??"-"]??{kind:"free"},O={hole:_.kind==="hole",thing:null,cover:null,block:null};if(_.kind==="gen"){let M=o(_.chain);M&&(O.thing=Mi(r,"gen",M,1));}else if(_.kind==="item"){let M=o(_.chain);M&&(O.thing=Ro(r,M,_.level));}else if(_.kind==="block")O.block={id:_.obstacle,hp:_.hp};else if(_.kind==="cover"){let M=t[Math.floor(n()*t.length)]??"garden",$=Math.min(Pn(M)-1,_.levels[Math.floor(n()*_.levels.length)]??1);O.thing=Ro(r,M,$);let G=rn[_.obstacle];O.cover={id:_.obstacle,hp:1,...G?.ttl?{ttl:G.ttl}:{}};}else _.kind==="special"&&(O.thing=xc(r,_.special));d.push(O);}r.cells.push(d);}return r}var ar=(e,t)=>e.cells[t.row]?.[t.col],kc=(e,t)=>t.col>=0&&t.row>=0&&t.col<e.cols&&t.row<e.rows,Sc=e=>!!e&&!e.hole&&!e.thing&&!e.block,Br=(e,t)=>{let n=ar(e,t);return !!n&&!!n.thing&&!n.cover&&!n.block};function bn(e){let t=[];for(let n=0;n<e.rows;n++)for(let s=0;s<e.cols;s++){let r=e.cells[n][s];r.thing&&t.push({at:{col:s,row:n},thing:r.thing,cell:r});}return t}var Op=e=>e.cells.reduce((t,n)=>t+n.filter(Sc).length,0);function Os(e,t){let n=null,s=1/0;for(let r=0;r<e.rows;r++)for(let o=0;o<e.cols;o++){if(!Sc(e.cells[r][o]))continue;let c=Math.hypot(o-t.col,(r-t.row)*1.05);c<s-1e-9&&(s=c,n={col:o,row:r});}return n}function Ds(e,t){let n=t?.thing;return !t||!n||t.block||n===e||e.kind!==n.kind||e.kind==="special"||t.cover&&!rn[t.cover.id]?.mergeInto||e.chain!==n.chain||e.level!==n.level?false:e.kind==="gen"?e.level<mi:e.level<Pn(e.chain)}function vc(e,t){let n=[],s=0;for(let[r,o]of [[1,0],[-1,0],[0,1],[0,-1]]){let c={col:t.col+r,row:t.row+o};if(!kc(e,c))continue;let d=e.cells[c.row][c.col];for(let x of ["block","cover"]){let _=d[x];if(!_)continue;let O=rn[_.id];if(!O?.neighbour)continue;_.hp--;let M=_.hp<=0;M&&(d[x]=null,s+=O.coins??0),n.push({at:c,id:_.id,gone:M,revealed:M&&!!O.hides});}}return {hits:n,coins:s}}function Ec(e,t,n){if(!Br(e,t)||!kc(e,n)||t.col===n.col&&t.row===n.row)return Ts(t);let s=ar(e,t),r=ar(e,n),o=s.thing;if(r.hole||r.block)return Ts(t);if(Ds(o,r)){let _=r.thing;s.thing=null,_.level++;let O=r.cover?.id;r.cover=null;let M=vc(e,n);return {kind:"merge",at:n,level:_.level,...O?{freed:O}:{},hits:M.hits,coins:M.coins}}let c=o.kind==="special"?wn(o.special):void 0,d=r.thing,x=!r.cover||!!rn[r.cover.id]?.mergeInto;if(c?.effect==="joker"&&d?.kind==="item"&&x&&d.level<Pn(d.chain)){s.thing=null,d.level++;let _=r.cover?.id;r.cover=null;let O=vc(e,n);return {kind:"joker",at:n,level:d.level,..._?{freed:_}:{},hits:O.hits,coins:O.coins}}if(c?.effect==="split"&&d?.kind==="item"&&!r.cover&&d.level>=2){s.thing=null;let _=Os(e,n);return _?(d.level--,e.cells[_.row][_.col].thing=Ro(e,d.chain,d.level),{kind:"split",at:n,level:d.level,second:_,hits:[],coins:0}):(s.thing=o,Ts(t))}return d?r.cover?Ts(t):(s.thing=d,r.thing=o,{kind:"swap",at:n,hits:[],coins:0}):(s.thing=null,r.thing=o,{kind:"move",at:n,hits:[],coins:0})}function Mc(e,t,n=0){let s=ar(e,t)?.thing;if(!s||s.kind!=="gen"||ar(e,t).cover)return null;let r=Os(e,t);if(!r)return null;let o=e.rand(),c=Math.max(1,Math.min(mi,s.level)),d=c>=3&&o<hc?3:o<(fc[c-1]??0)+n?2:1,x=Ro(e,s.chain,Math.min(d,Pn(s.chain)));return e.cells[r.row][r.col].thing=x,{at:r,thing:x,burst:Dp(e)}}function Dp(e){let t=[];for(let n=0;n<e.rows;n++)for(let s=0;s<e.cols;s++){let r=e.cells[n][s];r.cover?.ttl!==void 0&&(r.cover.ttl--,!(r.cover.ttl>0)&&(r.cover=null,r.thing=null,t.push({col:s,row:n})));}return t}var Ap=e=>{let t=0;for(let[n,s]of gi)if(t+=s,e<t)return n;return 1};function _c(e,t){let n=ar(e,t),s=n?.thing;if(!n||!s||s.kind!=="special"||n.cover)return null;let r=wn(s.special);if(r?.effect==="energy")return n.thing=null,{energy:r.amount??5,spawned:[]};if(r?.effect!=="chest")return null;n.thing=null;let o=[];for(let c=0;c<(r.amount??3);c++){let d=Os(e,t);if(!d)break;let x=e.chains[Math.floor(e.rand()*e.chains.length)]??_o[0].id,_=Ro(e,x,Math.min(Pn(x),Ap(e.rand())));e.cells[d.row][d.col].thing=_,o.push({at:d,thing:_});}return o.length===0?(n.thing=s,null):{energy:0,spawned:o}}function Rc(e,t={}){let n=bn(e).filter(o=>Br(e,o.at)&&(o.thing.kind==="item"||t.gens!==false&&o.thing.kind==="gen")),s=null,r=1/0;for(let o of n)for(let c=0;c<e.rows;c++)for(let d=0;d<e.cols;d++){let x=e.cells[c][d];if(!Ds(o.thing,x))continue;let _=(o.thing.kind==="gen"?100:0)+o.thing.level-(x.cover?.5:0);_<r&&(r=_,s=[o.at,{col:d,row:c}]);}return s}function ir(e,t){let n=new Set,s=[],r=bn(e);for(let o of t){let c=r.find(d=>d.thing.kind==="item"&&!d.cell.cover&&!n.has(d.thing.id)&&d.thing.chain===o.chain&&d.thing.level===o.level);if(!c)return null;n.add(c.thing.id),s.push(c.at);}return s}function Ri(e,t){let n=ar(e,t);if(!n?.thing)return null;let s=n.thing;return n.thing=null,s}function Ti(e,t,n){let s=Os(e,n),r=xc(e,t);if(s)return e.cells[s.row][s.col].thing=r,{at:s,thing:r};let o=bn(e).filter(c=>c.thing.kind==="item"&&!c.cell.cover).sort((c,d)=>c.thing.level-d.thing.level)[0];return o?(o.cell.thing=r,{at:o.at,thing:r}):null}function Tc(e){let t=bn(e),n=Op(e)>0;for(let s of t){if(s.thing.kind!=="special"||s.cell.cover)continue;let r=wn(s.thing.special);if(r?.effect==="energy"||r?.effect==="chest"&&n||r?.effect==="joker"&&t.some(o=>o.thing.kind==="item"&&(!o.cell.cover||rn[o.cell.cover.id]?.mergeInto)&&o.thing.level<Pn(o.thing.chain))||r?.effect==="split"&&n&&t.some(o=>o.thing.kind==="item"&&!o.cell.cover&&o.thing.level>=2))return true}return false}function Oc(e,t,n){let s=[];for(let r=0;r<t;r++){let o=bn(e).filter(x=>x.thing.kind==="item"&&!x.cell.cover&&x.thing.level<Pn(x.thing.chain)&&!s.some(_=>_.col===x.at.col&&_.row===x.at.row));if(o.length===0)break;let c=x=>n.some(_=>_.chain===x.thing.chain&&_.level===x.thing.level+1);o.sort((x,_)=>Number(c(_))-Number(c(x))||x.thing.level-_.thing.level);let d=o[0];d.thing.level++,s.push(d.at);}return s}var Oi=90,To=b("merge.item"),Lc=b("merge.order"),Di=b("merge.layer"),Dc=b("merge.backdrop"),Ac=b("merge.part"),zr=b("merge.customer"),Wr=(e,t)=>{let n=Number(e.vars[t]??0);return Number.isFinite(n)?n:0},As={id:"merge",version:2,engines:["phaser"],requires:["round"],params:{difficulty:{type:"number",default:.5,min:0,max:1},orderReward:{type:"number",default:1,min:0,max:100},mergeScore:{type:"number",default:10,min:1,max:1e3,integer:true},energyBonus:{type:"number",default:20,min:0,max:1e4,integer:true}},setup({world:e$1,params:t}){let n=p=>nn(t,p),s=e$1.rng.stream("merge"),r=$r(1,n("difficulty")),o=_i(sr.start,["garden"],()=>s.next()),c=ee(),d=new Map,x=new Map,_=null,O=[],M=[],$=0,G=0,B=0,Q=0,ae=0,q=0,ue=0,fe=0,ie=false,ve=false,se=null,Me=[],De=()=>Nr.find(p=>p.id===e$1.vars["meta:hero"])??Nr[0],ge=()=>Ss(De().skill),oe=()=>e$1.vars.reviving===true,ce=()=>ge().charge,Ae=()=>Wr(e$1,"meta:luck"),Se=()=>O.flatMap(p=>p.order.wants);function ee(){return Fn(Ie(e$1),o.cols,o.rows,{top:.3,bottom:.86,widthShare:.94})}let xe=()=>c.cell,je=new Set,we=(p,y,l,u,b=1)=>{je.add(p);let A=x.get(p);(A===void 0||!e$1.isAlive(A))&&(A=e$1.create(),e$1.set(A,Ac,{id:p}),x.set(p,A)),e$1.set(A,e,{x:y,y:l,scale:b}),e$1.set(A,f,u);},te=()=>{for(let[p,y]of [...x])je.has(p)||(e$1.destroy(y),x.delete(p));},me=p=>{if(p.kind==="special")return wn(p.special)?.art??"chest";let y=gn(p.chain);return p.kind==="gen"?y?.gen??"chest":`${y?.prefix??"item"}${Math.min(p.level,y?.levels??8)}`},Ee=p=>{let y=xe(),l=p.kind==="gen"?.94:.92;return {shape:"sprite",art:me(p),w:y*l,h:y*l,depth:3}},Re=()=>{let p=new Map(bn(o).map(y=>[y.thing.id,y]));for(let[y,l]of [...d])p.has(y)||(e$1.destroy(l),d.delete(y));for(let[y,l]of p){let u=d.get(y);if(u===void 0){u=e$1.create();let I=Qe(c,l.at.col,l.at.row);e$1.set(u,e,{x:I.x,y:I.y,scale:.3}),d.set(y,u);}e$1.set(u,To,{id:y,col:l.at.col,row:l.at.row});let b=Ee(l.thing),A=l.cell.cover&&rn[l.cell.cover.id]?.hides;e$1.set(u,f,{...b,alpha:A?0:1,depth:_?.id===y?30:3});}Ce(),ct();},Ce=()=>{rt(e$1,Di);let p=xe();for(let y=0;y<o.rows;y++)for(let l=0;l<o.cols;l++){let u=o.cells[y][l],b=Qe(c,l,y);for(let[A,I,N]of [["b",u.block,3],["c",u.cover,5]]){if(!I)continue;let U=rn[I.id],X=U?.art[Math.min(U.art.length,Math.max(1,I.hp))-1]??"mg_box",ye=e$1.create();e$1.set(ye,Di,{key:`${A}${l},${y}`}),e$1.set(ye,e,{x:b.x,y:b.y}),e$1.set(ye,f,{shape:"sprite",art:X,w:p*.98,h:p*.98,depth:N,alpha:I.id==="bubble"&&(I.ttl??99)<=3?.55+.4*Math.abs(Math.sin(e$1.time*6)):1});}}},Y=()=>{rt(e$1,Dc),Tt(e$1,"board",c.top+c.cell*o.rows*.3);let p=xe(),y=Qe(c,(o.cols-1)/2,(o.rows-1)/2),l=p*.22,u=(b,A,I)=>{let N=e$1.create();e$1.set(N,Dc,{i:0}),e$1.set(N,e,{x:b,y:A}),e$1.set(N,f,I);};u(y.x,y.y,{shape:"sprite",art:"panel",w:p*o.cols+l*2,h:p*o.rows+l*2,color:"panel",alpha:.9,depth:-10});for(let b=0;b<o.rows;b++)for(let A=0;A<o.cols;A++){if(o.cells[b][A].hole)continue;let I=Qe(c,A,b);u(I.x,I.y,{shape:"sprite",art:"cell",w:p-3,h:p-3,color:(b+A)%2?"panel":"ground",alpha:.85,depth:-9});}},Le=()=>Math.max(1,r.def.visible),Ye=p=>{let y=Ie(e$1),l=Le(),u=Math.min(y.w*.3,xe()*2.6),b=y.w/2+(p-(l-1)/2)*(u+xe()*.2),A=u*(l>2?.62:.72),I=y.h*.118+A/2,N=c.top-xe()*.18;return {x:b,y:I,w:u,h:A,feet:N}},at=(p,y,l)=>{let u=Ye(p),b=Math.max(24,(u.feet-(u.y+u.h/2))*1.05),A=l?-b:u.x,I=e$1.create();return e$1.set(I,e,{x:A,y:u.feet-b/2}),e$1.set(I,f,{shape:"actor",cast:y.vip?"boss":"helper",variant:y.vip?7:s.int(0,99),h:b,pose:l?"walk":"idle",facing:1,speed:Oi,depth:6}),e$1.set(I,zr,{slot:p,to:u.x,leaving:-1}),I},_e=p=>{for(let y=0;y<Le();y++){if(O.some(u=>u.slot===y))continue;let l=M.shift();l&&O.push({order:l,slot:y,customer:at(y,l,p)});}},Pt=(p,y)=>{for(let l of p.query(zr)){let u=p.need(l,zr),b=p.need(l,e),A=p.need(l,f);if(A.shape!=="actor")continue;if(u.leaving>=0){u.leaving+=y,u.leaving>.7&&(A.pose="walk",A.facing=1,b.x+=Oi*1.4*y);continue}let I=u.to-b.x;Math.abs(I)>1?(b.x+=Math.sign(I)*Math.min(Math.abs(I),Oi*2*y),A.pose="walk",A.facing=I>0?1:-1):A.pose==="walk"&&(b.x=u.to,A.pose="idle");}},Ge=p=>Math.max(1,Math.round(p.wants.reduce((y,l)=>y+l.level,0)*n("orderReward")*(p.vip?3:1)*(1+Wr(e$1,"meta:reward")))),Xe=p=>{let y=ir(o,p.order.wants);if(!y)return false;let l=Ye(p.slot);for(let A of y){let I=Qe(c,A.col,A.row);V(e$1,{kind:"burst",x:I.x,y:I.y,color:"coin",n:8,size:xe()*.8}),Ri(o,A);}let u=Ge(p.order);qe(e$1,"coins",u),qe(e$1,"score",u*25),V(e$1,{kind:"burst",x:l.x,y:l.y,color:"coin",n:14,size:l.w*.8}),V(e$1,{kind:"pop",x:l.x,y:l.y-l.h*.5,text:`+${u}`,color:"coin",size:Math.round(l.h*.42)}),e$1.emit("coin-collected",{value:u}),e$1.emit("order-filled",{reward:u,vip:p.order.vip}),vt(e$1,"merge-order"),ae++;let b=e$1.get(p.customer,zr);return b&&(b.leaving=0,He(e$1,p.customer,"cheer"),rr(e$1,p.customer,2.4)),O=O.filter(A=>A!==p),_e(true),Re(),O.length===0&&M.length===0&&bt(),true},tt=(p,y,l,u,b,A)=>{let I=Math.max(8,u*.11);we(`${p}:bg`,y,l,{shape:"rect",w:u,h:I,color:"#000000",alpha:.5,radius:I/2,depth:69});let N=Math.max(1,(u-4)*Math.max(0,Math.min(1,b)));we(`${p}:fill`,y-(u-4)/2+N/2,l,{shape:"rect",w:N,h:I-4,color:A,radius:(I-4)/2,depth:69.1});},ot=()=>{let p=Ie(e$1),y=Math.min(p.w,p.h),l=xe(),u=(H,J,j,k,E="text",a=y*.045,S=70)=>we(H,J,j,{shape:"text",text:k,size:Math.round(a),color:E,bold:true,depth:S});Me=[],je.clear();let b=p.h*.085;we("h:en:i",p.w*.1,b,{shape:"sprite",art:"mg_energy",w:y*.07,h:y*.07,depth:70}),u("h:en",p.w*.1+y*.075,b,String($),$<=3&&B===0?"danger":"text",y*.06),B>0&&u("h:free",p.w*.1+y*.17,b,`+${B}`,"secondary",y*.04);let A=O.length+M.length;we("h:ord:i",p.w*.8,b,{shape:"sprite",art:"ticket",w:y*.075,h:y*.05,color:"panel",depth:70}),u("h:ord",p.w*.8+y*.08,b,String(A),"text",y*.05);for(let H of O){let J=Ye(H.slot);ir(o,H.order.wants)!==null&&we(`h:t${H.slot}:glow`,J.x,J.y,{shape:"rect",w:J.w*1.08,h:J.h*1.14,color:"accent",alpha:.45+.3*Math.sin(e$1.time*6),radius:J.h*.2,depth:7.9}),we(`h:t${H.slot}`,J.x,J.y,{shape:"sprite",art:"ticket",w:J.w,h:J.h,color:H.order.vip?"coin":"panel",depth:8});let k=H.order.wants.length,E=Math.min(J.h*.58,J.w*.86/k);H.order.wants.forEach((a,S)=>{let L=J.x+(S-(k-1)/2)*E*1.05,i=J.y-J.h*.12,h=gn(a.chain);we(`h:t${H.slot}:${S}`,L,i,{shape:"sprite",art:`${h?.prefix??"item"}${Math.min(a.level,h?.levels??8)}`,w:E,h:E,depth:8.1}),ir(o,[a])?u(`h:t${H.slot}:${S}:ok`,L+E*.32,i+E*.32,"\u2713","accent",E*.42,8.2):u(`h:t${H.slot}:${S}:lv`,L+E*.34,i+E*.34,String(a.level),"coin",E*.3,8.2);}),we(`h:t${H.slot}:c`,J.x-J.w*.1,J.y+J.h*.3,{shape:"sprite",art:"coin",w:J.h*.19,h:J.h*.19,depth:8.1}),u(`h:t${H.slot}:cv`,J.x+J.w*.07,J.y+J.h*.3,String(Ge(H.order)),"coin",J.h*.2,8.1),Me.push({id:`order${H.slot}`,x:J.x,y:J.y,r:J.w*.5});}let I=Se();for(let H of bn(o)){if(H.cell.cover&&rn[H.cell.cover.id]?.hides)continue;let J=d.get(H.thing.id);if(J===void 0)continue;let j=e$1.need(J,e),k=_?.id===H.thing.id?31:6;if(H.thing.kind==="gen")for(let E=0;E<H.thing.level;E++)we(`h:i${H.thing.id}:s${E}`,j.x+(E-(H.thing.level-1)/2)*l*.2,j.y+l*.38,{shape:"circle",r:l*.075,color:"coin",depth:k});else H.thing.kind==="item"&&(I.some(E=>E.chain===H.thing.chain&&E.level===H.thing.level)&&(we(`h:i${H.thing.id}:ok`,j.x+l*.3,j.y-l*.3,{shape:"circle",r:l*.12,color:"accent",depth:k}),u(`h:i${H.thing.id}:okt`,j.x+l*.3,j.y-l*.3,"\u2713","#ffffff",l*.18,k+.1)),u(`h:i${H.thing.id}:lv`,j.x+l*.3,j.y+l*.3,String(H.thing.level),"coin",l*.22,k));}let N=c.top+l*o.rows+(p.h-(c.top+l*o.rows))*.5,U=Math.min(y*.075,(p.h-(c.top+l*o.rows))*.38),X=p.w*.3,ye=Q>=ce();Me.push({id:"skill",x:X,y:N,r:U*1.2}),ye&&we("h:skill:glow",X,N,{shape:"circle",r:U*1.28,color:"secondary",alpha:.5+.3*Math.sin(e$1.time*7),depth:68.9}),we("h:skill:bg",X,N,{shape:"circle",r:U,color:"panel",alpha:.95,depth:69}),we("h:skill:i",X,N,{shape:"sprite",art:ge().art,w:U*1.4,h:U*1.4,alpha:ye?1:.45,depth:69.2}),tt("h:charge",X+U*2.6,N,U*2.4,Q/ce(),"secondary");let ke=p.w*.88;Me.push({id:"bin",x:ke,y:N,r:U*1.1});let Ue=_?d.get(_.id):void 0,st=Ue!==void 0?e$1.need(Ue,e):null,Pe=st!==null&&Math.hypot(st.x-ke,st.y-N)<U*1.3;we("h:bin:bg",ke,N,{shape:"circle",r:U,color:Pe?"danger":"panel",alpha:.95,depth:69}),we("h:bin",ke,N,{shape:"sprite",art:"mg_bin",w:U*1.3,h:U*1.3,alpha:_?1:.7,depth:69.2}),(se===null||!e$1.isAlive(se))&&(se=e$1.create(),e$1.set(se,f,{shape:"actor",cast:De().cast,h:U*2.6,pose:"idle",facing:1,depth:20})),e$1.set(se,e,{x:p.w*.11,y:N-U*.1});let re=e$1.need(se,f);re.shape==="actor"&&(re.h=U*2.6),e$1.vars.mg_buttons=Me.map(H=>`${H.id}@${Math.round(H.x)},${Math.round(H.y)}`).join(";"),te();},ct=()=>{e$1.vars.energy=$,e$1.vars.mg_free=B,e$1.vars.mg_charge=Math.floor(Q),e$1.vars.orders_left=O.length+M.length,e$1.vars.mg_orders=O.slice().sort((p,y)=>p.slot-y.slot).map(p=>p.order.wants.map(y=>`${y.chain}:${y.level}`).join("+")).join("|"),e$1.vars.level_progress=r.orders.length?ae/r.orders.length:0;},it=()=>{rt(e$1,To),rt(e$1,Di),rt(e$1,Ac),rt(e$1,zr),d.clear(),x.clear(),se!==null&&e$1.isAlive(se)&&e$1.destroy(se),se=null,r=$r(Wr(e$1,"meta:chapter")||1,n("difficulty")),o=_i(sr[r.def.board]??sr.start,r.def.chains,()=>s.next()),c=ee(),Y(),_=null,O=[],M=[...r.orders],$=Math.max(0,r.energy+Math.round(Wr(e$1,"meta:energy"))),G=$,B=0,Q=0,ae=0,q=0,ue=0,fe=0,ie=false,ve=false,e$1.vars.mg_level=r.level,e$1.vars.mg_world=r.world,e$1.vars.coins=0,e$1.vars.score=0,e$1.vars.stars=0,e$1.vars.reviving=false,_e(false),Re();},bt=()=>{ve||(e$1.vars.stars=Math.min(ie?1:3,_s($/Math.max(1,G))),qe(e$1,"score",$*n("energyBonus")),V(e$1,{kind:"flash",color:"coin"}),Ke("cleared"));},Ke=p=>{if(ve)return;ve=true;let y=p==="cleared";y&&e$1.vars["meta:first_clear"]===true&&qe(e$1,"coins",r.firstClearGold),y||(e$1.vars.stars=0),e$1.vars.reviving=false,ct(),e$1.emit(Bt,{reason:p,stats:{chapter:r.level,seconds:Math.floor(ue),cleared:y,stars:Number(e$1.vars.stars??0),coins:Number(e$1.vars.coins??0),orders:ae,merges:q}});},ze=()=>{if(e$1.vars.revive_ready===true&&!ie){e$1.vars.reviving=true,e$1.emit(Gt,{});return}Ke("out-of-energy");},_t=()=>{oe()&&(ie=true,e$1.vars.reviving=false,$+=Rs,Ti(o,"joker",{col:Math.floor(o.cols/2),row:Math.floor(o.rows/2)}),V(e$1,{kind:"flash",color:"coin"}),Re());},Fe=()=>{if($>0||B>0||Q>=ce()||O.some(l=>ir(o,l.order.wants))||Tc(o))return true;let p=[...Se(),...M.flatMap(l=>l.wants)],y=bn(o);for(let l of y)if(!(!Br(o,l.at)||l.thing.kind!=="item")&&p.some(u=>u.chain===l.thing.chain&&u.level>l.thing.level)&&y.some(u=>Ds(l.thing,u.cell)))return true;return false},Ct=p=>{let y=xe(),l=Qe(c,p.at.col,p.at.row);if(p.kind==="merge"||p.kind==="joker"){let u=o.cells[p.at.row][p.at.col].thing,b=gn(u.chain)?.color??"coin";V(e$1,{kind:"ring",x:l.x,y:l.y,color:b,size:y*1.4}),V(e$1,{kind:"burst",x:l.x,y:l.y,color:"coin",n:8,size:y*.8});let A=d.get(u.id);A!==void 0&&(e$1.need(A,e).scale=1.35),q++,Q=Math.min(ce(),Q+1+Wr(e$1,"meta:charge")),qe(e$1,"score",Math.pow(2,u.level)*n("mergeScore")),e$1.emit("items-merged",{level:u.level,chain:u.chain}),vt(e$1,"merge-merge"),u.kind==="item"&&u.level===Pn(u.chain)&&V(e$1,{kind:"flash",color:"coin"});for(let I of O)I.order.wants.some(N=>N.chain===u.chain&&N.level===u.level)&&He(e$1,I.customer,"wave");}p.kind==="split"&&V(e$1,{kind:"ring",x:l.x,y:l.y,color:"secondary",size:y*1.2}),p.freed&&e$1.emit("obstacle-cleared",{kind:p.freed});for(let u of p.hits){let b=Qe(c,u.at.col,u.at.row);V(e$1,{kind:"burst",x:b.x,y:b.y,color:u.id==="fog"?"#ffffff":"ground",n:u.gone?10:4,size:y*.9}),u.gone&&e$1.emit("obstacle-cleared",{kind:u.id});}p.coins>0&&(qe(e$1,"coins",p.coins),e$1.emit("coin-collected",{value:p.coins}),V(e$1,{kind:"pop",x:l.x,y:l.y-y*.5,text:`+${p.coins}`,color:"coin",size:Math.round(y*.4)})),p.hits.length&&V(e$1,{kind:"shake",power:.25});},Ht=p=>{if($<=0&&B<=0){let A=Qe(c,p.col,p.row);V(e$1,{kind:"pop",x:A.x,y:A.y-xe()*.5,text:"0",color:"danger",size:Math.round(xe()*.4)});return}let y=Mc(o,p,Ae()),l=Qe(c,p.col,p.row);if(!y){V(e$1,{kind:"shake",power:.2}),V(e$1,{kind:"pop",x:l.x,y:l.y-xe()*.5,text:"\u2715",color:"danger",size:Math.round(xe()*.45)});return}B>0?B--:$--,vt(e$1,"merge-generate");let u=d.get(o.cells[p.row][p.col].thing.id);u!==void 0&&(e$1.need(u,e).scale=1.2),V(e$1,{kind:"burst",x:l.x,y:l.y,color:gn(y.thing.chain)?.color??"accent",n:6,size:xe()*.7}),e$1.emit("item-spawned",{level:y.thing.level,chain:y.thing.chain}),Re();let b=d.get(y.thing.id);b!==void 0&&e$1.set(b,e,{x:l.x,y:l.y,scale:.4});for(let A of y.burst){let I=Qe(c,A.col,A.row);V(e$1,{kind:"burst",x:I.x,y:I.y,color:"#ffffff",n:10,size:xe()});}},It=p=>{let y=_c(o,p);if(!y)return;let l=Qe(c,p.col,p.row);V(e$1,{kind:"ring",x:l.x,y:l.y,color:"coin",size:xe()*1.6}),y.energy>0&&($+=y.energy,V(e$1,{kind:"pop",x:l.x,y:l.y-xe()*.5,text:`+${y.energy}`,color:"coin",size:Math.round(xe()*.45)})),Re();for(let u of y.spawned){let b=d.get(u.thing.id);b!==void 0&&e$1.set(b,e,{x:l.x,y:l.y,scale:.4});}},tn=()=>{let p=ge();if(Q<p.charge)return false;let y=1+Wr(e$1,"meta:skill"),l=Math.max(1,Math.round(p.count*y));if(Q=0,se!==null&&He(e$1,se,"cheer"),V(e$1,{kind:"flash",color:"secondary"}),p.effect==="upgrade")for(let u of Oc(o,l,[...Se(),...M.slice(0,2).flatMap(b=>b.wants)])){let b=Qe(c,u.col,u.row);V(e$1,{kind:"ring",x:b.x,y:b.y,color:"secondary",size:xe()*1.4});}else if(p.effect==="free")B+=l;else for(let u=0;u<l;u++)Ti(o,"joker",{col:Math.floor(o.cols/2),row:Math.floor(o.rows/2)});return e$1.emit("skill-cast",{id:p.id}),vt(e$1,"merge-skill"),Re(),true},pt=(p,y)=>Me.find(l=>Math.hypot(p-l.x,y-l.y)<=l.r);e$1.on(j,p=>{let y=p;if(!(!Ze(e$1)||Kn(e$1)||ve||oe())){if(y.type==="press"){Ot(e$1),fe=0;let l=Tn(c,y.x,y.y);if(!l||!Br(o,l))return;let u=o.cells[l.row][l.col].thing.id,b=d.get(u);if(b===void 0)return;let A=e$1.need(b,e);_={id:u,from:l,dx:A.x-y.x,dy:A.y-y.y,x0:y.x,y0:y.y},e$1.need(b,f).depth=30;}else if(y.type==="move"&&_){let l=d.get(_.id);if(l===void 0)return;let u=e$1.need(l,e);u.x=y.x+_.dx,u.y=y.y+_.dy,u.scale=1.12;}else if(y.type==="release"&&_){let l=_;_=null;let u=d.get(l.id);if(u!==void 0&&(e$1.need(u,f).depth=3),Math.hypot(y.x-l.x0,y.y-l.y0)<xe()*.3)return;let b=pt(y.x,y.y),A=o.cells[l.from.row][l.from.col].thing;if(b?.id==="bin"&&A&&A.kind!=="gen"){Ri(o,l.from),vt(e$1,"merge-bin"),Re();return}let I=b?.id.startsWith("order")?O.find(X=>`order${X.slot}`===b.id):void 0;if(I&&A?.kind==="item"&&I.order.wants.some(X=>X.chain===A.chain&&X.level===A.level)&&Xe(I))return;let N=Tn(c,y.x,y.y);if(!N)return;let U=Ec(o,l.from,N);U.kind!=="none"&&Ct(U),Re();}else if(y.type==="tap"){fe=0;let l=pt(y.x,y.y);if(l?.id==="skill"){tn();return}if(l?.id.startsWith("order")){let A=O.find(I=>`order${I.slot}`===l.id);A&&Xe(A);return}let u=Tn(c,y.x,y.y),b=u?o.cells[u.row][u.col].thing:null;if(!u||!b||!Br(o,u))return;if(b.kind==="gen")Ht(u);else if(b.kind==="special")It(u);else {let A=O.find(I=>I.order.wants.some(N=>N.chain===b.chain&&N.level===b.level)&&ir(o,I.order.wants));A&&Xe(A);}}}}),e$1.on($t,()=>{it(),e$1.vars.level=r.level;}),e$1.on(Wt,it),e$1.on(Kt,_t),e$1.on(Ft,()=>{oe()&&(e$1.vars.reviving=false,Ke("out-of-energy"));}),e$1.on(zt,p=>{je.clear(),te(),Me=[],se!==null&&e$1.isAlive(se)&&et(e$1,se,p.reason==="cleared"?"dance":"idle");}),e$1.on(k,()=>{c=ee(),Y();for(let p of O){let y=Ye(p.slot),l=e$1.get(p.customer,zr);l&&(l.to=y.x);let u=e$1.get(p.customer,e),b=Math.max(24,(y.feet-(y.y+y.h/2))*1.05);u&&e$1.set(p.customer,e,{x:y.x,y:y.feet-b/2});let A=e$1.get(p.customer,f);A?.shape==="actor"&&(A.h=b);}Re();});let w=p=>{let y=Math.min(1,p*16);for(let[l,u]of d){if(_?.id===l)continue;let b=e$1.get(u,To);if(!b)continue;let A=e$1.need(u,e),I=Qe(c,b.col,b.row);A.x+=(I.x-A.x)*y,A.y+=(I.y-A.y)*y;let N=A.scale??1;A.scale=N+(1-N)*Math.min(1,p*10);}},f$1=p=>{let y=O.find(u=>ir(o,u.order.wants));if(y&&(!ht(p,"merge-order")||fe>6)){let u=Ye(y.slot);return ft(p,"tap",{x:u.x,y:u.y},void 0,xe()*1.1)}let l=Rc(o,{gens:false});if(l&&(!ht(p,"merge-merge")||fe>6))return ft(p,"swipe",Qe(c,l[0].col,l[0].row),Qe(c,l[1].col,l[1].row),xe()*1.1);if(Q>=ce()&&!ht(p,"merge-skill")){let u=Me.find(b=>b.id==="skill");if(u)return ft(p,"tap",u,void 0,xe()*1.1)}if(!ht(p,"merge-generate")||fe>6){let u=bn(o).find(b=>b.thing.kind==="gen"&&!b.cell.cover);u&&($>0||B>0)&&ft(p,"tap",Qe(c,u.at.col,u.at.row),void 0,xe()*1.1);}},m=0;e$1.addSystem({id:"merge",order:0,run(p,y){Pt(p,y),w(y),!(!Ze(p)||ve)&&(ue+=y,fe+=y,ot(),++m%20===0&&o.cells.some(l=>l.some(u=>u.cover?.ttl!==void 0&&u.cover.ttl<=3))&&Ce(),!(oe()||_)&&(un(p)||f$1(p),Fe()||ze()));}}),it();}};var Lt=10,wc={id:"start",needs:[],rows:["..............","..............","..............","..............","..............","..............",".......o.o.o..",".P............","##############","##############"]},Pc={id:"checkpoint",needs:[],rows:["..........","..........","..........","..........","..........","..........","...o..o...","....C.....","##########","##########"]},Cc={id:"end",needs:[],rows:["..............","..............","..............","..............","..............","..............",".....o.o......","..........E...","##############","##############"]},Ic={id:"boss",needs:[],rows:["..................","..................","..................","..................","...===......===...","..................","..................","..................","##################","##################"]},ws=[{id:"walk",needs:["walker"],rows:["..............","..............","..............","..............",".....ooo......","....o...o.....","..............",".........W....","##############","##############"]},{id:"two-walkers",needs:["walker"],rows:["..............","..............","..............","......*.......",".....===......","..............","..o........o..","...W......W...","##############","##############"]},{id:"gaps",needs:["gaps"],rows:["..............","..............","..............","..............","..............","....o.....o...","...o.o...o.o..","..............","###...###...##","###...###...##"]},{id:"stairs",needs:["stairs"],rows:["..............","...........*..","..........===.","..............",".......###....",".......###.o..","....##########","....##########","##############","##############"]},{id:"spikes",needs:["spikes"],rows:["..............","..............","..............","..............","..............",".....ooo......","....=====.....","..............","###^^^^^^^####","##############"]},{id:"pits",needs:["pits"],rows:["..............","..............","..............","..............","......o.......",".....===...o..","..o.......===.",".===..........","##..........##","##..........##"]},{id:"spring",needs:["spring"],rows:["..............",".........*....","........####..","..............","..............","..............","..............","...T..........","##############","##############"]},{id:"hopper",needs:["hopper"],rows:["..............","..............","..............","..............",".....o...o....","..............","..............",".......J......","##############","##############"]},{id:"crumble",needs:["crumble"],rows:["..............","..............","..............","..............","..............","...o.o.o.o....","...______.....","..............","##........####","##........####"]},{id:"spiky",needs:["spiky"],rows:["..............","..............","..............","..............","..............","......ooo.....","..............",".......S......","##############","##############"]},{id:"moving",needs:["moving"],rows:["..............","..............","..............","..............",".....o..o.....","..............",".....M........","..............","##..........##","##..........##"]},{id:"flyer",needs:["flyer"],rows:["..............","..............","..............","......F.......","..............","..............","...o......o...","..............","##############","##############"]},{id:"key",needs:["key"],rows:["..............","..............","..K...........",".===..........","..............",".......===....","..............","...........B..","##############","##############"]},{id:"gunner",needs:["gunner"],rows:["..............","..............","..............","..............","..............",".....o.o......","....=====.....","...........G..","##############","##############"]},{id:"heart",needs:["walker","stairs"],rows:["..............","..............","..*...........","..............","......H.......",".....===......","..............","...W......W...","##############","##############"]},{id:"secret-high",needs:["spring","gaps"],rows:["..............","..*...........",".===..........","..............","..............","..............","........T.....","..............","#####...######","#####...######"]}],Ai=4,lr=5,Ps=Ai*lr,Ls={walker:1,gaps:1,spikes:2,stairs:2,pits:3,spring:3,hopper:4,crumble:4,spiky:6,moving:6,flyer:7,key:8,gunner:9},Li=[0,9,24,39];function Hr(e,t=.5){let n=Math.max(1,Math.min(Ps,Math.floor(e))),s=Math.ceil(n/lr),r=n-(s-1)*lr,o=r===lr,c=Object.keys(Ls).filter(x=>Ls[x]<=n),d=Object.keys(Ls).find(x=>Ls[x]===n)??null;return {level:n,world:s,index:r,boss:o,features:c,fresh:d,rooms:o?2:3+Math.min(5,Math.floor((n-1)/2)),pace:.85+t*.3+(n-1)*.02,bossHp:3+s,firstClearGold:(o?150:60)+(n-1)*20}}var wi=e=>Li[Math.ceil(Math.max(1,e)/lr)-1]??0,Pi=[{id:"double",stars:6},{id:"dash",stars:15},{id:"wall",stars:27}],Cs=e=>Pi.filter(t=>e>=t.stars).map(t=>t.id),Vr=[{id:"hero",cast:"hero",gems:0,perk:"none"},{id:"hero2",cast:"hero2",gems:150,perk:"heart"},{id:"hero3",cast:"hero3",gems:300,perk:"jump"}],Ci="kit-platformer",Ii=[{id:"Hearts",var:"meta:hearts",art:"heart",color:"danger",perLevel:1,unit:"",maxLevel:3,price:150,growth:1.2},{id:"JumpPower",var:"meta:jump",art:"boot",color:"accent",perLevel:2,unit:"%",maxLevel:10,price:40,growth:.15},{id:"Magnet",var:"meta:magnet",art:"magnet",color:"danger",perLevel:10,unit:"%",maxLevel:10,price:30,growth:.12},{id:"Grace",var:"meta:grace",art:"shield",color:"muted",perLevel:.2,unit:"s",maxLevel:10,price:35,growth:.12},{id:"Greed",var:"meta:greed",art:"coin",color:"coin",perLevel:2,unit:"%",maxLevel:25,price:40,growth:.1}],Nc={game:"platformer",character:Ci,stats:Ii,heroes:Vr,levels:Ps,firstClearGold:e=>Hr(e).firstClearGold,stars:3,starsToEnter:wi};var Lp="boss-spawned",wp="boss-defeated",Ni="level-cleared",jt=b("platformer.body"),lt=b("platformer.thing"),Oo=b("platformer.strip"),cn=b("platformer.hero"),$c=b("platformer.hud"),jn=(e,t)=>{let n=Number(e.vars[t]??0);return Number.isFinite(n)?n:0},Pp=6,cr=40,Cp=3.3,Ip=6.8,Np=.7,Bc=1.3,Is={id:"platformer",version:2,engines:["phaser"],requires:["round"],params:{difficulty:{type:"number",default:.5,min:0,max:1},lives:{type:"number",default:3,min:1,max:9,integer:true},coinScore:{type:"number",default:10,min:0,max:1e3,integer:true},starScore:{type:"number",default:300,min:0,max:1e4,integer:true},clearBonus:{type:"number",default:500,min:0,max:1e5,integer:true},graceTime:{type:"number",default:1.2,min:0,max:5},doubleJump:{type:"boolean",default:false}},setup({world:e$1,params:t}){let n=w=>nn(t,w),s=_r(e$1),r=Hr(1,n("difficulty")),o=[],c=0,d=null,x=0,_={x:2,y:8},O=3,M=3,$=0,G=false,B=false,Q=0,ae=0,q=0,ue=false,fe=false,ie=[],ve=[false,false,false],se=new Map,Me=new Map,De=()=>Vr.find(w=>w.id===e$1.vars["meta:hero"])??Vr[0],ge=()=>e$1.vars.reviving===true,oe=()=>{let w=Number(e$1.vars.view_w??720),f=Number(e$1.vars.view_h??1280);return Math.min(w/8,f*.66/10)},ce=()=>Number(e$1.vars.view_h??1280)*.86-10*oe(),Ae=()=>Number(e$1.vars.view_w??720)/oe(),Se=(w,f)=>{if(f<0)return ".";if(w<0||w>=c)return "#";if(f>=10)return ".";let m=o[f]?.[w]??".";return m==="_"&&(se.get(`${w},${f}`)??0)>.5?".":m},ee=w=>w==="#",xe=w=>w==="="||w==="_"||w==="^",je=()=>{for(let I of e$1.query(lt))e$1.destroy(I);for(let I of e$1.query(Oo))e$1.destroy(I);se.clear(),r=Hr(jn(e$1,"meta:chapter")||1,n("difficulty"));let w=e$1.rng.stream(`platformer-level-${r.level}`),f=ws.filter(I=>I.needs.every(N=>r.features.includes(N))),m=[],p=r.fresh!==null?f.find(I=>I.needs.includes(r.fresh)):void 0;for(p&&m.push(p);m.length<r.rooms;)m.push(w.pick(f));let y=Math.ceil(m.length/2),l=[wc,...m.slice(0,y),Pc,...m.slice(y),r.boss?Ic:Cc];o=Array.from({length:10},(I,N)=>l.map(U=>U.rows[N]??"").join("")),c=o[0].length;let u=[];for(let I=0;I<10;I++)for(let N=0;N<c;N++)o[I][N]==="*"&&u.push({c:N,r:I});let b=u.length<=3?u:[u[0],u[Math.floor(u.length/2)],u[u.length-1]];for(let I=b.length;I<3;I++)b.push({c:Math.floor(c*(I+1)/4),r:5});let A=0;for(let I=0;I<10;I++)for(let N=0;N<c;N++){let U=o[I][N],X={x:N+.5,y:I+1};U==="P"?_={...X}:U==="o"?me("coin",X.x,I+.85,.5,.5):U==="H"&&A++<1?me("heart",X.x,I+.9,.6,.6):U==="K"?me("key",X.x,I+.9,.6,.6):U==="B"?me("chest",X.x,X.y,1,.8):U==="T"?me("spring",X.x,X.y,1,.5):U==="M"?me("mover",X.x+.5,I+.4,2,.4).baseX=X.x+.5:U==="C"?me("checkpoint",X.x,X.y,.6,1.6):U==="E"?me("flag",X.x,X.y,.8,2.6):U==="W"?me("walker",X.x,X.y,.8,1):U==="S"?me("spiky",X.x,X.y,.8,1):U==="J"?me("hopper",X.x,X.y,.8,1):U==="F"?me("flyer",X.x,X.y,.9,.8):U==="G"&&me("gunner",X.x,X.y,.8,1.1),/[PoHKBTMCEWSJFG*]/.test(U)&&(o[I]=we(o[I],N,"."));}if(b.forEach((I,N)=>me("star",I.c+.5,I.r+.95,.85,.85).tag=String(N)),r.boss){let I=me("boss",c-5,8,2.2,2.4);I.hp=r.bossHp,I.tag="walk",I.t=2;}Ee();},we=(w,f,m)=>w.slice(0,f)+m+w.slice(f+1),te=(w,f,m,p)=>{switch(w){case "walker":return {shape:"actor",cast:"foe",h:m*p*1.35,pose:"walk",depth:8};case "spiky":return {shape:"actor",cast:"foe2",h:m*p*1.4,pose:"walk",depth:8};case "hopper":return {shape:"actor",cast:"foe3",h:m*p*1.35,pose:"idle",depth:8};case "flyer":return {shape:"actor",cast:"foe5",h:m*p*1.4,pose:"air",depth:8};case "gunner":return {shape:"actor",cast:"foe4",h:m*p*1.3,pose:"idle",depth:8};case "boss":return {shape:"actor",cast:"boss",h:m*p*1.2,pose:"walk",depth:8};case "bullet":return {shape:"sprite",art:"shot",color:"danger",w:f*p,h:m*p,depth:9};case "wave":return {shape:"sprite",art:"burst",color:"danger",w:f*p,h:m*p,depth:9};case "coin":return {shape:"sprite",art:"coin",w:f*p,h:m*p,depth:7};case "star":return {shape:"sprite",art:"bigstar",w:f*p,h:m*p,depth:7};case "heart":return {shape:"sprite",art:"heart",w:f*p,h:m*p,depth:7};case "key":return {shape:"sprite",art:"key",w:f*p,h:m*p,depth:7};case "chest":return {shape:"sprite",art:"chest",w:f*p,h:m*p*1.1,depth:6};case "spring":return {shape:"sprite",art:"spring",w:f*p,h:m*p*1.4,depth:6};case "mover":return {shape:"tile",art:"platform",w:f*p,h:m*p,unit:p,depth:5};case "checkpoint":return {shape:"sprite",art:"flag",color:"muted",w:f*p*1.6,h:m*p,depth:5};case "flag":return {shape:"sprite",art:"flag",w:f*p*1.4,h:m*p,depth:5}}};function me(w,f$1,m,p,y){let l=e$1.create(),u={kind:w,vx:0,vy:0,dir:-1,t:0,baseX:f$1,baseY:m,hp:1,tag:"",safe:0};return e$1.set(l,lt,u),e$1.set(l,jt,{x:f$1,y:m,w:p,h:y}),e$1.set(l,e,{x:0,y:0}),e$1.set(l,f,te(w,p,y,oe())),e$1.need(l,lt)}function Ee(){for(let f of e$1.query(Oo))e$1.destroy(f);let w=(Number(e$1.vars.view_h??1280)-(ce()+10*oe()))/oe()+.5;for(let f=0;f<10;f++){let m=0;for(;m<c;){let p=o[f][m];if(p==="."||p==="_"){p==="_"&&Re("_",m,f,1,.45),m++;continue}let y=p==="#"&&Se(m,f-1)!=="#",l=m;for(;l<c&&o[f][l]===p&&(p!=="#"||Se(l,f-1)!=="#"===y);)l++;if(p==="#"&&y){let u=0;for(;f+u<10&&o[f+u][m]==="#";)u++;Re("#",m,f,l-m,u+(f+u>=10?w:0));}else p!=="#"&&Re(p,m,f,l-m,p==="="?.45:.7);m=l;}}}function Re(w,f$1,m,p,y){let l=oe(),u=e$1.create();e$1.set(u,Oo,{char:w}),e$1.set(u,jt,{x:f$1+p/2,y:w==="^"?m+1:m+y,w:p,h:y}),e$1.set(u,e,{x:0,y:0});let b=w==="^"?{shape:"tile",art:"spike",w:p*l,h:y*l,unit:l,depth:4}:w==="#"?{shape:"tile",art:"ground",w:p*l,h:y*l,unit:l*1.2,depth:3}:{shape:"tile",art:"platform",w:p*l,h:y*l,unit:l,depth:3,...w==="_"?{color:"muted",alpha:.85}:{}};e$1.set(u,f,b),w==="_"&&e$1.set(u,lt,{kind:"mover",vx:0,vy:0,dir:0,t:0,baseX:f$1,baseY:m,hp:0,tag:"crumble",safe:0});}let Ce=()=>{(d===null||!e$1.isAlive(d))&&(d=e$1.create(),e$1.set(d,cn,{vx:0,vy:0,grounded:true,facing:1,jumps:0,coyote:0,buffer:0,dash:0,dashCd:0,wall:0,swing:0,swingCd:0}),e$1.set(d,jt,{x:_.x,y:_.y,w:Np,h:Bc}),e$1.set(d,e,{x:0,y:0})),e$1.set(d,f,{shape:"actor",cast:De().cast,h:Bc*oe()*1.25,pose:"idle",depth:10});},Y=()=>Math.sqrt(2*cr*Cp*(1+jn(e$1,"meta:jump"))*(De().perk==="jump"?1.15:1)),Le=()=>{if(d===null)return;let w=e$1.need(d,jt),f=e$1.need(d,cn);w.x=_.x,w.y=_.y,f.vx=0,f.vy=0;for(let m of e$1.query(lt))(e$1.need(m,lt).kind==="bullet"||e$1.need(m,lt).kind==="wave")&&e$1.destroy(m);},Ye=()=>{Ht(),je(),M=n("lives")+jn(e$1,"meta:hearts")+(De().perk==="heart"?1:0),O=M,$=0,G=false,B=false,Q=0,ae=0,q=0,ue=false,fe=!r.boss,ve.fill(false),ie=Cs(jn(e$1,"meta:stars_total")),n("doubleJump")&&!ie.includes("double")&&ie.push("double"),e$1.vars.abilities=ie.join(","),e$1.vars.platformer_level=r.level,e$1.vars.platformer_world=r.world,e$1.vars.lives=O,e$1.vars.coins=0,e$1.vars.score=0,e$1.vars.stars=0,e$1.vars.reviving=false,x=0,Ce(),Le(),d!==null&&(e$1.need(d,cn).facing=1,et(e$1,d,"idle")),r.boss&&e$1.emit(Lp,{}),_t(e$1);},at=()=>{!Ze(e$1)||ge()||d===null||(e$1.need(d,cn).buffer=.13);},_e=()=>{if(d===null)return;let w=e$1.need(d,cn);w.vy<0&&(w.vy*=.5);},Pt=()=>{if(!Ze(e$1)||ge()||d===null||!ie.includes("dash"))return;let w=e$1.need(d,cn);w.dashCd>0||(w.dash=.2,w.dashCd=.8,w.vy=0,He(e$1,d,"attack"));},Ge=()=>{if(!Ze(e$1)||ge()||d===null)return;let w=e$1.need(d,cn);w.swingCd>0||(w.swing=.16,w.swingCd=.32,He(e$1,d,"attack"));};e$1.on(j,w=>{let f=w;e$1.vars.started_tick!==e$1.tick&&(f.type==="key"&&(f.key==="up"||f.key==="action")?at():f.type==="key-up"&&(f.key==="up"||f.key==="action")?_e():f.type==="key"&&f.key==="down"?Pt():f.type==="tap"?Ge():f.type==="swipe"&&f.dir==="up"&&at());});let Xe=(w,f)=>{if(!Ze(w)||G)return;G=true;let m=f==="cleared",p=ve.filter(Boolean).length;w.vars.stars=p,m&&w.vars["meta:first_clear"]===true&&qe(w,"coins",r.firstClearGold),w.vars.score=q*n("coinScore")+p*n("starScore")+(m?n("clearBonus"):0),w.vars.reviving=false,m&&w.emit(Ni,{level:r.level}),w.emit(Bt,{reason:f,stats:{chapter:r.level,seconds:Math.floor(Q),cleared:m,stars:m?p:0,coins:q,bosses:r.boss&&fe?1:0}});},tt=w=>{if(w.vars.revive_ready===true&&!B){w.vars.reviving=true,w.emit(Gt,{});return}Xe(w,"fell");},ot=w=>{ge()&&(B=true,w.vars.reviving=false,O=Math.max(2,Math.ceil(M/2)),w.vars.lives=O,$=2.5,Le(),d!==null&&et(w,d,"idle"),V(w,{kind:"flash",color:"coin"}));},ct=(w,f)=>{if(d===null||$>0||G)return;let m=w.need(d,cn);m.dash>0||(O--,w.vars.lives=O,w.emit("player-hit",{lives:O}),$=n("graceTime")+jn(w,"meta:grace"),m.vy=-Y()*.55,m.vx=(f===null?-m.facing:Math.sign(w.need(d,jt).x-f)||-m.facing)*5,He(w,d,"hit"),V(w,{kind:"shake",power:1.2}),V(w,{kind:"flash",color:"danger"}),O<=0&&tt(w));},it=(w,f,m)=>{let p=w.need(f,lt),y=w.need(f,jt),l=oe();V(w,{kind:"burst",x:Ke(y.x),y:ze(y.y-y.h/2),color:"danger",n:12,size:l*.9}),w.emit("enemy-defeated",{kind:p.kind,by:m}),qe(w,"score",50),w.destroy(f);},bt=(w,f)=>{let m=w.need(f,jt);ae+=1+jn(w,"meta:greed");let p=Math.floor(ae);ae-=p,p>0&&qe(w,"coins",p),q++,w.emit("coin-collected",{value:1}),V(w,{kind:"burst",x:Ke(m.x),y:ze(m.y-m.h/2),color:"coin",n:6,size:oe()*.6}),w.destroy(f);},Ke=w=>w*oe()-x*oe(),ze=w=>ce()+w*oe();function _t(w){oe();for(let m of w.query(jt)){let p=w.need(m,jt),y=w.get(m,e);if(!y)continue;y.x=Ke(p.x),y.y=ze(p.y-p.h/2);let l=w.get(m,f);if(l&&l.shape==="actor"&&w.has(m,lt)){let u=w.need(m,lt);l.facing=u.dir>=0?1:-1,l.alpha=u.safe>0&&Math.floor(w.time*12)%2===0?.35:1,y.y=ze(p.y)-l.h/2;}if(l&&l.shape==="actor"&&w.has(m,cn)&&(y.y=ze(p.y)-l.h/2),l&&w.has(m,Oo)&&w.need(m,Oo).char==="_"){let u=se.get(`${Math.floor(p.x)},${Math.round(p.y-p.h)}`)??0;l.alpha=u>.5?0:u>0?.5+.5*Math.abs(Math.sin(w.time*30)):.85;}}}let Fe=(w,f$1,m,p)=>{let y=Me.get(w);(y===void 0||!e$1.isAlive(y))&&(y=e$1.create(),e$1.set(y,$c,{id:w}),Me.set(w,y)),e$1.set(y,e,{x:f$1,y:m}),e$1.set(y,f,p);},Ct=w=>{let f=Me.get(w);f!==void 0&&e$1.destroy(f),Me.delete(w);};function Ht(){for(let w of Me.values())e$1.destroy(w);Me.clear(),rt(e$1,$c);}let It=w=>{let f=Number(w.vars.view_w??720),m=Number(w.vars.view_h??1280),p=Math.min(f,m),y=m*.085;Fe("lvl",f*.08,y,{shape:"text",text:`${r.world}-${r.index}`,size:Math.round(p*.042),color:"text",bold:true,depth:42});let l=p*.05;for(let I=0;I<M;I++)Fe(`h${I}`,f*.07+I*l*1.1,y+p*.065,{shape:"sprite",art:"heart",w:l,h:l,alpha:I<O?1:.25,depth:42});for(let I=M;I<12;I++)Ct(`h${I}`);let u=p*.06;for(let I=0;I<3;I++)Fe(`s${I}`,f/2+(I-1)*u*1.15,y,{shape:"sprite",art:"bigstar",w:u,h:u,alpha:ve[I]?1:.25,depth:42});let b=p*.045,A=String(w.vars.coins??0);if(Fe("coin:i",f*.92-A.length*b*.6-b*.7,y,{shape:"sprite",art:"coin",w:b,h:b,depth:42}),Fe("coin",f*.92-A.length*b*.6/2,y,{shape:"text",text:A,size:Math.round(b),color:"text",bold:true,depth:42}),ue?Fe("key",f*.92-b*.3,y+p*.065,{shape:"sprite",art:"key",w:b,h:b,depth:42}):Ct("key"),r.boss){let I=w.query(lt).find(ke=>w.need(ke,lt).kind==="boss"),N=I!==void 0?w.need(I,lt).hp/r.bossHp:0,U=f*.5,X=Math.max(10,p*.022);Fe("boss:bg",f/2,y+p*.075,{shape:"rect",w:U,h:X,color:"#000000",alpha:.45,radius:X/2,depth:41});let ye=Math.max(0,(U-4)*Math.round(N*100)/100);ye<1?Ct("boss:fill"):Fe("boss:fill",f/2-(U-4)/2+ye/2,y+p*.075,{shape:"rect",w:ye,h:X-4,color:"danger",radius:(X-4)/2,depth:41.1});}};e$1.on($t,()=>{Ye(),e$1.vars.level=r.level;}),e$1.on(Wt,Ye),e$1.on(Kt,()=>ot(e$1)),e$1.on(Ft,()=>{ge()&&(e$1.vars.reviving=false,Xe(e$1,"fell"));}),e$1.on(zt,w=>{d!==null&&e$1.isAlive(d)&&et(e$1,d,w.reason==="cleared"?"dance":"die"),Ht();}),e$1.on(k,()=>{Tt(e$1,"side",ce()+8*oe()+2);let w=oe();for(let f$1 of e$1.query(lt)){let m=e$1.need(f$1,lt);if(m.tag==="crumble")continue;let p=e$1.need(f$1,jt);e$1.set(f$1,f,te(m.kind,p.w,p.h,w));}Ee(),Ce(),_t(e$1);}),e$1.addSystem({id:"platformer",order:0,run(w,f$1){if(!Ze(w)||d===null||G||ge())return;Q+=f$1,$>0&&($=Math.max(0,$-f$1));let m=w.need(d,jt),p=w.need(d,cn),y=r.pace;for(let[j,k]of [...se]){let E=k+f$1;E>3.5?se.delete(j):se.set(j,E);}let l=s.axis().x;if(l!==0&&(p.facing=l),p.dash>0)p.dash-=f$1,p.vx=p.facing*15,p.vy=0;else {let j=l*Pp,k=p.grounded?60:32;p.vx+=Math.max(-k*f$1,Math.min(k*f$1,j-p.vx)),p.vy+=cr*f$1,p.vy>22&&(p.vy=22);}if(p.dashCd>0&&(p.dashCd-=f$1),p.swingCd>0&&(p.swingCd-=f$1),p.swing>0){p.swing-=f$1;let j={l:p.facing>0?m.x:m.x-1.4,r:p.facing>0?m.x+1.4:m.x,t:m.y-m.h-.2,b:m.y};for(let k of w.query(lt)){if(!w.isAlive(k)||!w.has(k,lt))continue;let E=w.need(k,lt);if(!["walker","spiky","hopper","flyer","gunner","boss","bullet"].includes(E.kind))continue;let a=w.need(k,jt);a.x+a.w/2<j.l||a.x-a.w/2>j.r||a.y-a.h>j.b||a.y<j.t||(E.kind==="bullet"?(V(w,{kind:"burst",x:Ke(a.x),y:ze(a.y-a.h/2),color:"text",n:6,size:oe()*.5}),w.destroy(k)):E.kind==="boss"?tn(w,k,"sword"):it(w,k,"sword"));}}if(p.coyote=p.grounded?.1:Math.max(0,p.coyote-f$1),p.buffer>0){p.buffer-=f$1;let j=ie.includes("double")&&p.jumps<2;p.coyote>0||p.grounded?(p.vy=-Y(),p.jumps=1,p.buffer=0,p.grounded=false,p.coyote=0):p.wall!==0&&ie.includes("wall")?(p.vy=-Y()*.95,p.vx=-p.wall*7,p.facing=-p.wall,p.jumps=1,p.buffer=0):j&&p.jumps>=1&&(p.vy=-Y()*.9,p.jumps=2,p.buffer=0,V(w,{kind:"ring",x:Ke(m.x),y:ze(m.y),color:"text",size:oe()*1.2})),p.buffer===0&&He(w,d,"jump");}let u=m.w/2,b=m.x+p.vx*f$1;p.wall=0;let A=j=>{let k=[];for(let E=Math.floor(j-m.h+.05);E<=Math.floor(j-.05);E++)k.push(E);return k};if(p.vx>0){let j=Math.floor(b+u);A(m.y).some(k=>ee(Se(j,k)))&&(b=j-u-.001,p.grounded||(p.wall=1),p.vx=0);}else if(p.vx<0){let j=Math.floor(b-u);A(m.y).some(k=>ee(Se(j,k)))&&(b=j+1+u+.001,p.grounded||(p.wall=-1),p.vx=0);}p.wall===0&&!p.grounded&&l!==0&&A(m.y).some(j=>ee(Se(Math.floor(b+l*(u+.05)),j)))&&(p.wall=l),m.x=Math.max(u,Math.min(c-u,b));let I=m.y,N=m.y+p.vy*f$1,U=p.grounded;p.grounded=false;let X=[Math.floor(m.x-u+.05),Math.floor(m.x+u-.05)];if(p.vy>=0){let j=Math.floor(N);for(let k of X){let E=Se(k,j),a=j;if((ee(E)||xe(E)&&I<=a+.05)&&N>=a){N=a,p.vy=0,p.grounded=true,p.jumps=0,E==="_"&&!se.has(`${k},${j}`)&&se.set(`${k},${j}`,.001),E==="^"&&(ct(w,null),p.vy=-Y()*.7,p.grounded=false);break}}}else {let j=Math.floor(N-m.h);X.some(k=>ee(Se(k,j)))&&(N=j+1+m.h,p.vy=0);}m.y=N,!U&&p.grounded&&He(w,d,"jump");for(let j of w.query(lt)){let k=w.need(j,lt);if(k.kind!=="mover"||k.tag==="crumble")continue;let E=w.need(j,jt),a=E.x;k.t+=f$1,E.x=k.baseX+Math.sin(k.t*.9)*2.2;let S=E.y-E.h;p.vy>=0&&Math.abs(m.x-E.x)<E.w/2+u*.6&&I<=S+.1&&m.y>=S-.05&&(m.y=S,p.vy=0,p.grounded=true,p.jumps=0,m.x+=E.x-a);}if(m.y>12&&(ct(w,null),$=Math.max($,1),!ge()&&!G&&Le(),G||ge()))return;let ye={l:m.x-u,r:m.x+u,t:m.y-m.h,b:m.y},ke=j=>ye.r>j.x-j.w/2&&ye.l<j.x+j.w/2&&ye.b>j.y-j.h&&ye.t<j.y,Ue=1.2*(1+jn(w,"meta:magnet")),st=m.x;for(let j of w.query(lt)){if(!w.isAlive(j)||!w.has(j,lt))continue;let k=w.need(j,lt),E=w.need(j,jt);switch(k.safe>0&&(k.safe-=f$1),k.kind){case "walker":case "spiky":{k.vx=k.dir*1.6*y;let a=E.x+k.dir*(E.w/2+.05)+k.vx*f$1,S=ee(Se(Math.floor(a),Math.floor(E.y-.5))),L=Se(Math.floor(a),Math.floor(E.y));S||!(ee(L)||xe(L))?k.dir=-k.dir:E.x+=k.vx*f$1;break}case "hopper":{k.t+=f$1,k.vy+=cr*.6*f$1,E.y+=k.vy*f$1,E.y>=k.baseY&&(E.y=k.baseY,k.vy=0,k.t>1.5/y&&(k.t=0,k.vy=-Math.sqrt(2*cr*.6*2.4))),k.dir=st<E.x?-1:1;break}case "flyer":k.t+=f$1*y,E.x=k.baseX+Math.sin(k.t*.9)*3,E.y=k.baseY+Math.sin(k.t*1.8)*.9,k.dir=Math.cos(k.t*.9)>=0?1:-1;break;case "gunner":{if(k.dir=st<E.x?-1:1,k.t+=f$1,k.t>2.2/y&&Math.abs(st-E.x)<9){k.t=0;let a=me("bullet",E.x+k.dir*.6,E.y-.45,.45,.3);a.vx=k.dir*6*y,a.dir=k.dir,He(w,j,"attack");}break}case "bullet":case "wave":if(E.x+=k.vx*f$1,k.t+=f$1,k.t>(k.kind==="wave"?2.2:3.5)||ee(Se(Math.floor(E.x),Math.floor(E.y-.1)))){w.destroy(j);continue}break;case "boss":pt(w,j,k,E,st,f$1);break;case "coin":Math.hypot(E.x-m.x,E.y-(m.y-m.h/2))<Ue&&Ue>1.21&&(E.x+=(m.x-E.x)*Math.min(1,f$1*10),E.y+=(m.y-m.h/2-E.y)*Math.min(1,f$1*10));break;}if(!(!w.isAlive(j)||!ke(E))){switch(k.kind){case "coin":bt(w,j);break;case "star":{let a=Number(k.tag);ve[a]=true,w.vars.stars=ve.filter(Boolean).length,w.emit("star-collected",{index:a}),V(w,{kind:"ring",x:Ke(E.x),y:ze(E.y-E.h/2),color:"coin",size:oe()*2.4}),V(w,{kind:"flash",color:"coin"}),w.destroy(j);break}case "heart":O=Math.min(M,O+1),w.vars.lives=O,V(w,{kind:"ring",x:Ke(E.x),y:ze(E.y-E.h/2),color:"danger",size:oe()*1.6}),w.destroy(j);break;case "key":ue=true,V(w,{kind:"ring",x:Ke(E.x),y:ze(E.y-E.h/2),color:"coin",size:oe()*1.6}),w.destroy(j);break;case "chest":if(ue&&k.tag!=="open"){k.tag="open",ue=false;for(let S=0;S<15;S++)ae+=1+jn(w,"meta:greed"),q++;let a=Math.floor(ae);ae-=a,qe(w,"coins",a),V(w,{kind:"burst",x:Ke(E.x),y:ze(E.y-E.h/2),color:"coin",n:24,size:oe()*1.4}),V(w,{kind:"pop",x:Ke(E.x),y:ze(E.y-E.h*1.4),text:"+15",color:"coin",size:Math.round(oe()*.5)});}break;case "spring":p.vy>0&&m.y-(E.y-E.h)<.5&&(p.vy=-Math.sqrt(2*cr*Ip),p.jumps=1,V(w,{kind:"ring",x:Ke(E.x),y:ze(E.y-E.h),color:"accent",size:oe()*1.4}));break;case "checkpoint":if(k.tag!=="on"){k.tag="on",_={x:E.x,y:E.y};let a=w.need(j,f);a.shape==="sprite"&&(a.color="accent"),w.emit("checkpoint",{}),V(w,{kind:"ring",x:Ke(E.x),y:ze(E.y-E.h/2),color:"accent",size:oe()*2});}break;case "flag":if(fe){Xe(w,"cleared");return}break;case "walker":case "hopper":case "flyer":case "gunner":case "spiky":case "boss":{let a=p.vy>0&&m.y-(E.y-E.h)<.55&&k.kind!=="spiky";p.dash>0&&k.kind!=="boss"?it(w,j,"dash"):a?(p.vy=-Y()*.65,p.jumps=1,k.kind==="boss"?tn(w,j,"stomp"):it(w,j,"stomp")):ct(w,E.x);break}case "bullet":case "wave":ct(w,E.x),w.destroy(j);break;}if(G||ge())return}}let Pe=Ae(),re=Math.max(0,Math.min(Math.max(0,c-Pe),m.x-Pe*.4+p.facing*Pe*.08)),H=x;x+=(re-x)*Math.min(1,f$1*6),mo(w,(x-H)*oe()),w.vars.level_progress=Math.min(1,m.x/Math.max(1,c));let J=w.need(d,f);J.shape==="actor"&&(J.facing=p.facing>=0?1:-1,J.pose=p.grounded?Math.abs(p.vx)>.5?"run":"idle":"air",J.speed=Math.abs(p.vx)*oe(),J.alpha=$>0&&Math.floor(w.time*12)%2===0?.35:1),_t(w),It(w);}});function tn(w,f,m){let p=w.need(f,lt);p.safe>0||(p.hp--,p.safe=1,He(w,f,"hit"),V(w,{kind:"shake",power:1}),p.hp<=0&&(fe=true,w.emit(wp,{}),it(w,f,m),me("flag",c-2,8,.8,2.6)));}function pt(w,f,m,p,y,l){if(m.t-=l,m.vy+=cr*l,p.y=Math.min(m.baseY,p.y+m.vy*l),p.y>=m.baseY){if(m.tag==="slam-air"){m.tag="walk",m.t=1.6,V(w,{kind:"shake",power:1.4});for(let u of [-1,1]){let b=me("wave",p.x+u*1.2,m.baseY,.9,.6);b.vx=u*8*r.pace;}}m.vy=0;}if(m.tag==="walk"){if(m.dir=y<p.x?-1:1,p.x+=m.dir*1.4*r.pace*l,m.t<=0){let u=Math.floor(w.rng.next()*3);if(u===0)m.tag="charge",m.t=1.1,m.vx=m.dir*9*r.pace,et(w,f,"run");else if(u===1)m.tag="slam-air",m.vy=-Math.sqrt(2*cr*4),He(w,f,"jump");else {m.tag="walk",m.t=2.4;for(let b of [c-15,c-3])me("walker",b,m.baseY,.8,1).dir=b<p.x?1:-1;He(w,f,"cheer");}}}else m.tag==="charge"&&(p.x+=m.vx*l,(m.t<=0||ee(Se(Math.floor(p.x+Math.sign(m.vx)*1.2),Math.floor(m.baseY-1))))&&(m.tag="walk",m.t=1.8,et(w,f,"walk")));p.x=Math.max(c-17.5,Math.min(c-1.2,p.x));}Tt(e$1,"side",ce()+8*oe()+2),Ye();}};var Qt=5,Ns=6,$s=6,vn={blaster:{id:"blaster",art:"shot",color:"coin",damage:[10,13,15,18,24],cooldown:[.8,.7,.62,.55,.42],count:[1,1,2,2,3],pierce:[1,1,1,2,3]},blades:{id:"blades",art:"blade",color:"primary",damage:[8,10,12,14,19],cooldown:[.45,.42,.4,.38,.32],count:[2,2,3,3,5],reach:[.15,.16,.17,.18,.21]},aura:{id:"aura",art:"aura",color:"secondary",damage:[5,7,9,11,16],cooldown:[.5,.5,.45,.45,.4],count:[1,1,1,1,1],reach:[.11,.125,.14,.155,.19]},boomerang:{id:"boomerang",art:"boomerang",color:"accent",damage:[16,20,24,28,38],cooldown:[1.8,1.6,1.4,1.25,1],count:[1,1,2,2,3],reach:[.34,.36,.38,.4,.46]},lightning:{id:"lightning",art:"lightning",color:"primary",damage:[18,22,26,30,42],cooldown:[2,1.8,1.6,1.4,1.1],count:[2,3,4,5,7],reach:[.22,.23,.24,.25,.3]},drone:{id:"drone",art:"drone",color:"piece6",damage:[9,11,13,15,21],cooldown:[1,.9,.8,.7,.55],count:[1,1,2,2,3],reach:[.11,.11,.12,.12,.13]}},dr=Object.keys(vn),Gr={might:{id:"might",art:"fist",color:"danger",step:.12},haste:{id:"haste",art:"hourglass",color:"primary",step:.07},area:{id:"area",art:"aura",color:"secondary",step:.1},swift:{id:"swift",art:"boot",color:"accent",step:.08},vigor:{id:"vigor",art:"heart",color:"danger",step:20},armor:{id:"armor",art:"shield",color:"muted",step:1.5},magnet:{id:"magnet",art:"magnet",color:"danger",step:.3},luck:{id:"luck",art:"clover",color:"accent",step:.2},growth:{id:"growth",art:"crystal",color:"accent",step:.1}},Bs=Object.keys(Gr),Cn={swarm:{kind:"swarm",cast:"foe5",hp:.6,speed:118,size:.045,damage:5,xp:1,from:0,weight:3},grunt:{kind:"grunt",cast:"foe",hp:1,speed:95,size:.055,damage:8,xp:1,from:0,weight:4},archer:{kind:"archer",cast:"foe3",hp:1.2,speed:88,size:.055,damage:7,xp:2,from:.8,weight:2},brute:{kind:"brute",cast:"foe2",hp:5,speed:62,size:.085,damage:14,xp:5,from:1.6,weight:1.2},charger:{kind:"charger",cast:"foe4",hp:2.5,speed:80,size:.065,damage:12,xp:3,from:2.4,weight:1.4},bomber:{kind:"bomber",cast:"foe5",hp:1.5,speed:120,size:.055,damage:16,xp:2,from:3.2,weight:1.4},miniboss:{kind:"miniboss",cast:"boss",hp:45,speed:75,size:.12,damage:18,xp:25,from:99,weight:0},boss:{kind:"boss",cast:"boss",hp:160,speed:70,size:.16,damage:24,xp:0,from:99,weight:0}},zc=["swarm","grunt","archer","brute","charger","bomber"],zs=10;function Kr(e,t){let n=Math.max(1,Math.min(zs,Math.floor(e)));return {chapter:n,duration:Math.min(600,t+(n-1)*30),hp:1+(n-1)*.45,damage:1+(n-1)*.12,headStart:(n-1)*.4,firstClearGold:100+(n-1)*60}}var Fr=[{id:"hero",cast:"hero",weapon:"blaster",passive:null,gems:0},{id:"hero2",cast:"hero2",weapon:"blades",passive:"vigor",gems:150},{id:"hero3",cast:"hero3",weapon:"lightning",passive:"area",gems:300}],$i=[{id:"Might",var:"meta:might",art:"fist",color:"danger",perLevel:4,unit:"%",maxLevel:50,price:30,growth:.09},{id:"Vitality",var:"meta:hp",art:"heart",color:"danger",perLevel:8,unit:"",maxLevel:50,price:25,growth:.09},{id:"Armor",var:"meta:armor",art:"shield",color:"muted",perLevel:.5,unit:"",maxLevel:30,price:40,growth:.1},{id:"Swiftness",var:"meta:speed",art:"boot",color:"accent",perLevel:2,unit:"%",maxLevel:25,price:35,growth:.1},{id:"Magnet",var:"meta:magnet",art:"magnet",color:"danger",perLevel:6,unit:"%",maxLevel:25,price:20,growth:.1},{id:"Luck",var:"meta:luck",art:"clover",color:"accent",perLevel:5,unit:"%",maxLevel:25,price:30,growth:.1},{id:"Growth",var:"meta:growth",art:"crystal",color:"accent",perLevel:3,unit:"%",maxLevel:30,price:30,growth:.1},{id:"Recovery",var:"meta:regen",art:"potion",color:"accent",perLevel:.1,unit:"",maxLevel:30,price:45,growth:.1}],Bi="kit-survivors",Wc=30,Hc=10,Vc={game:"survivors",character:Bi,stats:$i,heroes:Fr,levels:zs,firstClearGold:e=>Kr(e,300).firstClearGold,stars:0};var Hs=b("survivors.hero"),$e=b("survivors.foe"),fr=b("survivors.shot"),Nn=b("survivors.bullet"),Xt=b("survivors.drop"),Xn=b("survivors.blade"),pr=b("survivors.aura"),ur=b("survivors.drone"),Do=b("survivors.boomerang"),Ao=b("survivors.zap"),Ur=b("survivors.halo"),Gc=b("survivors.hud"),Yn=b("survivors.joystick"),zi="level-up",Wi="upgrade-picked",Hi="upgrade-pick",Vi="upgrade-reroll";var Vs="boss-spawned",Gi="boss-defeated",Ki=e=>[...Object.entries(e.weapons).map(([t,n])=>`w:${t}:${n}`),...Object.entries(e.passives).map(([t,n])=>`p:${t}:${n}`)].join(","),Kc=e=>{let t={},n={};for(let s of String(e??"").split(",")){let[r,o,c]=s.split(":");r==="w"&&o&&o in vn?t[o]=Number(c):r==="p"&&o&&o in Gr&&(n[o]=Number(c));}return {weapons:t,passives:n}},Fi=e=>e.map(t=>`${t.kind}:${t.id}:${t.level}`).join(","),Fc=e=>String(e??"").split(",").filter(Boolean).map(t=>{let[n,s,r]=t.split(":");return {kind:n,id:s??"",level:Number(r??1)}}),Ws=e=>e.vars.reviving===true,In=(e,t)=>{let n=Number(e.vars[t]??0);return Number.isFinite(n)?n:0},Gs={id:"survivors",version:2,engines:["phaser"],requires:["round"],params:{duration:{type:"number",default:300,min:20,max:900},heroSpeed:{type:"number",default:260,min:80,max:800},hp:{type:"number",default:100,min:10,max:2e3},spawnRate:{type:"number",default:1.2,min:.1,max:10},spawnGrowth:{type:"number",default:.9,min:0,max:10},foeHp:{type:"number",default:10,min:1,max:1e3},foeHpGrowth:{type:"number",default:.45,min:0,max:5},foeDamage:{type:"number",default:1,min:.1,max:10},foeSpeed:{type:"number",default:1,min:.3,max:3},damage:{type:"number",default:1,min:.1,max:100},shotSpeed:{type:"number",default:640,min:100,max:2e3},xpFirst:{type:"number",default:4,min:1,max:100,integer:true},xpGrowth:{type:"number",default:1.25,min:1,max:2},coinRate:{type:"number",default:.25,min:0,max:1},killScore:{type:"number",default:10,min:0,max:1e3,integer:true},bossScore:{type:"number",default:500,min:0,max:1e5,integer:true},clearBonus:{type:"number",default:1e3,min:0,max:1e5,integer:true},graceTime:{type:"number",default:.6,min:0,max:5},maxFoes:{type:"number",default:46,min:5,max:160,integer:true},minibossEvery:{type:"number",default:120,min:0,max:900},eliteEvery:{type:"number",default:50,min:0,max:900}},setup({world:e$1,params:t,mode:n}){let s=e$1.rng.stream("survivors"),r=_r(e$1),o=a=>nn(t,a),c=null,d=null,x=0,_={},O={},M={},$=0,G=0,B=0,Q=1,ae=0,q=0,ue=[],fe="level",ie=0,ve=0,se=0,Me=false,De=0,ge=0,oe=300,ce=Kr(1,300),Ae=false,Se=null,ee=0,xe=0,je=0,we=0,te=null,me=0,Ee=0,Re=false,Ce=new Map,Y={maxHp:100,hp:100,regen:0,armor:0,speed:260,magnet:80,might:1,haste:1,area:1,luck:1,growth:1},Le=()=>Math.min(Ie(e$1).w,Ie(e$1).h),Ye=()=>Le()/720,at=()=>Le()*.07,_e=()=>{let a=Ie(e$1);return {x:a.w/2,y:a.h/2}},Pt=()=>{let a=L=>O[L]??0,S=Y.maxHp;Y.might=(1+In(e$1,"meta:might")+.12*a("might"))*o("damage"),Y.haste=Math.max(.4,1-.07*a("haste")),Y.area=1+.1*a("area"),Y.speed=o("heroSpeed")*Ye()*(1+In(e$1,"meta:speed")+.08*a("swift")),Y.maxHp=o("hp")+In(e$1,"meta:hp")+20*a("vigor"),Y.regen=In(e$1,"meta:regen")+.3*a("vigor"),Y.armor=In(e$1,"meta:armor")+1.5*a("armor"),Y.magnet=Le()*.12*(1+In(e$1,"meta:magnet")+.3*a("magnet")),Y.luck=1+In(e$1,"meta:luck")+.2*a("luck"),Y.growth=1+In(e$1,"meta:growth")+.1*a("growth"),Y.maxHp>S&&(Y.hp+=Y.maxHp-S),Y.hp=Math.min(Y.hp,Y.maxHp),e$1.vars.survivors_build=Ki({weapons:_,passives:O});},Ge=a=>Math.ceil(o("xpFirst")*Math.pow(a,o("xpGrowth"))),Xe=()=>Fr.find(a=>a.id===e$1.vars["meta:hero"])??Fr[0],tt=()=>{let a=_e(),S=at();(c===null||!e$1.isAlive(c))&&(c=e$1.create(),e$1.set(c,Hs,{size:S})),e$1.need(c,Hs).size=S,e$1.set(c,e,{x:a.x,y:a.y}),e$1.set(c,f,{shape:"actor",cast:Xe().cast,h:S*2.3,feet:S*.6,pose:"idle",depth:Vt(e$1,a.y)});},ot=(a,S,L,i)=>{let h=Ce.get(a);(h===void 0||!e$1.isAlive(h))&&(h=e$1.create(),e$1.set(h,Gc,{id:a}),Ce.set(a,h)),e$1.set(h,e,{x:S,y:L}),e$1.set(h,f,i);},ct=a=>{let S=Ce.get(a);S!==void 0&&e$1.destroy(S),Ce.delete(a);},it=()=>{for(let a of Ce.values())e$1.destroy(a);Ce.clear(),rt(e$1,Gc);},bt=(a,S,L,i,h,D,R,v=41)=>{let g=Math.max(0,Math.min(1,Math.round(D*100)/100));ot(`${a}:bg`,S,L,{shape:"rect",w:i,h,color:"#000000",alpha:.45,radius:h/2,depth:v});let T=Math.max(0,(i-4)*g);T<1?ct(`${a}:fill`):ot(`${a}:fill`,S-(i-4)/2+T/2,L,{shape:"rect",w:T,h:h-4,color:R,radius:(h-4)/2,depth:v+.01});},Ke=a=>{let S=Ie(a),L=Le(),i=S.h*.085,h=S.w*.9,D=Math.max(10,L*.026);bt("xp",S.w/2,i,h,D,B/Ge(Q),"accent"),ot("lv",S.w/2+h/2-L*.04,i+D*1.6,{shape:"text",text:`Lv ${Q}`,size:Math.round(L*.032),color:"text",bold:true,depth:42});let R=i+L*.075;if(Se!==null&&a.isAlive(Se)&&a.has(Se,$e)){let F=a.need(Se,$e);bt("boss",S.w/2,R,S.w*.62,Math.max(14,L*.034),F.hp/F.maxHp,"danger"),ot("time",S.w/2,R-L*.05,{shape:"text",text:F.kind==="boss"?"BOSS":"MINI BOSS",size:Math.round(L*.036),color:"danger",bold:true,depth:42}),a.vars.boss_hp=F.hp/F.maxHp;}else ct("boss:bg"),ct("boss:fill"),ot("time",S.w/2,R,{shape:"text",text:Zo(Number(a.vars.time_left??0)),size:Math.round(L*.05),color:"text",bold:true,depth:42}),a.vars.boss_hp=0;let v=Math.round(L*.036);ot("kills:i",S.w*.06,R,{shape:"sprite",art:"skull",w:v*1.1,h:v*1.1,color:"text",depth:42}),ot("kills",S.w*.06+v*.75+String(ve).length*v*.28,R,{shape:"text",text:String(ve),size:v,color:"text",bold:true,depth:42});let g=L*.05,T=0,C=new Set,P=(F,de,le,he,pe,We)=>{C.add(F),ot(`b:${F}`,pe,We,{shape:"sprite",art:de,w:g,h:g,color:le,alpha:.95,depth:41}),ot(`b:${F}:l`,pe+g*.38,We+g*.36,{shape:"text",text:he>=5?"\u2605":String(he),size:Math.round(g*.42),color:he>=5?"coin":"text",bold:true,depth:42});};for(let[F,de]of Object.entries(_)){let le=vn[F];P(F,le.art,le.color,de??1,S.w*.06+T*g*1.12,R+L*.075),T++;}T=0;for(let[F,de]of Object.entries(O)){let le=Gr[F];P(F,le.art,le.color,de??1,S.w*.06+T*g*.95,R+L*.075+g*1.1),T++;}for(let F of [...Ce.keys()])if(F.startsWith("b:")){let de=F.slice(2).replace(/:l$/,"");C.has(de)||ct(F);}let z=at(),Z=_e();bt("hp",Z.x,Z.y+z*1.05,z*1.7,Math.max(7,L*.013),Y.hp/Y.maxHp,Y.hp/Y.maxHp>.35?"accent":"danger",40);},ze=(a=-1)=>{let S=Ie(e$1),L=Le()*.08,i=a>=0?a:s.int(0,3);return {x:i===0?-L:i===1?S.w+L:s.range(-L,S.w+L),y:i===2?-L:i===3?S.h+L:s.range(-L,S.h+L)}},_t=()=>o("foeHp")*ce.hp*(1+o("foeHpGrowth")*(ge/60)),Fe=(a,S,L=false)=>{let i=Cn[a],h=a==="boss"||a==="miniboss",D=Le()*i.size*(L?1.3:1),R=_t()*i.hp*(L?8:1),v=Et(e$1,S.x,S.y,{shape:"actor",cast:i.cast,variant:s.int(0,99),h:D*(h?1.9:a==="brute"?1.75:2.2),feet:D*.6,pose:a==="brute"||h?"walk":"run",depth:Vt(e$1,S.y)},{type:$e,data:{kind:a,hp:R,maxHp:R,speed:i.speed*Ye()*o("foeSpeed")*(1+Math.min(.5,ge/600)),size:D,damage:i.damage*ce.damage*o("foeDamage")*(L?1.4:1),xp:i.xp*(L?5:1),elite:L,t:s.range(0,1.5),phase:"walk",vx:0,vy:0,hurtAt:{},next:0}});return (L||h)&&Et(e$1,S.x,S.y+D*.5,{shape:"sprite",art:"aura_field",w:D*2.2,h:D*1.1,color:h?"danger":"coin",alpha:.85,depth:2},{type:Ur,data:{of:v}}),v},Ct=()=>{let a=ge/60+ce.headStart,S=pn(n,"foes",zc),L=S.filter(R=>Cn[R].from<=a),i=L.length>0?L:[S.reduce((R,v)=>Cn[R].from<=Cn[v].from?R:v)],h=0;for(let R of i)h+=Cn[R].weight;let D=s.range(0,h);for(let R of i)if(D-=Cn[R].weight,D<=0)return R;return i[0]??"grunt"},Ht=()=>e$1.query($e).length,It=(a,S)=>{let L=ge/60+ce.headStart,i=o("spawnRate")*(1+o("spawnGrowth")*L);for(me>0&&(me-=S,i*=.25),Ae&&(i*=.45),te&&(te.left-=S,i*=2.6),De+=S*i;De>=1;)De-=1,!(Ht()>=o("maxFoes"))&&Fe(Ct(),ze(te?te.side:-1));if(te&&te.left<=0&&(te=null),!Ae){if(ge>=je){je=ge+s.range(26,36);let h=we++%3;if(h===0){let D=_e(),R=12+Math.min(12,Math.floor(L*2)),v=Le()*.62;for(let g=0;g<R;g++){let T=g/R*Math.PI*2;Fe(L>3?"grunt":"swarm",{x:D.x+Math.cos(T)*v,y:D.y+Math.sin(T)*v*1.25});}V(a,{kind:"flash",color:"danger"});}else h===1?te={left:4,side:s.int(0,3)}:me=5;}if(o("eliteEvery")>0&&ge>=xe){xe=ge+o("eliteEvery");let h=Ct();Fe(h==="swarm"?"grunt":h,ze(),true);}o("minibossEvery")>0&&ge>=ee&&oe-ge>30&&(ee=ge+o("minibossEvery"),(Se===null||!a.isAlive(Se))&&(Se=Fe("miniboss",ze()),a.emit(Vs,{kind:"miniboss"}),V(a,{kind:"shake",power:1.2})));}},tn=a=>{Ae=true,a.vars.time_left=0;let S=_e();for(let L of a.query($e)){let i=a.get(L,$e);if(!i||i.kind==="miniboss")continue;let h=a.need(L,e);Math.hypot(h.x-S.x,h.y-S.y)<Le()*.3&&w(a,L,null,false);}Se=Fe("boss",{x:S.x,y:S.y-Ie(a).h*.42}),V(a,{kind:"shake",power:2}),V(a,{kind:"flash",color:"danger"}),a.emit(Vs,{kind:"boss"});},pt=(a,S,L,i=1)=>{let h=at(),D=a==="xp"?{shape:"sprite",art:"crystal",w:h*(i>=25?.62:i>=5?.5:.38),h:h*(i>=25?.62:i>=5?.5:.38),color:i>=25?"secondary":i>=5?"primary":"accent",depth:3}:a==="coin"?{shape:"sprite",art:"coin",w:h*.4,h:h*.4,depth:3}:a==="food"?{shape:"sprite",art:"heart",w:h*.5,h:h*.5,depth:3}:a==="magnet"?{shape:"sprite",art:"magnet",w:h*.6,h:h*.6,depth:3}:a==="bomb"?{shape:"sprite",art:"bomb",w:h*.6,h:h*.6,depth:3}:{shape:"sprite",art:"chest",w:h*.9,h:h*.9,color:"coin",depth:3};Et(e$1,S,L,D,{type:Xt,data:{kind:a,value:i,pulled:false}});},w=(a,S,L,i=true)=>{let h=a.get(S,$e);if(!h)return;let D=a.need(S,e),R=D.x,v=D.y;a.remove(S,$e);for(let C of a.query(Ur))a.need(C,Ur).of===S&&a.destroy(C);et(a,S,"die");let g=a.need(S,f);if(g.shape==="actor"&&(g.depth=Vt(a,v)-.2),rr(a,S,1.4),V(a,{kind:"burst",x:R,y:v,color:"danger",n:h.elite||h.kind==="boss"?22:8,size:h.size*1.4}),!i)return;ve+=1,a.vars.kills=ve,a.emit("enemy-defeated",{kind:h.kind,elite:h.elite,by:L});let T=at();if(h.xp>0&&pt("xp",R,v+h.size*.4,h.xp),s.chance(Math.min(.95,o("coinRate")*Y.luck))&&pt("coin",R+T*.3,v+h.size*.4),s.chance(.012*Y.luck)&&pt("food",R-T*.3,v),s.chance(.004)&&!a.query(Xt).some(C=>a.need(C,Xt).kind==="magnet")&&pt("magnet",R,v-T*.3),s.chance(.004)&&pt("bomb",R,v-T*.3),h.elite||h.kind==="miniboss"){pt("chest",R,v);for(let C=0;C<3;C++)pt("coin",R+s.range(-T,T),v+s.range(-T,T));}if(h.kind==="bomber"){let C=Le()*.11*Y.area;V(a,{kind:"ring",x:R,y:v,color:"piece6",size:C*2});for(let P of a.query($e)){let z=a.need(P,e);Math.hypot(z.x-R,z.y-v)<C&&f$1(a,P,_t()*2.5,"blast");}}if((h.kind==="miniboss"||h.kind==="boss")&&(se+=1,a.vars.bosses=se,S===Se&&(Se=null),a.emit(Gi,{kind:h.kind}),V(a,{kind:"shake",power:2}),h.kind==="boss")){for(let C of a.query($e))w(a,C,null,false);u(a,"cleared");}},f$1=(a,S,L,i)=>{if(!a.has(S,$e))return;let h=a.need(S,$e);if(h.hp-=L,(h.elite||h.kind==="boss"||h.kind==="miniboss")&&Ee>0){Ee-=1;let D=a.need(S,e);V(a,{kind:"pop",x:D.x+s.range(-10,10),y:D.y-h.size,text:String(Math.round(L)),color:"text",size:Math.round(Le()*.03)});}h.hp<=0?w(a,S,i):h.kind!=="boss"&&h.kind!=="miniboss"&&He(a,S,"hit");},m=(a,S,L,i,h)=>{let D=a.get(S,$e);if(!D||D.kind==="boss"||D.kind==="miniboss"||D.phase==="dash")return;let R=a.need(S,e),v=R.x-L,g=R.y-i,T=Math.hypot(v,g)||1;R.x+=v/T*h,R.y+=g/T*h;},p=(a,S)=>{if(ie>0||c===null)return;let L=Math.max(1,S-Y.armor);Y.hp-=L,ie=o("graceTime"),a.vars.hp=Math.max(0,Math.ceil(Y.hp)),a.emit("player-hit",{hp:a.vars.hp}),He(a,c,"hit"),V(a,{kind:"flash",color:"danger"}),V(a,{kind:"shake",power:.8});let i=_e();V(a,{kind:"pop",x:i.x,y:i.y-at()*1.4,text:`-${Math.round(L)}`,color:"danger",size:Math.round(Le()*.034)}),Y.hp<=0&&y(a);},y=a=>{if(a.vars.revive_ready===true&&!Me){a.vars.reviving=true,Ot(a),d=null,a.emit(Gt,{});return}u(a,"died");},l=a=>{if(a.vars.reviving!==true)return;Me=true,a.vars.reviving=false,Y.hp=Y.maxHp,a.vars.hp=Math.ceil(Y.hp),ie=2.5;let S=_e();for(let L of a.query($e)){let i=a.need(L,e);if(Math.hypot(i.x-S.x,i.y-S.y)<Le()*.4){let h=a.get(L,$e);if(!h)continue;h.kind==="boss"||h.kind==="miniboss"?m(a,L,S.x,S.y,Le()*.2):w(a,L,"revive");}}for(let L of a.query(Nn))a.destroy(L);V(a,{kind:"ring",x:S.x,y:S.y,color:"coin",size:Le()*.8}),V(a,{kind:"flash",color:"coin"}),c!==null&&et(a,c,"idle");},u=(a,S)=>{if(!Ze(a)||Re)return;Re=true;let L=Math.floor(ge);S==="cleared"&&a.vars["meta:first_clear"]===true&&qe(a,"coins",ce.firstClearGold),a.vars.score=ve*o("killScore")+L*5+se*o("bossScore")+(S==="cleared"?o("clearBonus")*ce.chapter:0),a.vars.choosing=false,a.vars.reviving=false,a.emit(Bt,{reason:S,stats:{kills:ve,seconds:L,bosses:se,chapter:ce.chapter,level:Q,cleared:S==="cleared"}});},b=pn(n,"weapons",dr),A=()=>{let a=[],S=Object.keys(_).length,L=Object.keys(O).length;for(let h of dr){let D=_[h];D!==void 0&&D<5?a.push({o:{kind:"weapon",id:h,level:D+1},weight:3}):D===void 0&&S<6&&b.includes(h)&&a.push({o:{kind:"weapon",id:h,level:1},weight:1.6});}for(let h of Bs){let D=O[h];D!==void 0&&D<5?a.push({o:{kind:"passive",id:h,level:D+1},weight:2}):D===void 0&&L<6&&a.push({o:{kind:"passive",id:h,level:1},weight:1.2});}let i=[];for(;i.length<3&&a.length>0;){let h=0;for(let v of a)h+=v.weight;let D=s.range(0,h),R=0;for(;R<a.length-1&&(D-=a[R].weight,!(D<=0));R++);i.push(a[R].o),a.splice(R,1);}return i.length<3&&i.push({kind:"heal",id:"heal",level:1}),i.length<3&&i.push({kind:"gold",id:"gold",level:1}),i},I=(a,S)=>{ue=A(),fe=S,a.vars.choosing=true,a.vars.survivors_offer=Fi(ue),Ot(a),d=null,rt(a,Yn);let L=_e();V(a,{kind:"ring",x:L.x,y:L.y,color:S==="chest"?"coin":"accent",size:Le()*.5}),a.emit(zi,{level:Q,source:S,options:ue,build:{weapons:{..._},passives:{...O}}});},N=a=>{a.vars.choosing===true||!Ze(a)||(ae>0?(ae-=1,I(a,"level")):q>0&&(q-=1,I(a,"chest")));},U=(a,S)=>{S.kind==="weapon"?(_[S.id]=S.level,M[S.id]=0):S.kind==="passive"?O[S.id]=S.level:S.kind==="heal"?Y.hp=Math.min(Y.maxHp,Y.hp+Y.maxHp*.3):S.kind==="gold"&&qe(a,"coins",10),Pt(),a.vars.hp=Math.ceil(Y.hp),ye(a);},X=(a,S)=>{if(a.vars.choosing!==true)return;let L=ue[S];L&&(U(a,L),ue=[],a.vars.choosing=false,a.vars.survivors_offer="",a.emit(Wi,{kind:L.kind,id:L.id,level:L.level,source:fe}),N(a));},ye=a=>{let S=_e(),L=Le(),i=_.blades,h=i?vn.blades.count[i-1]:0,D=a.query(Xn);for(let P of D)a.need(P,Xn).index>=h&&a.destroy(P);for(let P=0;P<h;P++)D.some(z=>a.isAlive(z)&&a.need(z,Xn).index===P)||Et(a,S.x,S.y,{shape:"sprite",art:"blade",w:L*.075,h:L*.075,color:"primary",depth:31},{type:Xn,data:{index:P}});for(let P of a.query(Xn)){let z=a.need(P,f);z.shape==="sprite"&&(z.w=z.h=L*(i===5?.095:.075)*Math.sqrt(Y.area));}let R=_.aura,v=a.query(pr);if(R){let P=L*vn.aura.reach[R-1]*Y.area;v.length===0&&Et(a,S.x,S.y,{shape:"sprite",art:"aura_field",w:P*2,h:P*2,color:R===5?"coin":"secondary",alpha:.9,depth:1.5},{type:pr,data:{r:P}});for(let z of a.query(pr)){a.need(z,pr).r=P;let Z=a.need(z,f);Z.shape==="sprite"&&(Z.w=Z.h=P*2,Z.color=R===5?"coin":"secondary");}}else for(let P of v)a.destroy(P);let g=_.drone,T=g?vn.drone.count[g-1]:0,C=a.query(ur);for(let P of C)a.need(P,ur).index>=T&&a.destroy(P);for(let P=0;P<T;P++)C.some(z=>a.isAlive(z)&&a.need(z,ur).index===P)||Et(a,S.x,S.y,{shape:"sprite",art:"drone",w:L*.06,h:L*.06,color:"piece6",depth:33},{type:ur,data:{index:P,cd:.3*P}});},ke=(a,S,L,i,h)=>{let D=null,R=i;for(let v of a.query($e)){if(h&&h.includes(v))continue;let g=a.need(v,e),T=Math.hypot(g.x-S,g.y-L);T<R&&(R=T,D=v);}return D},Ue=(a,S,L,i,h,D,R,v,g=1)=>{let T=at()*g,C=o("shotSpeed")*Ye(),P=Et(a,S,L,{shape:"sprite",art:"shot",w:T*.95,h:T*.48,color:v,depth:30},{type:fr,data:{vx:Math.cos(i)*C,vy:Math.sin(i)*C,life:1.4,damage:h,pierce:D,hit:[],by:R}});a.need(P,e).rotation=i;},st=(a,S,L)=>{if(c===null)return;let i=_e(),h=Le(),D=at();for(let R of dr){let v=_[R];if(v===void 0)continue;let g=vn[R],T=v-1,C=g.damage[T]*Y.might;if(M[R]=(M[R]??0)-S,R==="blaster"&&M[R]<=0){let P=ke(a,i.x,i.y,h*.75);if(P===null){M[R]=0;continue}M[R]=g.cooldown[T]*Y.haste;let z=a.need(P,e),Z=Math.atan2(z.y-(i.y-D*.3),z.x-i.x),F=g.count[T];for(let le=0;le<F;le++)Ue(a,i.x,i.y-D*.3,Z+(le-(F-1)/2)*.16,C,g.pierce[T],"blaster",v===5?"piece6":"coin",v===5?1.25:1);He(a,c,"attack");let de=a.need(c,f);de.shape==="actor"&&(de.actRate=1/Math.max(.2,g.cooldown[T]*Y.haste),L||(de.facing=z.x>=i.x?1:-1));}else if(R==="blades"){let P=h*g.reach[T]*Y.area,z=3+.35*v;$+=z*S;let Z=a.query(Xn),F=Z.length||1;for(let de of Z){let le=a.need(de,Xn),he=$+le.index/F*Math.PI*2,pe=a.need(de,e);pe.x=i.x+Math.cos(he)*P,pe.y=i.y-D*.2+Math.sin(he)*P,pe.rotation=$*2.2;let We=h*.04*Math.sqrt(Y.area);for(let Je of a.query($e)){let dt=a.get(Je,$e);if(!dt)continue;let Dt=a.need(Je,e);Math.hypot(Dt.x-pe.x,Dt.y-pe.y)>We+dt.size*.55||a.time-(dt.hurtAt.blades??-9)<g.cooldown[T]||(dt.hurtAt.blades=a.time,f$1(a,Je,C,"blades"),m(a,Je,i.x,i.y,h*.012));}}}else if(R==="aura"){let P=a.query(pr)[0];if(P===void 0)continue;let z=a.need(P,e);if(z.x=i.x,z.y=i.y+D*.3,a.need(P,e).rotation=a.time*.6,M[R]>0)continue;M[R]=g.cooldown[T];let Z=a.need(P,pr).r;for(let F of a.query($e)){let de=a.need(F,e),le=a.get(F,$e);!le||Math.hypot(de.x-i.x,de.y-i.y)>Z+le.size*.3||(f$1(a,F,C,"aura"),m(a,F,i.x,i.y,h*.008));}}else if(R==="boomerang"&&M[R]<=0){let P=ke(a,i.x,i.y,h*.8);if(P===null){M[R]=0;continue}M[R]=g.cooldown[T]*Y.haste;let z=a.need(P,e),Z=Math.atan2(z.y-i.y,z.x-i.x),F=g.count[T];for(let de=0;de<F;de++){let le=Z+de*Math.PI*2/F,he=h*(v===5?.085:.065);Et(a,i.x,i.y,{shape:"sprite",art:"boomerang",w:he,h:he,color:"accent",depth:32},{type:Do,data:{dx:Math.cos(le),dy:Math.sin(le),dist:0,range:h*g.reach[T]*Y.area,back:false,damage:C,hit:[]}});}}else if(R==="lightning"&&M[R]<=0){let P=ke(a,i.x,i.y,h*.55);if(P===null){M[R]=0;continue}M[R]=g.cooldown[T]*Y.haste;let z=[],Z={x:i.x,y:i.y-D},F=P;for(let de=0;de<g.count[T]&&F!==null;de++){let le=a.get(F,$e);if(!le)break;let he=a.need(F,e),pe={x:he.x,y:he.y-le.size*.4};Pe(a,Z,pe,v===5?"coin":"primary"),z.push(F);let We=ke(a,he.x,he.y,h*g.reach[T]*Y.area,z);f$1(a,F,C,"lightning"),Z=pe,F=We;}}else if(R==="drone"){G+=1.8*S;let P=a.query(ur),z=P.length||1,Z=h*g.reach[T];for(let F of P){let de=a.need(F,ur),le=G+de.index/z*Math.PI*2,he=a.need(F,e);if(he.x=i.x+Math.cos(le)*Z,he.y=i.y-D*1.1+Math.sin(le)*Z*.5,de.cd-=S,de.cd>0)continue;let pe=ke(a,he.x,he.y,h*.6);if(pe===null){de.cd=0;continue}de.cd=g.cooldown[T]*Y.haste;let We=a.need(pe,e);Ue(a,he.x,he.y,Math.atan2(We.y-he.y,We.x-he.x),C,v===5?2:1,"drone","piece6",.7);}}}},Pe=(a,S,L,i)=>{let h=Math.hypot(L.x-S.x,L.y-S.y),D=Et(a,(S.x+L.x)/2,(S.y+L.y)/2,{shape:"sprite",art:"zap",w:Math.max(8,h),h:Le()*.035,color:i,depth:34},{type:Ao,data:{life:.16}});a.need(D,e).rotation=Math.atan2(L.y-S.y,L.x-S.x);},re=(a,S)=>{let L=_e(),i=at(),h=Le(),D=Ie(a),R=Math.hypot(D.w,D.h)*.75,v=a.query($e);for(let T of v){let C=a.get(T,$e);if(!C)continue;let P=a.need(T,e),z=L.x-P.x,Z=L.y-P.y,F=Math.hypot(z,Z)||1;z/=F,Z/=F;let de=C.kind==="boss"||C.kind==="miniboss";if(F>(de?R*1.3:R)){let Je=ze();P.x=Je.x,P.y=Je.y;continue}C.t-=S;let le=C.speed,he=z,pe=Z;if(C.kind==="archer"){let Je=h*.3;if(F<Je?le*=-0.6:F<Je*1.4&&(le=0),C.t<=0&&F<h*.6){C.t=2.4,He(a,T,"attack");let dt=260*Ye();Et(a,P.x,P.y-C.size*.6,{shape:"sprite",art:"orb",w:h*.03,h:h*.03,color:"danger",depth:29},{type:Nn,data:{vx:z*dt,vy:Z*dt,life:3,damage:C.damage}});}}else (C.kind==="charger"||C.kind==="miniboss"||C.kind==="boss")&&(C.phase==="walk"&&C.t<=0&&F<h*(de?.6:.38)?C.kind!=="boss"||C.next%3===0?(C.phase="wind",C.t=de?.7:.55,He(a,T,"surprised"),V(a,{kind:"ring",x:P.x,y:P.y,color:"danger",size:C.size*2.2})):H(a,T,C):C.phase==="wind"?(le=0,C.t<=0&&(C.phase="dash",C.t=de?.6:.45,C.vx=z,C.vy=Z)):C.phase==="dash"&&(le=C.speed*(de?4:3.6),he=C.vx,pe=C.vy,C.t<=0&&(C.phase="walk",C.t=de?C.hp<C.maxHp/2?1.6:2.4:2.8,C.kind==="boss"&&(C.next+=1))));P.x+=he*le*S,P.y+=pe*le*S;let We=a.need(T,f);if(We.shape==="actor"&&(Math.abs(L.x-P.x)>C.size*.4&&(We.facing=L.x>=P.x?1:-1),We.depth=Vt(a,P.y),We.speed=Math.abs(le),We.pose=le===0?"idle":C.kind==="brute"||de?"walk":"run"),F<(C.size+i)/2){if(C.kind==="bomber"){V(a,{kind:"ring",x:P.x,y:P.y,color:"piece6",size:h*.22}),p(a,C.damage),w(a,T,null,false);continue}if(ie<=0&&(He(a,T,"attack"),p(a,C.damage),Re||Ws(a)))return}}let g=a.query($e);for(let T=0;T<g.length;T++){let C=a.need(g[T],$e),P=a.need(g[T],e);for(let z=T+1;z<g.length;z++){let Z=a.need(g[z],$e),F=a.need(g[z],e),de=(C.size+Z.size)*.42,le=F.x-P.x,he=F.y-P.y,pe=le*le+he*he;if(pe>=de*de||pe===0)continue;let We=Math.sqrt(pe),Je=(de-We)*.5,dt=le/We*Je,Dt=he/We*Je,_n=C.kind==="boss"||C.kind==="miniboss",yn=Z.kind==="boss"||Z.kind==="miniboss";_n||(P.x-=dt,P.y-=Dt),yn||(F.x+=dt,F.y+=Dt);}}for(let T of a.query(Ur)){let C=a.need(T,Ur).of;if(!a.isAlive(C)||!a.has(C,$e)){a.destroy(T);continue}let P=a.need(C,e),z=a.need(T,e);z.x=P.x,z.y=P.y+a.need(C,$e).size*.55;let Z=a.need(T,f);Z.shape==="sprite"&&(Z.alpha=.6+.3*Math.sin(a.time*6));}},H=(a,S,L)=>{let i=a.need(S,e),h=Le(),D=L.next%3;if(L.next+=1,L.t=L.hp<L.maxHp/2?1.4:2.2,D===1){let R=L.hp<L.maxHp/2?18:12,v=220*Ye();for(let g=0;g<R;g++){let T=g/R*Math.PI*2+a.time;Et(a,i.x,i.y-L.size*.4,{shape:"sprite",art:"orb",w:h*.035,h:h*.035,color:"danger",depth:29},{type:Nn,data:{vx:Math.cos(T)*v,vy:Math.sin(T)*v,life:3.5,damage:L.damage*.6}});}He(a,S,"attack"),V(a,{kind:"ring",x:i.x,y:i.y,color:"danger",size:L.size*3});}else {for(let R=0;R<6;R++){let v=R/6*Math.PI*2;Fe("swarm",{x:i.x+Math.cos(v)*L.size*1.6,y:i.y+Math.sin(v)*L.size*1.6});}He(a,S,"cheer");}},J=(a,S)=>{let L=Ie(a),i=_e(),h=at(),D=Le()*.2;for(let v of a.query(fr)){let g=a.need(v,fr),T=a.need(v,e);if(T.x+=g.vx*S,T.y+=g.vy*S,g.life-=S,g.life<=0||T.x<-D||T.y<-D||T.x>L.w+D||T.y>L.h+D){a.destroy(v);continue}for(let C of a.query($e)){if(g.hit.includes(C))continue;let P=a.get(C,$e);if(!P)continue;let z=a.need(C,e);if(!(Math.abs(z.x-T.x)>P.size/2+4||Math.abs(z.y-(T.y+P.size*.2))>P.size*.9+4)&&(g.hit.push(C),V(a,{kind:"burst",x:T.x,y:T.y,color:"coin",n:4,size:h*.5}),m(a,C,i.x,i.y,Le()*.01),f$1(a,C,g.damage,g.by),g.hit.length>=g.pierce)){a.destroy(v);break}}}for(let v of a.query(Nn)){let g=a.need(v,Nn),T=a.need(v,e);if(T.x+=g.vx*S,T.y+=g.vy*S,g.life-=S,g.life<=0){a.destroy(v);continue}if(Math.hypot(T.x-i.x,T.y-(i.y-h*.3))<h*.55&&(a.destroy(v),p(a,g.damage),Re||Ws(a)))return}let R=Le()*1.5;for(let v of a.query(Do)){let g=a.need(v,Do),T=a.need(v,e);if(T.rotation=(T.rotation??0)+S*14,g.back){let P=i.x-T.x,z=i.y-T.y,Z=Math.hypot(P,z)||1;if(Z<h*.5){a.destroy(v);continue}T.x+=P/Z*R*S,T.y+=z/Z*R*S;}else {let P=R*S*Math.max(.35,1-g.dist/g.range);T.x+=g.dx*P,T.y+=g.dy*P,g.dist+=P,g.dist>=g.range*.98&&(g.back=true,g.hit=[]);}let C=a.need(v,f).w*.5;for(let P of a.query($e)){if(g.hit.includes(P))continue;let z=a.get(P,$e);if(!z)continue;let Z=a.need(P,e);Math.hypot(Z.x-T.x,Z.y-T.y)>C+z.size*.5||(g.hit.push(P),m(a,P,T.x,T.y,Le()*.015),f$1(a,P,g.damage,"boomerang"));}}for(let v of a.query(Ao)){let g=a.need(v,Ao);g.life-=S;let T=a.need(v,f);T.shape==="sprite"&&(T.alpha=Math.max(0,g.life/.16)),g.life<=0&&a.destroy(v);}},j$1=(a,S)=>{let L=_e(),i=at(),D=a.query(Xt).filter(R=>a.need(R,Xt).kind==="xp");if(D.length>90){let R=D.map(P=>({e:P,d:Math.hypot(a.need(P,e).x-L.x,a.need(P,e).y-L.y)})).sort((P,z)=>z.d-P.d).slice(0,30),v=0,g=a.need(R[0].e,e),T=g.x,C=g.y;for(let P of R)v+=a.need(P.e,Xt).value,a.destroy(P.e);pt("xp",T,C,Math.max(25,v));}for(let R of a.query(Xt)){let v=a.need(R,Xt),g=a.need(R,e),T=Math.hypot(L.x-g.x,L.y-g.y);if(T<Y.magnet||v.pulled){v.pulled=true;let C=Le()*(v.kind==="xp"&&T>Y.magnet?2.4:1.4),P=Math.min(1,S*C/Math.max(1,T));g.x+=(L.x-g.x)*P,g.y+=(L.y-g.y)*P;}if(!(T>i*.6))if(a.destroy(R),v.kind==="coin")qe(a,"coins",v.value),a.emit("coin-collected",{value:v.value}),V(a,{kind:"pop",x:L.x,y:L.y-i*1.6,text:`+${v.value}`,size:Math.round(i*.45)});else if(v.kind==="xp"){for(B+=v.value*Y.growth;B>=Ge(Q);)B-=Ge(Q),Q+=1,ae+=1;a.vars.xp_level=Q;}else if(v.kind==="food")Y.hp=Math.min(Y.maxHp,Y.hp+Y.maxHp*.25),a.vars.hp=Math.ceil(Y.hp),V(a,{kind:"ring",x:L.x,y:L.y,color:"accent",size:i*3});else if(v.kind==="magnet"){for(let C of a.query(Xt))(a.need(C,Xt).kind==="xp"||a.need(C,Xt).kind==="coin")&&(a.need(C,Xt).pulled=true);V(a,{kind:"ring",x:L.x,y:L.y,color:"coin",size:Le()*1.2});}else if(v.kind==="bomb"){let C=Ie(a);V(a,{kind:"flash",color:"#ffffff"}),V(a,{kind:"shake",power:2});for(let P of a.query($e)){let z=a.need(P,e);if(z.x<0||z.y<0||z.x>C.w||z.y>C.h)continue;let Z=a.get(P,$e);Z&&f$1(a,P,Z.kind==="boss"||Z.kind==="miniboss"?Z.maxHp*.1:Z.hp+1,"bomb");}}else v.kind==="chest"&&(q+=1,V(a,{kind:"burst",x:L.x,y:L.y,color:"coin",n:20,size:i*2}));}N(a);},k$1=()=>{for(let S of [$e,fr,Nn,Xt,Xn,pr,ur,Do,Ao,Ur,Yn])rt(e$1,S);rt(e$1,Er),it(),Tt(e$1,"top",void 0,{pan:true}),e$1.vars.field_x=0,e$1.vars.field_y=0,d=null,x=0,ce=Kr(In(e$1,"meta:chapter")||1,o("duration")),oe=ce.duration;let a=Xe();_={[a.weapon]:1},O=a.passive?{[a.passive]:1}:{};for(let S of dr)M[S]=.4;B=0,Q=1,ae=0,q=0,ue=[],ie=0,ve=0,se=0,Me=false,Re=false,De=0,ge=0,Ae=false,Se=null,ee=o("minibossEvery")>0?o("minibossEvery"):1/0,xe=o("eliteEvery")>0?o("eliteEvery")*.8:1/0,je=22,we=0,te=null,me=0,Y.maxHp=0,Y.hp=0,Pt(),Y.hp=Y.maxHp,e$1.vars.hp=Math.ceil(Y.hp),e$1.vars.hp_max=Y.maxHp,e$1.vars.time_left=oe,e$1.vars.xp_level=1,e$1.vars.kills=0,e$1.vars.bosses=0,e$1.vars.chapter=ce.chapter,e$1.vars.choosing=false,e$1.vars.reviving=false,e$1.vars.boss_hp=0,e$1.vars.survivors_offer="",tt(),ye(e$1);};e$1.on(j,a=>{let S=a,L=e$1.vars.choosing===true||e$1.vars.reviving===true;S.type==="press"&&Ze(e$1)&&!L?d={x:S.x,y:S.y}:S.type==="release"&&(d=null),S.type==="key"&&e$1.vars.choosing===true&&(S.key==="left"||S.key==="action"||S.key==="right")&&X(e$1,S.key==="left"?0:S.key==="action"?1:2);}),e$1.on(Hi,a=>X(e$1,Number(a.index??-1))),e$1.on(Vi,()=>{e$1.vars.choosing===true&&(e$1.vars.choosing=false,I(e$1,fe));}),e$1.on(Kt,()=>l(e$1)),e$1.on(Ft,()=>{e$1.vars.reviving===true&&(e$1.vars.reviving=false,u(e$1,"died"));}),e$1.on($t,k$1),e$1.on(Wt,k$1),e$1.on(zt,a=>{for(let S of e$1.query($e))et(e$1,S,"idle");c!==null&&e$1.isAlive(c)&&et(e$1,c,a.reason==="cleared"?"dance":"die"),it(),rt(e$1,Yn);}),e$1.on(k,()=>{Tt(e$1,"top",void 0,{pan:true}),tt(),Ze(e$1)&&ye(e$1);});let E=(a,S)=>{let L=d!==null&&r.pointer.down&&a.vars.choosing!==true,i=a.query(Yn);if(!L||d===null){for(let g of i)a.destroy(g);return}i.length===0&&(Et(a,d.x,d.y,{shape:"circle",r:S,color:"#ffffff",alpha:.16,depth:70},{type:Yn,data:{part:0}}),Et(a,d.x,d.y,{shape:"circle",r:S*.42,color:"#ffffff",alpha:.55,depth:71},{type:Yn,data:{part:1}}));let h=r.pointer.x-d.x,D=r.pointer.y-d.y,R=Math.hypot(h,D)||1,v=Math.min(1,S/R);for(let g of a.query(Yn)){let T=a.need(g,e);a.need(g,Yn).part===0?(T.x=d.x,T.y=d.y):(T.x=d.x+h*v,T.y=d.y+D*v);}};e$1.addSystem({id:"survivors",order:0,run(a,S){if(!Ze(a)||c===null||Re)return;let L=a.vars.choosing===true||a.vars.reviving===true;for(let Z of [c,...a.query($e)]){let F=a.get(Z,f);F?.shape==="actor"&&(F.paused=L);}if(L)return;Ee=Math.min(12,Ee+S*10);let i=Ie(a);if(ge+=S,!Ae){let Z=Math.max(0,oe-ge);a.vars.time_left=Z,Z<=0&&tn(a);}ie>0&&(ie=Math.max(0,ie-S)),Y.regen>0&&Y.hp<Y.maxHp&&(Y.hp=Math.min(Y.maxHp,Y.hp+Y.regen*S),a.vars.hp=Math.ceil(Y.hp)),a.vars.hp_max=Y.maxHp;let h=_e(),D=Le()*.11,R=r.axis(),v=R.x,g=R.y,T=v!==0||g!==0?1:0;if(T===0&&d&&r.pointer.down){v=r.pointer.x-d.x,g=r.pointer.y-d.y;let Z=Math.hypot(v,g);T=Z<D*.18?0:Math.min(1,Z/D);}E(a,D);let C=Math.hypot(v,g),P=C>0&&T>0;if(P){let Z=v/C*Y.speed*T*S,F=g/C*Y.speed*T*S;for(let de of [...a.query($e),...a.query(fr),...a.query(Nn),...a.query(Xt),...a.query(Er),...a.query(Do),...a.query(Ao)]){let le=a.need(de,e);le.x-=Z,le.y-=F;}ql(a,Z,F),qe(a,"field_x",Z),qe(a,"field_y",F),x+=S,x>.6&&vt(a,"survivors-move");}!ht(a,"survivors-move")&&!un(a)&&ft(a,"circle",{x:i.w/2,y:i.h*.8},{x:D*.6,y:0});let z=a.need(c,f);z.alpha=ie>0&&Math.floor(a.time*12)%2===0?.4:1,z.shape==="actor"&&(z.pose=P?"run":"idle",z.speed=Y.speed*Math.max(.3,T),P&&Math.abs(v)>C*.15&&(z.facing=v>0?1:-1),z.depth=Vt(a,h.y)+5e-4),It(a,S),re(a,S),!(Re||Ws(a))&&(st(a,S,P),J(a,S),!(Re||Ws(a))&&(j$1(a,S),!Re&&(a.vars.score=ve*o("killScore")+Math.floor(ge)*5+se*o("bossScore"),Ke(a))));}}),e$1.vars.survivors_base=o("duration"),k$1();}};var Ks=[{id:"archer",base:{damage:6,type:"physical",range:2.6,rate:1.2,air:true,ground:true,shot:"td_arrow",shotSpeed:13},tiers:[{cost:70,stats:{},art:"td_archer1"},{cost:100,stats:{damage:9,range:2.8,rate:1.35},art:"td_archer2"},{cost:150,stats:{damage:14,range:3,rate:1.5},art:"td_archer3"}],branches:[{id:"ranger",cost:240,stats:{damage:17,rate:2.5,multishot:2,range:3.1},art:"td_archer_ranger"},{id:"sniper",cost:260,stats:{damage:72,rate:.5,range:4.6,pierce:1,crit:.2,shotSpeed:22},art:"td_archer_sniper"}],unlockLevel:1,metaVar:"meta:tower:archer"},{id:"cannon",base:{damage:12,type:"physical",range:2.3,rate:.5,air:false,ground:true,shot:"bomb",shotSpeed:6,lob:true,splash:.9},tiers:[{cost:110,stats:{},art:"td_cannon1"},{cost:150,stats:{damage:22,splash:1},art:"td_cannon2"},{cost:210,stats:{damage:36,splash:1.1,range:2.5},art:"td_cannon3"}],branches:[{id:"bombard",cost:300,stats:{damage:72,splash:1.5,rate:.42,range:2.8,stun:.25,stunTime:.6},art:"td_cannon_bombard"},{id:"flamer",cost:280,stats:{damage:20,splash:1,rate:.9,burn:12,burnTime:3},art:"td_cannon_flamer"}],unlockLevel:1,metaVar:"meta:tower:cannon"},{id:"mage",base:{damage:14,type:"magic",range:2.4,rate:.7,air:true,ground:true,shot:"orb",shotSpeed:9},tiers:[{cost:100,stats:{},art:"td_mage1"},{cost:140,stats:{damage:26},art:"td_mage2"},{cost:200,stats:{damage:42,range:2.6},art:"td_mage3"}],branches:[{id:"arcane",cost:300,stats:{damage:110,type:"true",rate:.55,range:2.9},art:"td_mage_arcane"},{id:"storm",cost:280,stats:{damage:32,rate:.9,chain:4,beam:true,shot:"zap"},art:"td_mage_storm"}],unlockLevel:3,metaVar:"meta:tower:mage"},{id:"frost",base:{damage:3,type:"magic",range:2.2,rate:.8,air:true,ground:true,shot:"crystal",shotSpeed:10,splash:.5,slow:.35,slowTime:1.6},tiers:[{cost:90,stats:{},art:"td_frost1"},{cost:120,stats:{damage:5,slow:.45,slowTime:1.9},art:"td_frost2"},{cost:170,stats:{damage:8,slow:.5,slowTime:2.2,splash:.7,range:2.4},art:"td_frost3"}],branches:[{id:"glacier",cost:260,stats:{damage:14,slow:.6,slowTime:2.6,stun:.15,stunTime:1},art:"td_frost_glacier"},{id:"blizzard",cost:260,stats:{damage:10,splash:1.4,slow:.5,slowTime:2.4,range:2.7},art:"td_frost_blizzard"}],unlockLevel:5,metaVar:"meta:tower:frost"}],Ui=6,Lo=.7,kn=e=>Ks.find(t=>t.id===e);function wo(e,t,n){let s=e.base;for(let o=1;o<Math.min(t,e.tiers.length);o++)s={...s,...e.tiers[o].stats};let r=n?e.branches.find(o=>o.id===n):void 0;return r?{...s,...r.stats}:s}function Po(e,t,n){let s=0;for(let o=0;o<Math.min(t,e.tiers.length);o++)s+=e.tiers[o].cost;let r=n?e.branches.find(o=>o.id===n):void 0;return s+(r?.cost??0)}var Fs=(e,t,n)=>(n?e.branches.find(s=>s.id===n)?.art:void 0)??e.tiers[Math.min(t,e.tiers.length)-1].art,hr=[{id:"grunt",cast:"foe",hp:1,speed:1,armor:0,resist:0,bounty:6,leak:1,size:.82,hit:.25,firstLevel:1,cost:1},{id:"runner",cast:"foe5",hp:.55,speed:1.8,armor:0,resist:0,bounty:4,leak:1,size:.72,hit:.15,firstLevel:2,cost:.7},{id:"brute",cast:"foe2",hp:2.6,speed:.7,armor:.6,resist:0,bounty:14,leak:2,size:1,hit:.5,firstLevel:3,cost:2.4,badge:"shield"},{id:"flyer",cast:"foe3",hp:.8,speed:1.2,armor:0,resist:0,flying:true,bounty:8,leak:1,size:.75,hit:0,firstLevel:4,cost:1.3,badge:"wing"},{id:"shaman",cast:"foe4",hp:1.6,speed:.9,armor:0,resist:.7,bounty:12,leak:1,size:.86,hit:.3,firstLevel:6,cost:2,badge:"orb"},{id:"healer",cast:"foe4",variant:7,hp:1.3,speed:.9,armor:.2,resist:.2,bounty:14,leak:1,size:.86,hit:.2,heals:{radius:1.6,share:.08,every:2},firstLevel:8,cost:2.2,badge:"potion"},{id:"splitter",cast:"foe2",variant:5,hp:2,speed:.85,armor:.2,resist:0,bounty:10,leak:2,size:.95,hit:.4,splits:{into:"spawnling",count:3},firstLevel:11,cost:2.6,badge:"skull"},{id:"spawnling",cast:"foe5",variant:3,hp:.35,speed:1.6,armor:0,resist:0,bounty:2,leak:1,size:.55,hit:.1,firstLevel:0,cost:.4},{id:"warlord",cast:"boss",hp:30,speed:.55,armor:.2,resist:0,bounty:120,leak:10,size:1.5,hit:2,summons:{id:"grunt",count:3,every:6},boss:1,firstLevel:0,cost:0},{id:"ironclad",cast:"boss",variant:4,hp:50,speed:.5,armor:.65,resist:0,bounty:160,leak:10,size:1.6,hit:2.5,enrage:{below:.5,speed:1.7},boss:2,firstLevel:0,cost:0,badge:"shield"},{id:"broodmother",cast:"boss",variant:9,hp:62,speed:.5,armor:.2,resist:.3,bounty:200,leak:10,size:1.6,hit:2.5,summons:{id:"spawnling",count:4,every:5},splits:{into:"spawnling",count:8},boss:3,firstLevel:0,cost:0,badge:"skull"},{id:"lich",cast:"boss",variant:13,hp:80,speed:.48,armor:.3,resist:.5,bounty:260,leak:15,size:1.7,hit:3,heals:{radius:2.2,share:.05,every:3},summons:{id:"shaman",count:2,every:7},boss:4,firstLevel:0,cost:0,badge:"orb"}],en=e=>hr.find(t=>t.id===e),qr=[{id:"meteor",icon:"td_meteor",kind:"strike",cooldown:35,unlockLevel:2,damage:2.2,count:3,radius:1.1,burn:.3},{id:"reinforce",icon:"shield",kind:"summon",cooldown:22,unlockLevel:4,count:2,cast:"helper",hp:4,dps:.6,time:14}],Sn=9,En=13,qi=[{id:"meadow-a",rows:["..S......",".o#o..t..","..#......","..#####o.",".o....#..","..t...#o.",".o#####..","..#..o..t","..#.*....","o.####o..","....o#...",".t...#.o.",".....X..."]},{id:"meadow-b",rows:["......S..",".t..o.#o.","......#..",".o#####..","..#..o...","..#.t..o.","..####...",".o..o#.t.","..*..#...","..####o..",".o#......","..#.o..t.","..X......"]},{id:"meadow-c",rows:[".S.......",".#.o..o..",".#.....#X",".#o.t.o#.",".#.....#.",".#o.o..#.",".#..r..#.",".#.o.o.#o",".#.....#.",".#o.*.o#.",".#######.","..o.o.o..","t.......t"]},{id:"meadow-boss",rows:["....S....","..o.#.o..","....#....",".####.o..",".#..o....",".#.o..t..",".#######.","..o.o..#.",".o.....#o","..######.","..#.o.o..",".o#......","..X......"]},{id:"river-a",rows:[".........","S####.o..",".o..#....","..o.#.~~.","....####.",".o.r...#.","...o...#o",".#######.",".#.o.o...",".#....r..",".####.o..","..o.#....","....X...."]},{id:"river-b",rows:[".S.....S.",".#.o.o.#.",".#..t..#.",".###.###.",".o.#o#.o.","...#.#...","..o###o..","....#....",".o..#.o..","...o#....","..r.#.o..",".o..#..t.","....X...."]},{id:"river-c",rows:["..~~.....","o...####S","..o.#..o.","....#.~~.",".####.~~.",".#..o....",".#.o..r..",".######o.","..o...#..",".~~.o.#..","X######o.","..o.o....","..~~...t."]},{id:"river-boss",rows:[".o.....o.","S##.o.##S","..#.r.#..",".o#####o.","....#....",".o..#.o..",".####..t.",".#..o..o.",".#.o.....",".#######.","..o.o..#.",".o.....#o",".......X."]},{id:"wood-a",rows:["..o...o..","S#######.",".o.....#.","...o.o.#o",".#####.#.",".#.o.#.#.",".#.X.#.#.",".#.###.#.",".#..o..#.",".#######.","..o.o.o..",".t..r..o.","........."]},{id:"wood-b",rows:["...S.....",".o.#..o..","...#.t...",".o.####o.","......#..",".o.o..#o.","......##X",".o.o..#o.","......#..",".o.####o.","...#.r...",".o.#..o..","...S....."]},{id:"wood-c",rows:[".o..o..o.",".#######S",".#.o..o..",".#######.","..o.o..#.",".#######.",".#..o..o.",".#######.","..o..o.#.",".#######.",".#.o..o..",".#..r..t.",".X......."]},{id:"wood-boss",rows:["....X....",".o..#..o.","..o.#....",".####.o..",".#..o..t.",".#.o..o..",".#######.","..o..o.#.",".o.....#.","..######.","..#.o..o.",".o#..r...","..S......"]},{id:"ash-a",rows:["....S....",".o..#..o.","S##.#.##S","..#.#.#..",".o#o#o#o.","..#####..",".o..#..o.","...o#o...",".t..#..t.",".o..#..o.","..r.#.r..",".o..#..o.","....X...."]},{id:"ash-b",rows:[".S.....S.",".#.o.o.#.",".#..o..#.",".###.###.","...#o#...",".o.#.#.o.","...#o#...",".###.###.",".#.o.o.#.",".#.....#.",".#######.","..o.#.o..","....X...."]},{id:"ash-c",rows:[".S.....X.",".#.###.#.",".#o#o#o#.",".#.#.#.#.",".#o#.#o#.",".#.#o#.#.","o#.#.#.#o",".#o#.#o#.",".#.#o#.#.",".#.#.#.#.",".#o#.#o#.",".###.###.","........."]},{id:"ash-boss",rows:[".o.....o.","S#.o.o.#S",".#.....#.",".#o.r.o#.",".#.....#.",".#o.X.o#.",".#..#..#.",".#o.#.o#.",".#..#..#.",".#.o#o.#.",".#######.","..o.o.o..",".t.....t."]}],Us=e=>qi.find(t=>t.id===e);function jr(e,t){return t==="x"?e.rows.map(n=>[...n].reverse().join("")):t==="y"?[...e.rows].reverse():e.rows}var $p=e=>e==="#"||e==="S"||e==="X";function Xr(e){let t=(O,M)=>e[M]?.[O],n=null,s=[],r=[];for(let O=0;O<e.length;O++)for(let M=0;M<e[O].length;M++){let $=t(M,O);$==="X"?n={col:M,row:O}:$==="S"?s.push({col:M,row:O}):$==="o"&&r.push({col:M,row:O});}if(!n)throw new Error("tower-defense map: no gate (X)");if(s.length===0)throw new Error("tower-defense map: no entry (S)");let o=new Map,c=(O,M)=>`${O},${M}`,d=[n];o.set(c(n.col,n.row),0);let x=[[0,1],[-1,0],[1,0],[0,-1]];for(;d.length>0;){let O=d.shift(),M=o.get(c(O.col,O.row));for(let[$,G]of x){let B=O.col+$,Q=O.row+G;!$p(t(B,Q))||o.has(c(B,Q))||(o.set(c(B,Q),M+1),d.push({col:B,row:Q}));}}let _=s.map(O=>{if(!o.has(c(O.col,O.row)))throw new Error(`tower-defense map: the entry ${O.col},${O.row} has no road to the gate`);let M=[O],$=O;for(;$.col!==n.col||$.row!==n.row;){let G=o.get(c($.col,$.row)),B=x.map(([Q,ae])=>({col:$.col+Q,row:$.row+ae})).find(Q=>o.get(c(Q.col,Q.row))===G-1);M.push(B),$=B;}return M});return {rows:e,paths:_,gate:n,spots:r}}var ji=4,xn=5,Co=ji*xn,Xi=[0,9,24,39],Yi=[{map:"meadow-a",mirror:"none"},{map:"meadow-b",mirror:"none"},{map:"meadow-c",mirror:"none"},{map:"meadow-a",mirror:"x"},{map:"meadow-boss",mirror:"none"},{map:"river-a",mirror:"none"},{map:"river-b",mirror:"none"},{map:"river-c",mirror:"none"},{map:"river-a",mirror:"x"},{map:"river-boss",mirror:"none"},{map:"wood-a",mirror:"none"},{map:"wood-b",mirror:"none"},{map:"wood-c",mirror:"none"},{map:"wood-b",mirror:"x"},{map:"wood-boss",mirror:"none"},{map:"ash-a",mirror:"none"},{map:"ash-b",mirror:"none"},{map:"ash-c",mirror:"none"},{map:"ash-a",mirror:"y"},{map:"ash-boss",mirror:"none"}];function Bp(e){let t=e>>>0;return ()=>{t=t+1831565813>>>0;let n=t;return n=Math.imul(n^n>>>15,n|1),n^=n+Math.imul(n^n>>>7,n|61),((n^n>>>14)>>>0)/4294967296}}var Uc=hr.filter(e=>e.firstLevel>0).map(e=>e.id);function qc(e,t){let n=hr.filter(r=>r.firstLevel>0&&r.firstLevel<=e);if(!t)return n;let s=n.filter(r=>t.includes(r.id));return s.length>0?s:n}function jc(e,t){let n=hr.find(s=>s.firstLevel===e);return n&&(!t||t.includes(n.id))?n:void 0}function Ji(e,t,n){let s=Math.max(1,Math.min(Co,Math.floor(e))),r=Bp(s*7919+13),o=qc(s,n),c=jc(s,n),d=Math.ceil(s/xn),x=s%xn===0?hr.find(M=>M.boss===d):void 0,_=6+Math.floor((s-1)/2),O=[];for(let M=1;M<=_;M++){let $=5+M*1.6+s*.35,G=[],B=0,Q=0,ae=[];if(M===1)ae.push(o[0]);else {c&&M===2&&ae.push(c);let ue=Math.min(4,1+Math.floor(M/3));for(;ae.length<ue;)ae.push(o[Math.floor(r()*o.length)]);}let q=$/ae.length;for(let ue of ae){let fe=Math.max(1,Math.round(q/ue.cost)),ie=ue.speed>=1.5?.55:ue.hp>=2?1.3:.85;G.push({enemy:ue.id,count:fe,gap:ie,delay:B,entry:Q%Math.max(1,t)}),B+=fe*ie*.55+1,Q++;}x&&M===_&&G.push({enemy:x.id,count:1,gap:1,delay:B+2,entry:0}),O.push({groups:G});}return O}function Yr(e,t=.5,n){let s=Math.max(1,Math.min(Co,Math.floor(e))),r=Math.ceil(s/xn),o=s-(r-1)*xn,c=Yi[s-1],d=Xr(jr(Us(c.map),c.mirror)).paths.length;return {level:s,world:r,index:o,boss:o===xn,map:c.map,mirror:c.mirror,hp:16*Math.pow(1.075,s-1)*(.8+t*.4),waves:Ji(s,d,n),gold:220+(s-1)*25,bounty:1+(s-1)*.03,towers:Ks.filter(x=>x.unlockLevel<=s).map(x=>x.id),spells:qr.filter(x=>x.unlockLevel<=s).map(x=>x.id),branches:s>=Ui,fresh:jc(s,n)?.id??null,enemies:qc(s,n).map(x=>x.id),firstClearGold:(o===xn?150:60)+(s-1)*20}}var Zi=e=>Xi[Math.ceil(Math.max(1,e)/xn)-1]??0,qs=(e,t)=>e>=t*.9?3:e>=t*.5?2:1,js=5,Xc=20,Jr=[{id:"hero",cast:"hero",gems:0,perk:"none"},{id:"hero2",cast:"hero2",gems:150,perk:"gold"},{id:"hero3",cast:"hero3",gems:300,perk:"spells"}],Qi="kit-td",el=[{id:"StartGold",var:"meta:start_gold",art:"td_gold",color:"coin",perLevel:20,unit:"",maxLevel:10,price:40,growth:.12},{id:"Lives",var:"meta:lives",art:"heart",color:"danger",perLevel:1,unit:"",maxLevel:5,price:120,growth:.2},{id:"Archer",var:"meta:tower:archer",art:"td_archer1",color:"primary",perLevel:6,unit:"%",maxLevel:10,price:40,growth:.12},{id:"Cannon",var:"meta:tower:cannon",art:"td_cannon1",color:"primary",perLevel:6,unit:"%",maxLevel:10,price:40,growth:.12},{id:"Mage",var:"meta:tower:mage",art:"td_mage1",color:"primary",perLevel:6,unit:"%",maxLevel:10,price:45,growth:.12},{id:"Frost",var:"meta:tower:frost",art:"td_frost1",color:"primary",perLevel:6,unit:"%",maxLevel:10,price:45,growth:.12},{id:"Spells",var:"meta:spells",art:"td_meteor",color:"danger",perLevel:8,unit:"%",maxLevel:10,price:50,growth:.12}],Yc={game:"tower-defense",character:Qi,stats:el,heroes:Jr,levels:Co,firstClearGold:e=>Yr(e).firstClearGold,stars:3,starsToEnter:Zi};var zp="boss-spawned",Wp="boss-defeated",nl="wave-started",Js=b("td.spot"),sn=b("td.tower"),Te=b("td.raider"),mr=b("td.missile"),hn=b("td.soldier"),Xs=b("td.meteor"),Jc=b("td.ground"),tl=b("td.part"),Zc=b("td.bar"),Ys=b("td.zap"),Io=(e,t)=>{let n=Number(e.vars[t]??0);return Number.isFinite(n)?n:0},Hp=.5,Vp=.55,Zs={id:"tower-defense",version:2,engines:["phaser"],requires:["round"],params:{difficulty:{type:"number",default:.5,min:0,max:1},lives:{type:"number",default:20,min:1,max:100,integer:true},gold:{type:"number",default:0,min:0,max:1e5,integer:true},wavePause:{type:"number",default:14,min:2,max:60},firstWait:{type:"number",default:25,min:1,max:600},earlyGold:{type:"number",default:2,min:0,max:100},coinRate:{type:"number",default:.15,min:0,max:1}},setup({world:e$1,params:t,mode:n}){let s=i=>nn(t,i),r=e$1.rng.stream("tower-defense"),o=pn(n,"foes",Uc),c=Yr(1,s("difficulty"),o),d=Xr(jr(Us(c.map),c.mirror)),x=[],_=we(),O=0,M=20,$=20,G=0,B=[],Q=0,ae=null,q=0,ue=0,fe=0,ie=false,ve=false,se=1,Me=null,De=[],ge=null,oe=new Map,ce=[],Ae=null,Se=new Map,ee=new Map,xe=()=>Jr.find(i=>i.id===e$1.vars["meta:hero"])??Jr[0],je=()=>e$1.vars.reviving===true;function we(){return Fn(Ie(e$1),Sn,En,{top:.15,bottom:.86,widthShare:.98})}let te=()=>_.cell,me=i=>_.left+i*_.cell,Ee=i=>_.top+i*_.cell,Re=i=>({x:me(i.col+.5),y:Ee(i.row+.5)}),Ce=(i,h)=>({x:(i-_.left)/_.cell,y:(h-_.top)/_.cell}),Y=i=>i.row===0?{x:i.col+.5,y:-0.5}:i.row===En-1?{x:i.col+.5,y:En+.5}:i.col===0?{x:-0.5,y:i.row+.5}:i.col===Sn-1?{x:Sn+.5,y:i.row+.5}:null,Le=()=>{x=d.paths.map(i=>{let h=i.map(R=>({x:R.col+.5,y:R.row+.5})),D=Y(i[0]);return D&&h.unshift(D),{pts:h,len:h.length-1}});},Ye=(i,h)=>{if(h<=0)return i.pts[0];if(h>=i.len)return i.pts[i.len];let D=Math.floor(h),R=i.pts[D],v=i.pts[D+1],g=h-D;return {x:R.x+(v.x-R.x)*g,y:R.y+(v.y-R.y)*g}},at=new Set,_e=(i,h,D,R,v=1)=>{at.add(i);let g=Se.get(i);(g===void 0||!e$1.isAlive(g))&&(g=e$1.create(),e$1.set(g,tl,{id:i}),Se.set(i,g)),e$1.set(g,e,{x:h,y:D,scale:v}),e$1.set(g,f,R);},Pt=i=>{for(let[h,D]of [...Se])at.has(h)||!i.some(R=>h.startsWith(R))||(e$1.destroy(D),Se.delete(h));},Ge=i=>{for(let[h,D]of [...Se])h.startsWith(i)&&(e$1.destroy(D),Se.delete(h));},Xe=(i,h,D,R)=>{let v=e$1.create();return e$1.set(v,Jc,{kind:i}),e$1.set(v,e,{x:h,y:D}),e$1.set(v,f,R),v},tt=()=>{rt(e$1,Jc),rt(e$1,Js);let i=te();Xe("grass",me(Sn/2),Ee(En/2),{shape:"tile",art:"tile_grass",w:i*Sn,h:i*En,unit:i,color:"ground",depth:-10}),d.rows.forEach((T,C)=>[...T].forEach((P,z)=>{let Z=Re({col:z,row:C}),F=Z.y+i*.45;P==="#"||P==="S"||P==="X"?Xe("road",Z.x,Z.y,{shape:"sprite",art:"tile_road",w:i+1,h:i+1,color:"lane",depth:-9}):P==="~"?Xe("water",Z.x,Z.y,{shape:"rect",w:i+1,h:i+1,color:"primary",alpha:.45,depth:-9}):P==="t"?Xe("tree",Z.x,F-i*.65,{shape:"sprite",art:"td_tree",w:i*1.05,h:i*1.3,depth:Vt(e$1,F,5)}):P==="r"?Xe("rock",Z.x,F-i*.3,{shape:"sprite",art:"rock",w:i*.8,h:i*.6,depth:Vt(e$1,F,5)}):P==="*"&&Xe("bush",Z.x,F-i*.3,{shape:"sprite",art:"td_bush",w:i*.85,h:i*.6,depth:Vt(e$1,F,5)});})),d.spots.forEach((T,C)=>{let P=Re(T),z=Xe("spot",P.x,P.y+i*.18,{shape:"sprite",art:"td_spot",w:i*.95,h:i*.62,depth:-8});e$1.set(z,Js,{index:C,col:T.col,row:T.row});});let h=Re(d.gate),D=Y(d.gate),R=D&&D.y>=0?D:null,v=R?me(d.gate.col+.5+(R.x-(d.gate.col+.5))*.35):h.x,g=R?Ee(d.gate.row+.5+(R.y-(d.gate.row+.5))*.35):h.y;Xe("gate",v,g-i*.2,{shape:"sprite",art:"td_gate",w:i*1.35,h:i*1.35,depth:Vt(e$1,g+i*.45,5)});for(let T of d.paths){if(Y(T[0]))continue;let C=Re(T[0]);Xe("portal",C.x,C.y-i*.1,{shape:"sprite",art:"td_portal",w:i*1.05,h:i*.95,depth:Vt(e$1,C.y,4)});}},ot=i=>e$1.query(sn).find(h=>e$1.need(h,sn).spot===i),ct=i=>{let h=e$1.need(i,sn),D=kn(h.kind),R=Re(d.spots[h.spot]),v=te(),g=v*1.45,T=R.y+v*.42;e$1.set(i,e,{x:R.x,y:T-g/2}),e$1.set(i,f,{shape:"sprite",art:Fs(D,h.tier,h.branch||null),w:v*1.1,h:g,depth:Vt(e$1,T,5)});},it=i=>{O=Math.max(0,Math.round(i)),e$1.vars.gold=O;},bt=(i,h)=>{let D=Re(d.spots[i]);V(e$1,{kind:"ring",x:D.x,y:D.y,color:h,size:te()*1.5}),V(e$1,{kind:"burst",x:D.x,y:D.y-te()*.4,color:h,n:10,size:te()});},Ke=(i,h)=>{let D=kn(h);if(!D||ot(i)!==void 0)return false;let R=D.tiers[0].cost;if(O<R)return false;it(O-R);let v=e$1.create();return e$1.set(v,sn,{spot:i,kind:h,tier:1,branch:"",cooldown:.2}),ct(v),bt(i,"text"),e$1.emit("tower-built",{kind:h}),ht(e$1,"td-build")||(vt(e$1,"td-build"),J()),true},ze=(i,h)=>{let D=ot(i);if(D===void 0)return false;let R=e$1.need(D,sn),v=kn(R.kind),g;if(h){let T=v.branches.find(C=>C.id===h);if(!T||R.branch||R.tier<v.tiers.length||!c.branches)return false;g=T.cost;}else {if(R.tier>=v.tiers.length)return false;g=v.tiers[R.tier].cost;}return O<g?false:(it(O-g),h?R.branch=h:R.tier++,ct(D),bt(i,"coin"),e$1.emit("tower-upgraded",{kind:R.kind,tier:R.tier,branch:R.branch}),true)},_t=i=>{let h=ot(i);if(h===void 0)return false;let D=e$1.need(h,sn),R=Math.floor(Po(kn(D.kind),D.tier,D.branch||null)*Lo);it(O+R);let v=Re(d.spots[i]);return V(e$1,{kind:"pop",x:v.x,y:v.y-te()*.8,text:`+${R}`,color:"coin",size:Math.round(te()*.3)}),V(e$1,{kind:"burst",x:v.x,y:v.y,color:"muted",n:12,size:te()}),e$1.destroy(h),e$1.emit("tower-sold",{kind:D.kind}),true},Fe=()=>{Me=null,De=[],Ge("m:"),e$1.vars.td_menu="";},Ct=i=>i.map(h=>`${h.action??h.id}@${Math.round(h.x)},${Math.round(h.y)}`).join(";"),Ht=i=>{Fe(),Me=i,It();},It=()=>{if(Me===null)return;let i=Me;De=[];let h=te(),D=Ie(e$1),R=Math.min(D.w,D.h),v=Math.max(h*.46,R*.062),g=Math.max(h*1.1,v*2.3),T=Re(d.spots[i]),C=Math.max(g+v,Math.min(D.w-g-v,T.x)),P=Math.max(D.h*.1+g+v,Math.min(D.h*.88-g-v,T.y-h*.2)),z=(pe,We,Je,dt,Dt,_n,yn)=>{let ln=C+We*g,Wn=P+Je*g;De.push({action:pe,x:ln,y:Wn,r:v,ok:yn}),e$1.vars.td_menu=Ct(De),_e(`m:${pe}:bg`,ln,Wn,{shape:"circle",r:v,color:"panel",alpha:.94,depth:60});let br=pe==="sell";_e(`m:${pe}:rim`,ln,Wn,{shape:"circle",r:v*1.08,color:br?"danger":yn?"coin":"muted",alpha:yn?.9:.5,depth:59.9}),_e(`m:${pe}:art`,ln,Wn-v*.12,{shape:"sprite",art:dt,w:br?v*1.25:v*1.15,h:br?v*1.25:v*1.3,alpha:yn?1:.45,depth:60.1}),_n&&_e(`m:${pe}:txt`,ln,Wn+v*.78,{shape:"text",text:_n,size:Math.round(v*.52),color:Dt!==null&&!yn?"danger":"coin",bold:true,depth:60.2});},Z=ot(i);if(Z===void 0){let pe=c.towers.map(Je=>kn(Je)).filter(Boolean),We=pe.length<=1?[[0,-1]]:pe.length===2?[[-0.8,-0.7],[.8,-0.7]]:pe.length===3?[[-0.85,-0.6],[.85,-0.6],[0,.9]]:[[-0.8,-0.75],[.8,-0.75],[-0.8,.75],[.8,.75]];pe.slice(0,4).forEach((Je,dt)=>{let Dt=Je.tiers[0].cost;z(`build:${Je.id}`,We[dt][0],We[dt][1],Je.tiers[0].art,Dt,String(Dt),O>=Dt);});return}let F=e$1.need(Z,sn),de=kn(F.kind),le=wo(de,F.tier,F.branch||null);if(_e("m:range",T.x,T.y,{shape:"sprite",art:"aura_field",w:le.range*h*2,h:le.range*h*2,color:"primary",alpha:.4,depth:1}),F.tier<de.tiers.length){let pe=de.tiers[F.tier];z("up",0,-1,pe.art,pe.cost,String(pe.cost),O>=pe.cost);}else !F.branch&&c.branches&&de.branches.slice(0,2).forEach((pe,We)=>z(`branch:${pe.id}`,We===0?-0.85:.85,-0.7,pe.art,pe.cost,String(pe.cost),O>=pe.cost));let he=Math.floor(Po(de,F.tier,F.branch||null)*Lo);z("sell",0,1,"td_sell",null,`+${he}`,true);},tn=i=>{if(Me===null)return;let h=Me,D=false;if(i.startsWith("build:")?D=Ke(h,i.slice(6)):i==="up"?D=ze(h):i.startsWith("branch:")?D=ze(h,i.slice(7)):i==="sell"&&(D=_t(h)),!D){V(e$1,{kind:"shake",power:.3});return}Fe();},pt=(i,h)=>{let D=te(),R=-1,v=1/0;return d.spots.forEach((g,T)=>{let C=Re(g),P=ot(T)!==void 0?C.y-D*1.1:C.y-D*.5;if(Math.abs(i-C.x)>D*.55||h<P||h>C.y+D*.55)return;let z=Math.abs(i-C.x)+Math.abs(h-C.y);z<v&&(v=z,R=T);}),R},w=i=>1+.07*(i-1),f$1=(i,h,D,R)=>{let v=en(i);if(!v||x.length===0)return null;let g=v.hp*c.hp*(v.boss?1:w(R)),T=e$1.create();return e$1.set(T,Te,{kind:i,hp:g,maxHp:g,route:h%x.length,progress:D,x:0,y:0,slow:0,slowLeft:0,stun:0,burn:0,burnLeft:0,healCd:v.heals?.every??0,summonCd:v.summons?.every??0,heldBy:-1,enraged:false,wave:R}),e$1.set(T,e,{x:0,y:0}),e$1.set(T,f,{shape:"actor",cast:v.cast,variant:v.variant??r.int(0,99),h:te()*v.size*1.15,pose:v.flying?"air":"walk",depth:6}),m(T),v.boss&&(e$1.emit(zp,{kind:i}),V(e$1,{kind:"shake",power:1})),T},m=i=>{let h=e$1.need(i,Te),D=en(h.kind),R=x[h.route],v=Ye(R,h.progress),g=Ye(R,h.progress+.05);h.x=v.x,h.y=v.y;let T=te(),C=e$1.need(i,e),P=e$1.need(i,f),z=Ee(v.y)+T*.2;if(C.x=me(v.x),C.y=z-(D.flying?T*.55:0)-(P.shape==="actor"?P.h/2:0),P.shape==="actor"){Math.abs(g.x-v.x)>1e-4&&(P.facing=g.x>v.x?1:-1),P.depth=Vt(e$1,z,5),P.h=T*D.size*1.15;let Z=h.heldBy<0&&h.stun<=0;P.pose=D.flying?"air":Z?"walk":"idle",P.speed=D.speed*(1-h.slow)*T*se;}},p=i=>x[i.route].len-i.progress,y=i=>{let h=e$1.need(i,e);return {x:h.x,y:h.y}},l=(i,h,D,R,v=1,g="tower")=>{let T=e$1.get(i,Te);if(!T)return;let C=en(T.kind),P=h.damage*D*v*(R?2:1);if(h.type==="physical"?P*=1-C.armor*(1-(h.pierce??0)):h.type==="magic"&&(P*=1-C.resist),h.slow&&(T.slow=Math.max(T.slow,h.slow*(C.boss?.5:1)),T.slowLeft=Math.max(T.slowLeft,(h.slowTime??1)*D)),h.burn&&(T.burn=Math.max(T.burn,h.burn*D),T.burnLeft=Math.max(T.burnLeft,h.burnTime??2)),h.stun&&!C.boss&&r.chance(h.stun)&&(T.stun=Math.max(T.stun,h.stunTime??.5)),R){let z=y(i);V(e$1,{kind:"pop",x:z.x,y:z.y-te()*.5,text:String(Math.round(P)),color:"danger",size:Math.round(te()*.3)});}u(i,P,g);},u=(i,h,D)=>{let R=e$1.get(i,Te);R&&(R.hp-=h,R.hp<=0&&b(i,D));},b=(i,h)=>{let D=e$1.need(i,Te),R=en(D.kind);e$1.remove(i,Te),et(e$1,i,"die"),rr(e$1,i,1),ue++;let v=Math.round(R.bounty*c.bounty);it(O+v);let g=y(i);if(V(e$1,{kind:"pop",x:g.x,y:g.y-te()*.6,text:`+${v}`,color:"coin",size:Math.round(te()*.28)}),e$1.emit("enemy-defeated",{kind:D.kind,by:h}),R.boss?(fe++,qe(e$1,"coins",10),e$1.emit(Wp,{kind:D.kind}),V(e$1,{kind:"shake",power:1.4}),V(e$1,{kind:"flash",color:"coin"})):r.chance(s("coinRate"))&&(qe(e$1,"coins",1),e$1.emit("coin-collected",{value:1})),R.splits)for(let T=0;T<R.splits.count;T++)f$1(R.splits.into,D.route,Math.max(0,D.progress-.18*T),D.wave);},A=i=>{let h=e$1.need(i,Te),D=en(h.kind),R=Re(d.gate);V(e$1,{kind:"burst",x:R.x,y:R.y,color:"danger",n:12,size:te()}),e$1.destroy(i),M=Math.max(0,M-D.leak),e$1.vars.lives=M,e$1.emit("player-hit",{lives:M}),V(e$1,{kind:"flash",color:"danger"}),V(e$1,{kind:"shake",power:D.boss?1.6:.8}),M<=0&&X();},I=()=>{if(!(G>=c.waves.length)){G++,e$1.vars.wave=G,B=[];for(let i of c.waves[G-1].groups)for(let h=0;h<i.count;h++)B.push({at:i.delay+h*i.gap,enemy:i.enemy,entry:i.entry});B.sort((i,h)=>i.at-h.at),Q=0,ae=null,e$1.emit(nl,{wave:G});}},N=()=>{if(!(ae===null||G>=c.waves.length)){if(G>0){let i=Math.ceil(ae*s("earlyGold")*c.bounty);if(i>0){it(O+i);let h=ce.find(D=>D.id.startsWith("call"));h&&V(e$1,{kind:"pop",x:h.x,y:h.y-te()*.6,text:`+${i}`,color:"coin",size:Math.round(te()*.32)});}}vt(e$1,"td-call"),I();}},U=i=>{if(ie||!Ze(e$1))return;ie=true;let h=i==="defended",D=h?Math.min(ve?1:3,qs(M,$)):0;e$1.vars.stars=D,h&&e$1.vars["meta:first_clear"]===true&&qe(e$1,"coins",c.firstClearGold),e$1.vars.score=ke()+(h?1e3+D*300:0),e$1.vars.reviving=false,Fe(),e$1.emit(Bt,{reason:i,stats:{chapter:c.level,seconds:Math.floor(q),cleared:h,stars:D,coins:Number(e$1.vars.coins??0),bosses:fe,kills:ue,lives:M}});},X=()=>{if(e$1.vars.revive_ready===true&&!ve){e$1.vars.reviving=true,Fe(),e$1.emit(Gt,{});return}U("overrun");},ye=()=>{if(je()){ve=true,e$1.vars.reviving=false,M=js,e$1.vars.lives=M;for(let i of e$1.query(Te))e$1.need(i,Te).stun=2;V(e$1,{kind:"flash",color:"coin"});}},ke=()=>ue*10+M*50+Math.max(0,G-1)*100,Ue=()=>1+Io(e$1,"meta:spells"),st=(i,h,D)=>{let R=qr.find(T=>T.id===i);if(!R||(oe.get(i)??0)>0)return;let v=Ce(h,D);if(v.x<-0.5||v.y<-0.5||v.x>Sn+.5||v.y>En+.5)return;if(R.kind==="strike")for(let T=0;T<(R.count??1);T++){let C=e$1.create(),P=(R.radius??1)*.9;e$1.set(C,Xs,{x:v.x+(T===0?0:(r.next()-.5)*P*2),y:v.y+(T===0?0:(r.next()-.5)*P*2),t:0,delay:T*.2,damage:(R.damage??1)*c.hp*Ue(),radius:R.radius??1,burn:(R.burn??0)*c.hp*Ue()}),e$1.set(C,e,{x:-999,y:-999}),e$1.set(C,f,{shape:"sprite",art:"td_meteor",w:te()*.9,h:te()*.9,alpha:0,depth:45});}else {let T={route:0,q:0,d:1/0};x.forEach((P,z)=>{for(let Z=.5;Z<=P.len-.5;Z+=.25){let F=Ye(P,Z),de=Math.hypot(F.x-v.x,F.y-v.y);de<T.d&&(T={route:z,q:Z,d:de});}});let C=R.count??1;for(let P=0;P<C;P++){let z=e$1.create(),Z=(R.hp??3)*c.hp*Ue();e$1.set(z,hn,{hp:Z,maxHp:Z,dps:(R.dps??.5)*c.hp*Ue(),left:R.time??12,route:T.route,progress:Math.max(.3,Math.min(x[T.route].len-.3,T.q+(P-(C-1)/2)*.45)),swing:0}),e$1.set(z,e,{x:0,y:0}),e$1.set(z,f,{shape:"actor",cast:R.cast??"helper",variant:r.int(0,99),h:te()*.85,pose:"idle",depth:6}),Pe(z);let F=e$1.need(z,e);V(e$1,{kind:"ring",x:F.x,y:F.y,color:"accent",size:te()*1.2});}}let g=R.cooldown*(xe().perk==="spells"?.7:1);oe.set(i,g),ge=null,Ae!==null&&e$1.isAlive(Ae)&&He(e$1,Ae,"attack"),e$1.emit("spell-cast",{id:i});},Pe=i=>{let h=e$1.need(i,hn),D=x[h.route],R=Ye(D,h.progress),v=Ye(D,h.progress-.2),g=te(),T=e$1.need(i,e),C=e$1.need(i,f),P=Ee(R.y)+g*.2;T.x=me(R.x),T.y=P-(C.shape==="actor"?C.h/2:0),C.shape==="actor"&&(Math.abs(v.x-R.x)>1e-4&&(C.facing=v.x>R.x?1:-1),C.depth=Vt(e$1,P,5),C.h=g*.85);},re=()=>{(Ae===null||!e$1.isAlive(Ae))&&(Ae=e$1.create());let i=te(),h=d.gate,D=[[1,0],[-1,0],[0,-1],[0,1]].map(([g,T])=>({col:h.col+g,row:h.row+T})).find(g=>g.col>=0&&g.row>=0&&g.col<Sn&&g.row<En&&".tr*".includes(d.rows[g.row][g.col]))??h,R=Re(D),v=R.y+i*.35;e$1.set(Ae,e,{x:R.x,y:v-i*.6}),e$1.set(Ae,f,{shape:"actor",cast:xe().cast,h:i*1.2,pose:"idle",facing:D.col>h.col?-1:1,depth:Vt(e$1,v,5)});},H=()=>{if(ht(e$1,"td-build")||d.spots.length===0)return;let i=x[0],h=Ye(i,i.len*.4),D=0,R=1/0;d.spots.forEach((v,g)=>{let T=Math.hypot(v.col+.5-h.x,v.row+.5-h.y);T<R&&(R=T,D=g);}),ft(e$1,"tap",Re(d.spots[D]),void 0,te()*1.2);},J=()=>{if(ht(e$1,"td-call")||G>0)return;let i=Re(d.paths[0][0]);ft(e$1,"tap",i,void 0,te()*1.2);},j$1=()=>{let i=Ie(e$1),h=Math.min(i.w,i.h),D=te(),R=i.h*.085,v=h*.05,g=(F,de,le,he,pe="text",We=h*.042)=>_e(F,de,le,{shape:"text",text:he,size:Math.round(We),color:pe,bold:true,depth:70});_e("h:lives:i",i.w*.07,R,{shape:"sprite",art:"heart",w:v,h:v,depth:70}),g("h:lives",i.w*.15,R,String(M),M<=5?"danger":"text"),_e("h:gold:i",i.w*.3,R,{shape:"sprite",art:"td_gold",w:v*1.15,h:v,depth:70}),g("h:gold",i.w*.4,R,String(O),"coin"),_e("h:wave:i",i.w*.56,R,{shape:"sprite",art:"td_call",w:v,h:v,depth:70}),g("h:wave",i.w*.66,R,`${G}/${c.waves.length}`),_e("h:coin:i",i.w*.8,R,{shape:"sprite",art:"coin",w:v*.9,h:v*.9,depth:70}),g("h:coin",i.w*.89,R,String(e$1.vars.coins??0));let T=i.h*.125,C=e$1.query(Te).find(F=>en(e$1.need(F,Te).kind)?.boss);if(C!==void 0){let F=e$1.need(C,Te),de=i.w*.55,le=Math.max(10,h*.022);_e("h:n:boss:bg",i.w/2,T,{shape:"rect",w:de,h:le,color:"#000000",alpha:.5,radius:le/2,depth:69});let he=Math.max(1,(de-4)*Math.max(0,F.hp/F.maxHp));_e("h:n:boss:fill",i.w/2-(de-4)/2+he/2,T,{shape:"rect",w:he,h:le-4,color:"danger",radius:(le-4)/2,depth:69.1}),_e("h:n:boss:i",i.w/2-de/2-v*.7,T,{shape:"sprite",art:"skull",w:v,h:v,depth:70});}else if(ae!==null&&G<c.waves.length){let F=new Map;for(let pe of c.waves[G].groups)F.set(pe.enemy,(F.get(pe.enemy)??0)+pe.count);let de=[...F].slice(0,5),le=h*.15,he=i.w/2-(de.length-1)*le/2;de.forEach(([pe,We],Je)=>{let dt=en(pe),Dt=he+Je*le;_e(`h:n:${pe}:a`,Dt-v*.4,T+v*.1,{shape:"actor",cast:dt.cast,variant:dt.variant??1,h:v*1.5*Math.min(1.3,dt.size+.25),pose:dt.flying?"air":"idle",depth:70}),g(`h:n:${pe}:t`,Dt+v*.55,T+v*.1,`\xD7${We}`,dt.boss?"danger":"text",h*.034);});}if(ce=[],ae!==null&&G<c.waves.length){let F=G===0?1+.08*Math.sin(e$1.time*6):1;d.paths.forEach((de,le)=>{let he=Re(de[0]),pe=D*.42;ce.push({id:`call:${le}`,x:he.x,y:he.y,r:pe*1.2}),_e(`b:call:${le}:bg`,he.x,he.y,{shape:"circle",r:pe,color:"danger",alpha:.92,depth:65},F),_e(`b:call:${le}:i`,he.x,he.y,{shape:"sprite",art:"td_call",w:pe*1.3,h:pe*1.3,depth:65.1},F),_e(`b:call:${le}:t`,he.x,he.y+pe*1.25,{shape:"text",text:String(Math.ceil(ae??0)),size:Math.round(D*.26),color:"text",bold:true,depth:65.2});});}let P=i.h*.925,z=h*.065;qr.filter(F=>c.spells.includes(F.id)).forEach((F,de)=>{let le=i.w*.12+de*z*2.6,he=oe.get(F.id)??0;ce.push({id:`spell:${F.id}`,x:le,y:P,r:z*1.15}),ge===F.id&&_e(`b:s:${F.id}:rim`,le,P,{shape:"circle",r:z*1.18,color:"coin",alpha:.6+.4*Math.sin(e$1.time*8),depth:64.9}),_e(`b:s:${F.id}:bg`,le,P,{shape:"circle",r:z,color:"panel",alpha:.92,depth:65}),_e(`b:s:${F.id}:i`,le,P,{shape:"sprite",art:F.icon,w:z*1.25,h:z*1.25,alpha:he>0?.4:1,depth:65.1}),he>0&&_e(`b:s:${F.id}:t`,le,P,{shape:"text",text:String(Math.ceil(he)),size:Math.round(z*.8),color:"text",bold:true,depth:65.2});});let Z=i.w*.88;ce.push({id:"speed",x:Z,y:P,r:z*1.15}),_e("b:speed:bg",Z,P,{shape:"circle",r:z,color:se>1?"coin":"panel",alpha:.92,depth:65}),e$1.vars.td_buttons=Ct(ce),_e("b:speed:t",Z,P,{shape:"text",text:`x${se}`,size:Math.round(z*.75),color:se>1?"panel":"text",bold:true,depth:65.1});},k$1=()=>{let i=te(),h=new Set,D=(R,v,g,T,C)=>{h.add(R);let P=ee.get(R);if(!P){P=[e$1.create(),e$1.create(),e$1.create(),e$1.create(),e$1.create()];for(let[Dt,_n]of P.entries())e$1.set(_n,Zc,{of:R,part:String(Dt)});ee.set(R,P);}let z=e$1.need(R,e),Z=e$1.need(R,f),F=Z.shape==="actor"?Z.h:i,de=z.y-F/2-i*.08,le=Math.min(Ie(e$1).w,Ie(e$1).h),he=Math.max(i*.62,le*.065),pe=Math.max(5,he*.13),We=v<.999;e$1.set(P[0],e,{x:z.x,y:de}),e$1.set(P[0],f,{shape:"rect",w:he,h:pe,color:"#000000",alpha:We?.55:0,radius:pe/2,depth:30});let Je=Math.max(1,(he-2)*Math.max(0,v));e$1.set(P[1],e,{x:z.x-(he-2)/2+Je/2,y:de}),e$1.set(P[1],f,{shape:"rect",w:Je,h:pe-2,color:g,alpha:We?1:0,radius:(pe-2)/2,depth:30.1}),e$1.set(P[2],e,{x:z.x-he/2-i*.12,y:de}),e$1.set(P[2],f,{shape:"sprite",art:T??"shield",w:i*.24,h:i*.24,alpha:T?1:0,depth:30.2});let dt=z.y+F/2;e$1.set(P[3],e,{x:z.x,y:dt}),e$1.set(P[3],f,{shape:"sprite",art:"aura_field",w:i*.75,h:i*.32,color:"primary",alpha:C?.slow?.75:0,depth:2}),e$1.set(P[4],e,{x:z.x,y:z.y}),e$1.set(P[4],f,{shape:"sprite",art:"burst",w:i*.45,h:i*.45,color:"danger",alpha:C?.burn?.5+.4*Math.sin(e$1.time*20):0,depth:29});};for(let R of e$1.query(Te)){let v=e$1.need(R,Te);D(R,v.hp/v.maxHp,"danger",en(v.kind)?.badge,{slow:v.slowLeft>0,burn:v.burnLeft>0});}for(let R of e$1.query(hn)){let v=e$1.need(R,hn);D(R,v.hp/v.maxHp,"accent",void 0,null);}for(let[R,v]of [...ee])if(!h.has(R)){for(let g of v)e$1.destroy(g);ee.delete(R);}},E=()=>{for(let i of [sn,Te,mr,hn,Xs,Ys,Zc,tl])rt(e$1,i);Se.clear(),ee.clear();for(let i of e$1.query(f))e$1.need(i,f).shape==="actor"&&i!==Ae&&!e$1.has(i,tl)&&e$1.destroy(i);},a=()=>{E(),c=Yr(Io(e$1,"meta:chapter")||1,s("difficulty"),o),d=Xr(jr(Us(c.map),c.mirror)),Le(),Tt(e$1,"top"),_=we(),tt(),O=0,it((c.gold+s("gold")+Io(e$1,"meta:start_gold"))*(xe().perk==="gold"?1.25:1)),$=s("lives")+Io(e$1,"meta:lives"),M=$,G=0,B=[],Q=0,ae=s("firstWait"),q=0,ue=0,fe=0,ie=false,ve=false,se=1,Me=null,De=[],ge=null,oe.clear(),ce=[],e$1.vars.lives=M,e$1.vars.wave=0,e$1.vars.waves=c.waves.length,e$1.vars.td_level=c.level,e$1.vars.td_world=c.world,e$1.vars.coins=0,e$1.vars.score=0,e$1.vars.stars=0,e$1.vars.reviving=false,e$1.vars.td_speed=1,e$1.vars.level_progress=0,re();},S=i=>{if(i.startsWith("call"))N();else if(i==="speed")se=se>1?1:2,e$1.vars.td_speed=se;else if(i.startsWith("spell:")){let h=i.slice(6);ge===h?ge=null:(oe.get(h)??0)<=0&&(ge=h,Fe());}};e$1.on(j,i=>{let h=i;if(h.type!=="tap"||!Ze(e$1)||Kn(e$1)||ie||je())return;if(Me!==null){let v=De.find(g=>Math.hypot(h.x-g.x,h.y-g.y)<=g.r);if(v){tn(v.action);return}Fe();}let D=ce.find(v=>Math.hypot(h.x-v.x,h.y-v.y)<=v.r);if(D){S(D.id);return}if(ge!==null){st(ge,h.x,h.y);return}let R=pt(h.x,h.y);R>=0&&(ht(e$1,"td-build")||Ot(e$1),Ht(R));}),e$1.on($t,()=>{a(),e$1.vars.level=c.level,H();}),e$1.on(Wt,a),e$1.on(Kt,ye),e$1.on(Ft,()=>{je()&&(e$1.vars.reviving=false,U("overrun"));}),e$1.on(zt,i=>{Fe(),Ge("b:"),ce=[],Ae!==null&&e$1.isAlive(Ae)&&et(e$1,Ae,i.reason==="defended"?"dance":"die");for(let h of e$1.query(Te))et(e$1,h,"idle");}),e$1.on(k,()=>{Tt(e$1,"top"),_=we(),tt();for(let i of e$1.query(sn))ct(i);rt(e$1,mr),Me!==null&&It(),re();}),e$1.addSystem({id:"tower-defense",order:0,run(i,h){if(!Ze(i)||ie||je())return;let D=h*se;q+=h;let R=te();for(let[v,g]of oe)g>0&&oe.set(v,Math.max(0,g-D));if(B.length>0){for(Q+=D;B.length>0&&B[0].at<=Q;){let v=B.shift();f$1(v.enemy,v.entry,0,G);}B.length===0&&G<c.waves.length&&(ae=s("wavePause"));}else ae!==null&&(ae-=D,ae<=0&&I());for(let v of i.query(hn)){let g=i.need(v,hn);if(g.left-=D,g.left<=0||g.hp<=0){i.remove(v,hn),et(i,v,"die"),rr(i,v,.8);for(let P of i.query(Te))i.need(P,Te).heldBy===v&&(i.need(P,Te).heldBy=-1);continue}let T=Ye(x[g.route],g.progress),C=i.query(Te).filter(P=>i.need(P,Te).heldBy===v);if(C.length<2){let P=i.query(Te).filter(z=>{let Z=i.need(z,Te),F=en(Z.kind);return Z.heldBy<0&&!F.flying&&!F.boss&&Math.hypot(Z.x-T.x,Z.y-T.y)<=Vp}).slice(0,2-C.length);for(let z of P)i.need(z,Te).heldBy=v,C.push(z);}C.length>0&&(u(C[0],g.dps*D,"soldier"),g.swing-=D,g.swing<=0&&(He(i,v,"attack"),g.swing=.6)),Pe(v);}for(let v of i.query(Te)){let g=i.get(v,Te);if(!g)continue;let T=en(g.kind);if(!(g.burnLeft>0&&(g.burnLeft-=D,u(v,g.burn*D,"burn"),!i.has(v,Te)))){if(g.slowLeft>0&&(g.slowLeft-=D,g.slowLeft<=0&&(g.slow=0)),g.stun>0&&(g.stun-=D),T.heals&&(g.healCd-=D,g.healCd<=0)){g.healCd=T.heals.every;for(let P of i.query(Te)){let z=i.need(P,Te);Math.hypot(z.x-g.x,z.y-g.y)>T.heals.radius||(z.hp=Math.min(z.maxHp,z.hp+z.maxHp*T.heals.share));}let C=y(v);V(i,{kind:"ring",x:C.x,y:C.y,color:"accent",size:T.heals.radius*R*2});}if(T.summons&&(g.summonCd-=D,g.summonCd<=0)){g.summonCd=T.summons.every;for(let C=0;C<T.summons.count;C++)f$1(T.summons.id,g.route,Math.max(0,g.progress-.45*(C+1)),g.wave);He(i,v,"cheer");}if(T.enrage&&!g.enraged&&g.hp<g.maxHp*T.enrage.below){g.enraged=true;let C=y(v);V(i,{kind:"ring",x:C.x,y:C.y,color:"danger",size:R*2});}if(g.heldBy>=0&&!i.has(g.heldBy,hn)&&(g.heldBy=-1),g.heldBy<0&&g.stun<=0&&(g.progress+=T.speed*(1-g.slow)*(g.enraged&&T.enrage?T.enrage.speed:1)*D),g.progress>=x[g.route].len){if(A(v),ie||je())return;continue}m(v);}}for(let v of i.query(sn)){let g=i.need(v,sn);if(g.cooldown-=D,g.cooldown>0)continue;let T=kn(g.kind),C=wo(T,g.tier,g.branch||null),P=1+Io(i,T.metaVar),z=d.spots[g.spot],Z=z.col+.5,F=z.row+.5,de=i.query(Te).filter(he=>{let pe=i.need(he,Te);return (en(pe.kind).flying?C.air:C.ground)&&pe.progress>0&&Math.hypot(pe.x-Z,pe.y-F)<=C.range}).sort((he,pe)=>p(i.need(he,Te))-p(i.need(pe,Te))).slice(0,C.multishot??1);if(de.length===0){g.cooldown=0;continue}g.cooldown=1/C.rate;let le={x:me(Z),y:Ee(F)-R*.75};for(let he of de){let pe=C.crit!==void 0&&r.chance(C.crit);if(C.beam){let _n=[],yn=le,ln=he,Wn=1;for(let br=0;br<=(C.chain??0)&&ln!==void 0;br++){let Pl=y(ln);L(yn,Pl,C.type==="magic"?"secondary":"primary"),_n.push(ln);let vr=i.need(ln,Te),zd=i.query(Te).filter(xr=>!_n.includes(xr)&&Math.hypot(i.need(xr,Te).x-vr.x,i.need(xr,Te).y-vr.y)<=1.6).sort((xr,Cl)=>Math.hypot(i.need(xr,Te).x-vr.x,i.need(xr,Te).y-vr.y)-Math.hypot(i.need(Cl,Te).x-vr.x,i.need(Cl,Te).y-vr.y))[0];l(ln,C,P,pe,Wn),yn=Pl,ln=zd,Wn*=.7;}continue}let We=y(he),Je=i.create(),dt=Math.max(1,Math.hypot(We.x-le.x,We.y-le.y));i.set(Je,mr,{target:he,x:le.x,y:le.y,ax:We.x,ay:We.y,dist0:dt,went:0,stats:C,power:P,crit:pe}),i.set(Je,e,{x:le.x,y:le.y});let Dt=C.shot==="td_arrow"?{w:R*.55,h:R*.18}:C.lob?{w:R*.34,h:R*.34}:{w:R*.3,h:R*.3};i.set(Je,f,{shape:"sprite",art:C.shot,...Dt,...C.burn?{color:"danger"}:C.slow?{color:"primary"}:C.type==="magic"?{color:"secondary"}:{},depth:40});}}for(let v of i.query(mr)){let g=i.need(v,mr);if(i.has(g.target,Te)){let F=y(g.target);g.ax=F.x,g.ay=F.y;}let T=g.ax-g.x,C=g.ay-g.y,P=Math.hypot(T,C),z=g.stats.shotSpeed*R*D,Z=i.need(v,e);if(P>z){g.x+=T/P*z,g.y+=C/P*z,g.went+=z;let F=Math.min(1,g.went/g.dist0);Z.x=g.x,Z.y=g.y-(g.stats.lob?Math.sin(Math.PI*F)*R*.9:0),Z.rotation=g.stats.lob?(Z.rotation??0)+D*8:Math.atan2(C,T);continue}if(i.destroy(v),g.stats.splash){let F=Ce(g.ax,g.ay);V(i,{kind:"burst",x:g.ax,y:g.ay,color:g.stats.burn?"danger":g.stats.slow?"primary":"coin",n:12,size:g.stats.splash*R*1.6}),g.stats.lob&&V(i,{kind:"shake",power:.25});for(let de of i.query(Te)){let le=i.need(de,Te),he=en(le.kind);(he.flying?g.stats.air:g.stats.ground)&&Math.hypot(le.x-F.x,le.y+(he.flying?-0.55:0)-F.y)<=g.stats.splash&&l(de,g.stats,g.power,g.crit);}}else i.has(g.target,Te)&&(V(i,{kind:"burst",x:g.ax,y:g.ay,color:g.stats.type==="magic"?"secondary":"coin",n:5,size:R*.5}),l(g.target,g.stats,g.power,g.crit));if(ie||je())return}for(let v of i.query(Xs)){let g=i.need(v,Xs);g.t+=D;let T=(g.t-g.delay)/Hp,C=i.need(v,e),P=i.need(v,f);if(T<0)continue;if(T<1){let Z=Ie(i).h;C.x=me(g.x)+(1-T)*R*2,C.y=Ee(g.y)-(1-T)*Z*.5,C.rotation=-0.9,P.shape==="sprite"&&(P.alpha=1);continue}i.destroy(v),V(i,{kind:"burst",x:me(g.x),y:Ee(g.y),color:"danger",n:20,size:g.radius*R*2}),V(i,{kind:"ring",x:me(g.x),y:Ee(g.y),color:"coin",size:g.radius*R*2.2}),V(i,{kind:"shake",power:.8});let z={damage:g.damage,type:"true",...g.burn>0?{burn:g.burn,burnTime:2}:{}};for(let Z of i.query(Te)){let F=i.need(Z,Te);Math.hypot(F.x-g.x,F.y-g.y)<=g.radius&&l(Z,z,1,false,1,"spell");}if(ie||je())return}for(let v of i.query(Ys)){let g=i.need(v,Ys);g.life-=h,g.life<=0&&i.destroy(v);}if(G>=c.waves.length&&B.length===0&&i.query(Te).length===0){U("defended");return}i.vars.level_progress=c.waves.length>0?Math.min(1,(G-(B.length>0||i.query(Te).length>0?.5:0))/c.waves.length):0,i.vars.score=ke(),at.clear(),Me!==null&&It(),k$1(),j$1(),Pt(["m:","h:","b:"]);}});let L=(i,h,D)=>{let R=Math.hypot(h.x-i.x,h.y-i.y),v=e$1.create();e$1.set(v,Ys,{life:.16}),e$1.set(v,e,{x:(i.x+h.x)/2,y:(i.y+h.y)/2,rotation:Math.atan2(h.y-i.y,h.x-i.x)}),e$1.set(v,f,{shape:"sprite",art:"zap",w:Math.max(8,R),h:te()*.22,color:D,depth:41});};Le(),a();}};var No=[{id:"lemon",art:"biz1",color:"coin",cost:4,income:1,cycle:1,growth:1.07,manager:60},{id:"bakery",art:"biz2",color:"accent",cost:50,income:17,cycle:2,growth:1.1,manager:600},{id:"cafe",art:"biz3",color:"secondary",cost:600,income:225,cycle:3,growth:1.11,manager:7e3},{id:"workshop",art:"biz4",color:"primary",cost:7e3,income:2800,cycle:4,growth:1.11,manager:8e4},{id:"cinema",art:"ty_cinema",color:"danger",cost:8e4,income:4e4,cycle:6,growth:1.11,manager:1e6},{id:"hotel",art:"biz6",color:"secondary",cost:9e5,income:51e4,cycle:8,growth:1.11,manager:11e6},{id:"bank",art:"biz5",color:"coin",cost:1e7,income:62e5,cycle:10,growth:1.11,manager:12e7},{id:"port",art:"ty_port",color:"primary",cost:12e7,income:8e7,cycle:12,growth:1.11,manager:15e8}],yr=e=>No.find(t=>t.id===e),$o=[{at:10,speed:2},{at:25,speed:2},{at:50,speed:2},{at:75,income:3},{at:100,speed:2},{at:150,income:3}],ea=.1,ta=[{id:"double",scope:"one",art:"ty_up",mult:2,price:60,after:5},{id:"triple",scope:"one",art:"ty_up3",mult:3,price:2500,after:25},{id:"all",scope:"all",art:"ty_upall",mult:2,price:40,after:15}],Qr=[{id:"rush",art:"ty_rush",effect:"rush",weight:3,ttl:7,mult:3,seconds:10},{id:"break",art:"ty_wrench",effect:"break",weight:2,ttl:99,taps:3},{id:"invest",art:"ty_investor",effect:"invest",weight:1,ttl:9,now:25,mult:2,seconds:30},{id:"courier",art:"chest",effect:"courier",weight:2,ttl:6,now:15,coins:2}],Qc=e=>Qr.find(t=>t.id===e),rl=[11,18],ol=[{id:"rush",art:"ty_sk_rush",charge:30,effect:"rush",mult:5,seconds:12},{id:"instant",art:"ty_sk_instant",charge:26,effect:"instant",cycles:8},{id:"sale",art:"ty_sk_sale",charge:28,effect:"sale",mult:.5,seconds:15}],na=e=>ol.find(t=>t.id===e),ed=.4,td=3,eo=[{id:"hero",cast:"hero",gems:0,skill:"rush"},{id:"hero2",cast:"hero2",gems:150,skill:"instant"},{id:"hero3",cast:"hero3",gems:300,skill:"sale"}];var nd={l:"lemon",b:"bakery",c:"cafe",w:"workshop",n:"cinema",h:"hotel",k:"bank",p:"port"},Gp={r:"rush",b:"break",i:"invest",c:"courier"},Be=(e,t,n="",s)=>({businesses:[...e].map(r=>nd[r]??"lemon"),goals:t,events:[...n].map(r=>Gp[r]??"rush"),...{}}),Qs=e=>({...e,vip:true}),Ve=e=>({kind:"cash",n:e}),St=(e,t)=>({kind:"level",biz:nd[e]??"lemon",n:t}),Yt=e=>({kind:"managers",n:e}),gr=[Be("lb",[Ve(5200)]),Be("lb",[St("l",25),Ve(62e3)]),Be("lbc",[Ve(17e3)],"r"),Be("lbc",[Yt(2),Ve(34e3)],"r"),Be("lbc",[St("b",25),Ve(51e3)],"rc"),Be("lbcw",[Ve(21e4)],"rc"),Be("lbcw",[St("c",25),Yt(2)],"rc"),Be("lbcw",[Yt(3),Ve(46e4)],"rc"),Be("lbcw",[St("w",10),Ve(1e6)],"rc"),Qs(Be("lbcw",[St("c",25),Yt(4),Ve(5e6)],"rc")),Be("bcw",[Ve(73e3)],"rb"),Be("bcw",[St("c",25),Ve(17e4)],"rcb"),Be("bcwn",[Ve(2e5)],"rcb"),Be("bcwn",[Yt(2),Ve(42e4)],"rcb"),Be("bcwn",[St("n",5),Ve(97e4)],"rcb"),Be("bcwn",[St("w",25),Ve(24e5)],"rcb"),Be("bcwn",[Yt(3),Ve(19e5)],"rcb"),Be("bcwn",[St("c",50),Ve(32e5)],"rcb"),Be("bcwn",[St("n",10),Yt(3)],"rcb"),Qs(Be("bcwn",[St("n",10),Yt(4),Ve(64e6)],"rcb")),Be("cwn",[Ve(12e5)],"rcbi"),Be("cwn",[St("w",25),Ve(2e6)],"rcbi"),Be("cwnh",[Ve(27e5)],"rcbi"),Be("cwnh",[Yt(2),Ve(32e5)],"rcbi"),Be("cwnh",[St("h",5),Ve(16e6)],"rcbi"),Be("cwnh",[St("n",25),Ve(26e6)],"rcbi"),Be("cwnh",[Yt(3),Ve(15e6)],"rcbi"),Be("cwnh",[St("w",50),Ve(42e6)],"rcbi"),Be("cwnh",[St("h",10),Yt(3)],"rcbi"),Qs(Be("cwnh",[St("h",10),Yt(4),Ve(26e7)],"rcbi")),Be("wnhk",[Ve(12e6)],"rcbi"),Be("wnhk",[St("h",10),Ve(36e6)],"rcbi"),Be("wnhk",[Yt(3),Ve(21e7)],"rcbi"),Be("nhkp",[Ve(21e7)],"rcbi"),Be("nhkp",[St("k",10),Ve(38e7)],"rcbi"),Be("nhkp",[Yt(2),Ve(42e7)],"rcbi"),Be("nhkp",[St("p",5),Ve(27e8)],"rcbi"),Be("nhkp",[St("k",25),Ve(32e8)],"rcbi"),Be("nhkp",[St("p",10),Yt(3)],"rcbi"),Qs(Be("nhkp",[St("p",10),Yt(4),Ve(11e9)],"rcbi"))],to=10,rd=4,Zr=gr.length,sl=[0,18,45,75],al=e=>sl[Math.ceil(Math.max(1,e)/to)-1]??0,ra=e=>e>=.3?3:e>=.12?2:1,oa=30,od=(e,t)=>Math.round((t?40:20)+(e-1)*2),il=(e,t)=>(t?120:50)+(e-1)*10,ll="kit-tycoon",cl=[{id:"StartCash",var:"meta:cash",art:"coin",color:"coin",perLevel:20,unit:"%",maxLevel:15,price:40,growth:.12},{id:"CycleSpeed",var:"meta:speed",art:"hourglass",color:"secondary",perLevel:3,unit:"%",maxLevel:15,price:45,growth:.12},{id:"Income",var:"meta:income",art:"ty_up",color:"accent",perLevel:5,unit:"%",maxLevel:20,price:40,growth:.12},{id:"Discount",var:"meta:discount",art:"ty_sk_sale",color:"primary",perLevel:2,unit:"%",maxLevel:15,price:50,growth:.12},{id:"SkillPower",var:"meta:skill",art:"ty_sk_rush",color:"secondary",perLevel:8,unit:"%",maxLevel:10,price:50,growth:.12}],sd={game:"tycoon",character:ll,stats:cl,heroes:eo,levels:Zr,firstClearGold:e=>il(e,gr[Math.max(1,Math.min(Zr,e))-1]?.vip===true),stars:3,starsToEnter:al};var Kp={income:0,speed:0,discount:0};function zo(e,t=Kp,n){return {biz:e.businesses.map((r,o)=>({def:yr(r)??No[0],level:o===0?1:0,progress:0,ready:false,manager:false,mult:1,rush:0,rushMult:1,broken:0})),cash:n??id(e),earned:0,allMult:1,bought:new Set,timed:[],mods:t}}var id=e=>e.cash??(yr(e.businesses[1]??e.businesses[0]??"lemon")?.cost??4)*2,Fp=e=>e.timed.reduce((t,n)=>t*n.income,1),Up=e=>e.timed.reduce((t,n)=>t*n.price,1);function Wo(e){let t=1,n=1,s=0;for(let r of $o)e>=r.at?(t*=r.speed??1,n*=r.income??1):s===0&&(s=r.at);return {speed:t,income:n,next:s}}function Jn(e,t){let n=Wo(t.level);return Math.max(ea,t.def.cycle/n.speed/(1+e.mods.speed))}function mn(e,t,n=t.level){if(n<=0)return 0;let s=Wo(n),r=t.def.cycle/s.speed/(1+e.mods.speed),o=r<ea?ea/r:1;return t.def.income*n*s.income*o*t.mult*e.allMult*(1+e.mods.income)*(t.rush>0?t.rushMult:1)*Fp(e)}var sa=(e,t)=>t.level<=0||t.broken>0?0:mn(e,t)/Jn(e,t),aa=e=>e.biz.reduce((t,n)=>t+sa(e,n),0),Bo=e=>Math.max(.1,1-Math.min(.9,e.mods.discount))*Up(e);function Zn(e,t,n=1){let s=t.def.growth,r=t.def.cost*Math.pow(s,t.level),o=n<=1?r:r*(Math.pow(s,n)-1)/(s-1);return Math.ceil(o*Bo(e))}function pl(e,t,n=1e3){let s=t.def.growth,r=t.def.cost*Math.pow(s,t.level)*Bo(e);if(e.cash<r)return 0;let o=Math.floor(Math.log(e.cash*(s-1)/r+1)/Math.log(s)),c=Math.max(1,Math.min(n,o));for(;c>1&&Zn(e,t,c)>e.cash;)c--;return Zn(e,t,c)<=e.cash?c:0}var no=(e,t)=>Math.ceil(t.def.manager*Bo(e));function ia(e,t,n=1){let s=e.biz[t];if(!s||n<1)return {ok:false,milestones:[]};let r=Zn(e,s,n);if(e.cash<r)return {ok:false,milestones:[]};e.cash-=r;let o=s.level;return s.level+=n,{ok:true,milestones:$o.filter(c=>o<c.at&&s.level>=c.at).map(c=>c.at)}}function la(e,t){let n=e.biz[t];if(!n||n.manager||n.level<=0)return false;let s=no(e,n);return e.cash<s?false:(e.cash-=s,n.manager=true,n.ready&&(n.ready=false,n.progress=0,Ho(e,mn(e,n))),true)}var Ho=(e,t)=>{e.cash+=t,e.earned+=t;};function ca(e,t){let n=e.biz[t];if(!n||!n.ready)return 0;n.ready=false,n.progress=0;let s=mn(e,n);return Ho(e,s),s}function da(e,t){let n=e.biz[t];return !n||n.broken<=0?false:(n.broken--,n.broken===0)}function ul(e,t){let n=0;for(let s of e.biz)s.level<=0||s.broken>0||(n+=mn(e,s)*t);return Ho(e,n),n}var fl=(e,t)=>Ho(e,t);function pa(e,t){let n=e.timed.findIndex(s=>s.id===t.id);n>=0&&e.timed.splice(n,1),e.timed.push(t);}function ua(e,t){let n=[],s=[];e.biz.forEach((r,o)=>{if(r.rush>0&&(r.rush=Math.max(0,r.rush-t)),!(r.level<=0||r.ready||r.broken>0)&&(r.progress+=t/Jn(e,r),!(r.progress<1)))if(r.manager){let c=Math.floor(r.progress);r.progress-=c;let d=mn(e,r)*c;Ho(e,d),s.push({index:o,amount:d});}else r.progress=1,r.ready=true,n.push(o);});for(let r=e.timed.length-1;r>=0;r--){let o=e.timed[r];o.left-=t,o.left<=0&&e.timed.splice(r,1);}return {ready:n,paid:s}}function hl(e){let t=[],n=e.biz.reduce((s,r)=>Math.max(s,r.def.cost),0);for(let s of ta)s.scope==="all"?t.push({key:s.id,def:s,index:-1,price:Math.ceil(n*s.price*Bo(e))}):e.biz.forEach((r,o)=>t.push({key:`${s.id}:${r.def.id}`,def:s,index:o,price:Math.ceil(r.def.cost*s.price*Bo(e))}));return t}function fa(e,t=3){return hl(e).filter(n=>!e.bought.has(n.key)&&(n.index<0?(e.biz[0]?.level??0)>=n.def.after:(e.biz[n.index]?.level??0)>=n.def.after)).sort((n,s)=>n.price-s.price).slice(0,t)}function ha(e,t){let n=hl(e).find(s=>s.key===t);return !n||e.bought.has(t)||e.cash<n.price?false:(e.cash-=n.price,e.bought.add(t),n.index<0?e.allMult*=n.def.mult:e.biz[n.index].mult*=n.def.mult,true)}var ma=e=>e.biz.filter(t=>t.manager).length;function $n(e,t){if(t.kind==="cash")return Math.min(1,e.earned/Math.max(1,t.n));if(t.kind==="managers")return Math.min(1,ma(e)/Math.max(1,t.n));let n=e.biz.find(s=>s.def.id===t.biz);return Math.min(1,(n?.level??0)/Math.max(1,t.n))}var Vo=(e,t)=>t.every(n=>$n(e,n)>=1),ya=(e,t)=>t.length?t.reduce((n,s)=>n+$n(e,s),0)/t.length:1,dl=(e,t)=>t.manager?1:Jn(e,t)/(Jn(e,t)+1.2);function ga(e,t){let n=e.biz.findIndex(M=>M.broken>0);if(n>=0)return {kind:"fix",index:n};let s=null,r=aa(e),o=(M,$,G)=>{if(G>e.cash+r*8)return;let B=$/Math.max(1,G);(!s||B>s.value)&&(s={move:M,value:B,price:G});},c=M=>t.some($=>$.kind==="level"&&$.biz===M&&$n(e,$)<1),d=t.some(M=>M.kind==="managers"&&$n(e,M)<1),x=t.some(M=>M.kind==="cash"&&$n(e,M)<1);e.biz.forEach((M,$)=>{let G=sa(e,M)*dl(e,M),B={...M,level:M.level+1},ae=(mn(e,B)/Jn(e,B)*dl(e,B)-G)*(M.level===0?3:1)*(c(M.def.id)?3:1);o({kind:"buy",index:$},ae+(c(M.def.id)&&!x?r*.05:0),Zn(e,M)),M.level>0&&!M.manager&&o({kind:"hire",index:$},sa(e,M)*(1-dl(e,M))*1.6*(d?3:1)+(d?r*.05:0),no(e,M));});for(let M of fa(e,6)){let $=M.index<0?r*(M.def.mult-1):sa(e,e.biz[M.index])*(M.def.mult-1);o({kind:"upgrade",key:M.key},$,M.price);}let _=e.biz.map((M,$)=>({b:M,i:$})).filter(M=>M.b.ready).sort((M,$)=>mn(e,$.b)-mn(e,M.b))[0],O=s;return O&&O.price<=e.cash?O.move:_?{kind:"collect",index:_.i}:null}function ld(e,t){return t?t.kind==="collect"?ca(e,t.index)>0:t.kind==="buy"?ia(e,t.index).ok:t.kind==="hire"?la(e,t.index):t.kind==="fix"?da(e,t.index)||true:ha(e,t.key):false}function cd(e,t={}){let n=zo(e,t.mods),s=.05,r=t.tapEvery??.4,o=t.max??900,c=0,d=0;for(;c<o;){if(Vo(n,e.goals))return c;if(ua(n,s),c+=s,c>=d){let x=ga(n,e.goals);x&&(ld(n,x),d=c+r);}}return 1/0}var ad=new Map;function ba(e){let t=ad.get(e);return t===void 0&&(t=cd(gr[e-1]),ad.set(e,t)),t}function ro(e,t=.5){let n=Math.max(1,Math.min(Zr,Math.floor(e))),s=gr[n-1],r=Math.ceil(n/to),o=n-(r-1)*to,c=ba(n),d=(1.6-(r-1)*.08-o*.01)*(1.1-t*.2)*(s.extra??1),x=Math.max(45,Math.min(600,Math.ceil((Number.isFinite(c)?c:400)*d/5)*5));return {level:n,world:r,index:o,def:s,boss:s.vip===true,day:x,cash:id(s),coins:od(n,s.vip===true),firstClearGold:il(n,s.vip===true)}}var qp=b("tycoon.part"),ml=b("tycoon.manager"),oo=(e,t)=>{let n=Number(e.vars[t]??0);return Number.isFinite(n)?n:0},an=e=>{let t=Math.abs(e);for(let[n,s]of [[1e12,"T"],[1e9,"B"],[1e6,"M"],[1e3,"K"]])if(t>=n)return `${(e/n).toFixed(t>=n*100?0:1).replace(/\.0$/,"")}${s}`;return String(Math.floor(e))},dd=new WeakMap,pd=e=>dd.get(e),Go=[1,10,0],va={id:"tycoon",version:2,engines:["phaser"],requires:["round"],params:{difficulty:{type:"number",default:.5,min:0,max:1},coinReward:{type:"number",default:1,min:0,max:10}},setup({world:e$1,params:t,mode:n}){let s=l=>nn(t,l),r=e$1.rng.stream("tycoon"),o=pn(n,"events",Qr.map(l=>l.id)),c=ro(1,s("difficulty")),d=zo(c.def),x=new Map,_=new Map,O=null,M=[],$=0,G=0,B=0,Q=0,ae=0,q=false,ue=false,fe=0,ie=null,ve=null,se=null,Me=()=>eo.find(l=>l.id===e$1.vars["meta:hero"])??eo[0],De=()=>na(Me().skill),ge=()=>e$1.vars.reviving===true,oe=()=>c.def.goals,ce=()=>{let l=Ie(e$1);return {...l,U:Math.min(l.w,l.h)}},Ae=l=>{let u=ce(),b=Math.max(1,d.biz.length),A=u.h*.25,I=u.h*.81,N=Math.max(6,u.h*.012),U=Math.min((I-A-N*(b-1))/b,150,u.w*.26),X=Math.min(u.w*.96,660),ye=A+(I-A-(b*U+(b-1)*N))/2;return {x:u.w/2,y:ye+l*(U+N)+U/2,w:X,h:U}},Se=l=>{let u=Ae(l);return {x:u.x-u.w/2+u.h*.56,y:u.y,size:u.h*.9}},ee=()=>ce().h*.9,xe=()=>{let l=ce();return Math.min(l.U*.075,l.h*.055)},je=()=>{let l=ce(),u=ve?1-ve.left/ve.def.ttl:0;return {x:-l.w*.05+u*l.w*1.1,y:l.h*.21,r:l.U*.06}},we=new Set,te=(l,u,b,A,I=1)=>{we.add(l);let N=x.get(l);(N===void 0||!e$1.isAlive(N))&&(N=e$1.create(),e$1.set(N,qp,{id:l}),x.set(l,N)),e$1.set(N,e,{x:u,y:b,scale:I}),e$1.set(N,f,A);},me=()=>{for(let[l,u]of [...x])we.has(l)||(e$1.destroy(u),x.delete(l));},Ee=(l,u,b,A,I,N,U=70)=>te(l,u,b,{shape:"text",text:A,size:Math.max(9,Math.round(N)),color:I,bold:true,depth:U}),Re=(l,u,b,A,I,N,U,X=2)=>{te(`${l}:bg`,u,b,{shape:"rect",w:A+4,h:I+4,color:"#000000",alpha:.4,radius:(I+4)/2,depth:X});let ye=Math.max(1,A*Math.max(0,Math.min(1,N)));te(`${l}:fill`,u-A/2+ye/2,b,{shape:"rect",w:ye,h:I,color:U,radius:I/2,depth:X+.1});},Ce=l=>M.push(l),Y=l=>{let u=d.biz[l],b=Go[ae]??1;return b===0?Math.max(1,pl(d,u)):b},Le=()=>{d.biz.forEach((l,u)=>{let b=Ae(u),A=Se(u),I=l.level>0,N=l.def.color;te(`r${u}`,b.x,b.y,{shape:"sprite",art:"panel",w:b.w,h:b.h,color:"panel",depth:0}),l.rush>0&&te(`r${u}:rush`,A.x,A.y,{shape:"circle",r:A.size*.55,color:"coin",alpha:.35+.2*Math.sin(e$1.time*8),depth:.5});let U=l.ready?1+.06*Math.abs(Math.sin(e$1.time*6)):1;te(`r${u}:b`,A.x,A.y,{shape:"sprite",art:l.def.art,w:A.size,h:A.size,color:N,alpha:I?l.broken>0?.55:1:.35,depth:1},U),Ce({id:`biz${u}`,x:A.x,y:A.y,w:A.size,h:A.size});let X=b.x-b.w*.12,ye=b.h*.2,ke=Wo(l.level);if(Ee(`r${u}:lv`,X,b.y-b.h*.26,I?`Lv ${l.level}${ke.next?`/${ke.next}`:""}`:"Lv 0","text",ye,2),I){Ee(`r${u}:inc`,X,b.y+b.h*0,`+${an(mn(d,l))}`,"coin",ye*.95,2);let a=l.ready||Jn(d,l)<=.15&&l.manager?1:l.progress;Re(`r${u}:bar`,X,b.y+b.h*.28,b.w*.3,Math.max(6,b.h*.12),a,l.broken>0?"danger":N),l.ready&&!l.manager&&Ee(`r${u}:ok`,A.x+A.size*.36,A.y+A.size*.34,"$","coin",A.size*.3,3);}if(ie?.index===u){let a=1+.12*Math.sin(e$1.time*9);te(`r${u}:ev`,A.x+A.size*.32,A.y-A.size*.3,{shape:"sprite",art:ie.def.art,w:A.size*.5,h:A.size*.5,depth:4},a);}else l.broken>0&&(te(`r${u}:ev`,A.x+A.size*.3,A.y-A.size*.28,{shape:"sprite",art:"ty_wrench",w:A.size*.48,h:A.size*.48,depth:4},1+.08*Math.sin(e$1.time*10)),Ee(`r${u}:evn`,A.x+A.size*.3,A.y+A.size*.05,String(l.broken),"danger",A.size*.26,4.1));let Ue=b.x+b.w*.13,st=b.h*.27;if(I&&!l.manager){let a=no(d,l),S=d.cash>=a;te(`r${u}:m:bg`,Ue,b.y-b.h*.08,{shape:"circle",r:st,color:S?"secondary":"panel",alpha:S?.95:.7,depth:1}),te(`r${u}:m`,Ue,b.y-b.h*.08,{shape:"sprite",art:"ty_manager",w:st*1.7,h:st*1.7,alpha:S?1:.5,depth:1.2}),Ee(`r${u}:m:p`,Ue,b.y+b.h*.32,an(a),S?"text":"muted",ye*.8,2),Ce({id:`mgr${u}`,x:Ue,y:b.y,w:st*2.2,h:b.h*.9});}let Pe=b.x+b.w/2-b.w*.14,re=b.w*.25,H=b.h*.72,J=Y(u),j=Zn(d,l,J),k=d.cash>=j;te(`r${u}:buy`,Pe,b.y,{shape:"sprite",art:"button",w:re,h:H,color:k?"accent":"panel",alpha:k?1:.6,depth:1}),Ee(`r${u}:buy:n`,Pe,b.y-H*.2,I?`+${J}`:"OPEN","text",ye*.9,2),te(`r${u}:buy:c`,Pe-re*.3,b.y+H*.2,{shape:"sprite",art:"coin",w:ye*.8,h:ye*.8,depth:2}),Ee(`r${u}:buy:p`,Pe+re*.08,b.y+H*.2,an(j),k?"coin":"muted",ye*.85,2),Ce({id:`buy${u}`,x:Pe,y:b.y,w:re,h:H});let E=_.get(u);if(l.manager&&(E===void 0||!e$1.isAlive(E))&&(E=e$1.create(),e$1.set(E,ml,{index:u}),e$1.set(E,f,{shape:"actor",cast:"helper",variant:u*13+5,h:b.h*.78,pose:"idle",facing:1,depth:2}),_.set(u,E)),E!==void 0&&e$1.isAlive(E)){e$1.set(E,e,{x:Ue,y:b.y+b.h*.02});let a=e$1.need(E,f);a.shape==="actor"&&(a.h=b.h*.78);}});},Ye=l=>l.kind==="cash"?"coin":l.kind==="managers"?"ty_manager":yr(l.biz??"")?.art??"biz1",at=l=>l.kind==="cash"?d.earned:l.kind==="managers"?ma(d):d.biz.find(u=>u.def.id===l.biz)?.level??0,_e=()=>{let l=ce(),u=l.U,b=l.h*.09;te("h:t:i",l.w*.09,b,{shape:"sprite",art:"hourglass",w:u*.06,h:u*.06,depth:70}),Ee("h:t",l.w*.09+u*.09,b,Zo($),$<=15?"danger":"text",u*.05),te("h:c:i",l.w*.42,b,{shape:"sprite",art:"coin",w:u*.07,h:u*.07,depth:70}),Ee("h:c",l.w*.42+u*.13,b,an(d.cash),"coin",u*.065);let A=u*.17;te("h:mode",l.w*.88,b,{shape:"sprite",art:"button",w:A,h:u*.08,color:"secondary",depth:70}),Ee("h:mode:t",l.w*.88,b,Go[ae]===0?"MAX":`\xD7${Go[ae]}`,"text",u*.042,70.1),Ce({id:"mode",x:l.w*.88,y:b,w:A,h:u*.09});let I=oe(),N=Math.min(l.w*.3,230),U=Math.max(30,l.h*.05),X=l.h*.15;if(I.forEach((re,H)=>{let J=l.w/2+(H-(I.length-1)/2)*(N+u*.02),j=$n(d,re)>=1;te(`h:g${H}`,J,X,{shape:"sprite",art:"panel",w:N,h:U,color:j?"accent":"panel",depth:70}),te(`h:g${H}:i`,J-N*.36,X-U*.06,{shape:"sprite",art:Ye(re),w:U*.75,h:U*.75,depth:70.1});let k=at(re),E=j?"\u2713":re.kind==="cash"?`${an(k)}/${an(re.n)}`:re.kind==="level"?`Lv ${k}/${re.n}`:`${k}/${re.n}`;Ee(`h:g${H}:t`,J+N*.1,X-U*.08,E,"text",U*.36,70.1),Re(`h:g${H}:bar`,J+N*.1,X+U*.3,N*.62,Math.max(4,U*.1),$n(d,re),j?"accent":"coin",70.1);}),d.timed.forEach((re,H)=>{let J=l.w*.9-H*u*.16,j=re.id==="sale"?"ty_sk_sale":re.id==="invest"?"ty_investor":De().art;te(`h:tm${H}`,J-u*.04,l.h*.205,{shape:"sprite",art:j,w:u*.06,h:u*.06,depth:70}),Ee(`h:tm${H}:t`,J+u*.035,l.h*.205,`${Math.ceil(re.left)}`,"secondary",u*.04);}),ve){let re=je();te("h:courier",re.x,re.y+Math.sin(e$1.time*10)*re.r*.08,{shape:"sprite",art:ve.def.art,w:re.r*2,h:re.r*2,depth:72}),Ce({id:"courier",x:re.x,y:re.y,w:re.r*2.6,h:re.r*2.6});}let ye=ee(),ke=xe(),Ue=l.w*.25,st=Q>=De().charge;st&&te("h:sk:glow",Ue,ye,{shape:"circle",r:ke*1.28,color:"secondary",alpha:.5+.3*Math.sin(e$1.time*7),depth:68.9}),te("h:sk:bg",Ue,ye,{shape:"circle",r:ke,color:"panel",alpha:.95,depth:69}),te("h:sk",Ue,ye,{shape:"sprite",art:De().art,w:ke*1.4,h:ke*1.4,alpha:st?1:.45,depth:69.2}),Re("h:charge",Ue,ye+ke*1.3,ke*2,Math.max(5,ke*.2),Q/De().charge,"secondary",69),Ce({id:"skill",x:Ue,y:ye,w:ke*2.4,h:ke*2.4}),fa(d,3).forEach((re,H)=>{let J=l.w*(.47+H*.18),j=d.cash>=re.price;te(`h:u${H}:bg`,J,ye,{shape:"circle",r:ke,color:j?"accent":"panel",alpha:j?.95:.7,depth:69}),te(`h:u${H}`,J,ye-ke*.08,{shape:"sprite",art:re.def.art,w:ke*1.5,h:ke*1.5,alpha:j?1:.55,depth:69.2});let k=re.index>=0?d.biz[re.index]:void 0;k&&te(`h:u${H}:b`,J+ke*.7,ye-ke*.6,{shape:"sprite",art:k.def.art,w:ke*.9,h:ke*.9,color:k.def.color,depth:69.3}),Ee(`h:u${H}:p`,J,ye+ke*1.3,an(re.price),j?"coin":"muted",ke*.42,69.3),Ce({id:`up:${re.key}`,x:J,y:ye,w:ke*2.3,h:ke*2.6});}),(O===null||!e$1.isAlive(O))&&(O=e$1.create(),e$1.set(O,f,{shape:"actor",cast:Me().cast,h:ke*2.6,pose:"idle",facing:1,depth:20})),e$1.set(O,e,{x:l.w*.09,y:ye-ke*.1});let Pe=e$1.need(O,f);if(Pe.shape==="actor"&&(Pe.h=ke*2.6),se){let re=Math.min(l.w*.86,500),H=re*.42,J=l.w/2,j=l.h*.5;te("h:inv:dim",J,j,{shape:"rect",w:l.w,h:l.h,color:"#000000",alpha:.35,depth:79}),te("h:inv",J,j,{shape:"sprite",art:"panel",w:re,h:H,color:"panel",depth:80}),te("h:inv:i",J-re*.34,j,{shape:"sprite",art:se.def.art,w:H*.62,h:H*.62,depth:80.1});let k=re*.3,E=H*.5,a=Ke();te("h:inv:a",J+re*.02,j-H*.04,{shape:"sprite",art:"button",w:k,h:E,color:"accent",depth:80.1}),te("h:inv:a:c",J+re*.02-k*.28,j-H*.04,{shape:"sprite",art:"coin",w:E*.4,h:E*.4,depth:80.2}),Ee("h:inv:a:t",J+re*.02+k*.1,j-H*.04,an(a),"coin",E*.3,80.2),te("h:inv:b",J+re*.33,j-H*.04,{shape:"sprite",art:"button",w:k,h:E,color:"secondary",depth:80.1}),Ee("h:inv:b:t",J+re*.33,j-H*.04,`\xD7${se.def.mult??2} ${se.def.seconds??30}s`,"text",E*.28,80.2),Re("h:inv:bar",J+re*.17,j+H*.32,re*.6,Math.max(4,H*.05),se.left/se.def.ttl,"coin",80.1),Ce({id:"inv_now",x:J+re*.02,y:j-H*.04,w:k,h:E}),Ce({id:"inv_share",x:J+re*.33,y:j-H*.04,w:k,h:E});}},Pt=()=>{M=[],we.clear(),Le(),_e(),me(),e$1.vars.ty_buttons=M.map(l=>`${l.id}@${Math.round(l.x)},${Math.round(l.y)}`).join(";");},Ge=()=>{e$1.vars.cash=Math.floor(d.cash),e$1.vars.earned=Math.floor(d.earned),e$1.vars.time_left=$,e$1.vars.ty_charge=Math.floor(Q),e$1.vars.ty_mode=Go[ae]??1,e$1.vars.level_progress=ya(d,oe()),e$1.vars.ty_goals=oe().map(l=>`${l.kind}:${Math.floor(at(l))}/${l.n}`).join("|");},Xe=()=>{for(let u of [...x.values(),..._.values()])e$1.isAlive(u)&&e$1.destroy(u);x.clear(),_.clear(),O!==null&&e$1.isAlive(O)&&e$1.destroy(O),O=null,c=ro(oo(e$1,"meta:chapter")||1,s("difficulty"));let l={income:oo(e$1,"meta:income"),speed:oo(e$1,"meta:speed"),discount:oo(e$1,"meta:discount")};d=zo(c.def,l,Math.round(c.cash*(1+oo(e$1,"meta:cash")))),dd.set(e$1,{s:d,level:c}),Tt(e$1,"board",Ie(e$1).h*.24),$=c.day,G=0,B=0,Q=0,q=false,ue=false,fe=8+r.range(0,4),ie=null,ve=null,se=null,e$1.vars.ty_level=c.level,e$1.vars.ty_world=c.world,e$1.vars.coins=0,e$1.vars.score=0,e$1.vars.stars=0,e$1.vars.reviving=false,Ge();},tt=l=>{if(ue)return;ue=true;let u=l==="cleared",b=ya(d,oe()),A=u?Math.min(q?1:3,ra($/Math.max(1,c.day))):0,I=Math.round(c.coins*s("coinReward")*(u?[1,1,1.25,1.5][A]:b*.5));I>0&&(qe(e$1,"coins",I),e$1.emit("coin-collected",{value:I})),u&&e$1.vars["meta:first_clear"]===true&&qe(e$1,"coins",c.firstClearGold),e$1.vars.stars=A,e$1.vars.score=Math.round(b*1e3)+(u?A*500+Math.floor($)*10:0),e$1.vars.reviving=false,ie=null,ve=null,se=null,Ge(),e$1.emit(Bt,{reason:l,stats:{chapter:c.level,seconds:Math.floor(G),cleared:u,stars:A,coins:Number(e$1.vars.coins??0),earned:Math.floor(d.earned),managers:ma(d)}});},ot=()=>{ue||(V(e$1,{kind:"flash",color:"coin"}),tt("cleared"));},ct=()=>{if(e$1.vars.revive_ready===true&&!q){e$1.vars.reviving=true,e$1.emit(Gt,{});return}tt("out-of-time");},it=()=>{ge()&&(q=true,e$1.vars.reviving=false,$+=oa,V(e$1,{kind:"flash",color:"coin"}),Ge());},bt=()=>Math.max(aa(d),c.cash*.05),Ke=()=>Math.round(bt()*(se?.def.now??25)),ze=l=>{Q=Math.min(De().charge,Q+td),e$1.emit("event-handled",{id:l});},_t=()=>{let l=d.biz.map((U,X)=>({b:U,i:X})).filter(U=>U.b.level>0&&U.b.broken===0),u=U=>U.effect==="rush"?!ie&&l.some(X=>X.b.rush<=0):U.effect==="break"?!d.biz.some(X=>X.broken>0)&&l.some(X=>X.b.level>=3):U.effect==="invest"?!se:!ve,b=c.def.events.filter(U=>o.includes(U)).map(U=>Qr.find(X=>X.id===U)).filter(U=>!!U&&u(U));if(!b.length)return;let A=b.reduce((U,X)=>U+X.weight,0),I=r.range(0,A),N=b.find(U=>(I-=U.weight)<0)??b[0];if(N.effect==="rush"){let U=l.filter(X=>X.b.rush<=0);ie={index:U[r.int(0,U.length-1)].i,left:N.ttl,def:N};}else if(N.effect==="break"){let U=l.filter(ye=>ye.b.level>=3),X=U[r.int(0,U.length-1)];X.b.broken=N.taps??3,V(e$1,{kind:"shake",power:.3});}else N.effect==="invest"?se={left:N.ttl,def:N}:ve={left:N.ttl,def:N};e$1.emit("event-started",{id:N.id});},Fe=l=>{ie&&(ie.left-=l)<=0&&(ie=null),ve&&(ve.left-=l)<=0&&(ve=null),se&&(se.left-=l)<=0&&(se=null),c.def.events.length&&(fe-=l,fe<=0&&(_t(),fe=r.range(rl[0],rl[1])));},Ct=l=>{let u=d.biz[l];if(!u||u.level<=0)return;let b=Se(l);if(u.broken>0){V(e$1,{kind:"burst",x:b.x,y:b.y,color:"ground",n:6,size:b.size*.6}),da(d,l)&&(V(e$1,{kind:"ring",x:b.x,y:b.y,color:"accent",size:b.size*1.2}),ze("break"));return}ie?.index===l&&(u.rush=ie.def.seconds??10,u.rushMult=ie.def.mult??3,V(e$1,{kind:"ring",x:b.x,y:b.y,color:"coin",size:b.size*1.4}),V(e$1,{kind:"pop",x:b.x,y:b.y-b.size*.45,text:`\xD7${u.rushMult}`,color:"coin",size:Math.round(b.size*.3)}),ie=null,ze("rush"));let A=ca(d,l);A<=0||(Q=Math.min(De().charge,Q+ed),vt(e$1,"tycoon-collect"),V(e$1,{kind:"burst",x:b.x,y:b.y,color:"coin",n:8,size:b.size*.7}),V(e$1,{kind:"pop",x:b.x,y:b.y-b.size*.35,text:`+${an(A)}`,color:"coin",size:Math.round(b.size*.24)}),e$1.emit("cycle-collected",{index:l,amount:A}));},Ht=l=>{let u=d.biz[l];if(!u)return;let b=ia(d,l,Y(l)),A=Ae(l),I=A.x+A.w/2-A.w*.14;if(!b.ok){V(e$1,{kind:"shake",power:.1});return}vt(e$1,"tycoon-buy");let N=Se(l);V(e$1,{kind:"ring",x:N.x,y:N.y,color:"coin",size:N.size*1.1}),V(e$1,{kind:"burst",x:I,y:A.y,color:"accent",n:5,size:A.h*.5}),e$1.emit("business-bought",{id:u.def.id,level:u.level});for(let U of b.milestones)V(e$1,{kind:"flash",color:"coin"}),V(e$1,{kind:"pop",x:N.x,y:N.y-N.size*.5,text:`\u2605 ${U}`,color:"coin",size:Math.round(N.size*.3)}),e$1.emit("milestone",{id:u.def.id,at:U});},It=l=>{let u=d.biz[l];if(!u||!la(d,l))return;vt(e$1,"tycoon-manager");let b=Se(l);V(e$1,{kind:"ring",x:b.x,y:b.y,color:"secondary",size:b.size*1.3}),V(e$1,{kind:"pop",x:b.x,y:b.y-b.size*.5,text:"\u2605",color:"secondary",size:Math.round(b.size*.35)}),e$1.emit("manager-hired",{id:u.def.id});},tn=(l,u,b)=>{ha(d,l)&&(vt(e$1,"tycoon-upgrade"),V(e$1,{kind:"ring",x:u,y:b,color:"accent",size:xe()*2.6}),V(e$1,{kind:"flash",color:"accent"}),e$1.emit("upgrade-bought",{key:l}));},pt=()=>{let l=De();if(Q<l.charge)return false;let u=1+oo(e$1,"meta:skill");if(Q=0,O!==null&&He(e$1,O,"cheer"),V(e$1,{kind:"flash",color:"secondary"}),l.effect==="rush")pa(d,{id:"skill",left:(l.seconds??12)*u,income:l.mult??5,price:1});else if(l.effect==="sale")pa(d,{id:"sale",left:(l.seconds??15)*u,income:1,price:l.mult??.5});else {let b=ul(d,Math.max(1,Math.round((l.cycles??8)*u))),A=ce();V(e$1,{kind:"pop",x:A.w/2,y:A.h*.16,text:`+${an(b)}`,color:"coin",size:Math.round(A.U*.07)}),d.biz.forEach((I,N)=>{if(I.level<=0)return;let U=Se(N);V(e$1,{kind:"burst",x:U.x,y:U.y,color:"coin",n:10,size:U.size*.8});});}return e$1.emit("skill-cast",{id:l.id}),vt(e$1,"tycoon-skill"),true},w=()=>{if(!ve)return;let l=je(),u=Math.round(bt()*(ve.def.now??15));fl(d,u);let b=Math.round((ve.def.coins??0)*s("coinReward"));b>0&&(qe(e$1,"coins",b),e$1.emit("coin-collected",{value:b})),V(e$1,{kind:"burst",x:l.x,y:l.y,color:"coin",n:14,size:l.r*2}),V(e$1,{kind:"pop",x:l.x,y:l.y+l.r*1.4,text:`+${an(u)}`,color:"coin",size:Math.round(l.r*.7)}),ve=null,ze("courier");},f$1=l=>{if(!se)return;let u=se.def;l?pa(d,{id:"invest",left:u.seconds??30,income:u.mult??2,price:1}):fl(d,Ke()),se=null,V(e$1,{kind:"flash",color:"coin"}),ze("invest");},m=(l,u,b)=>M.find(A=>(!b||A.id.startsWith(b))&&Math.abs(l-A.x)<=A.w/2&&Math.abs(u-A.y)<=A.h/2);e$1.on(j,l=>{let u=l;if(u.type!=="tap"||!Ze(e$1)||Kn(e$1)||ue||ge())return;Ot(e$1),B=0;let b=se?m(u.x,u.y,"inv_")??m(u.x,u.y):m(u.x,u.y,"courier")??m(u.x,u.y);b&&(b.id==="inv_now"?f$1(false):b.id==="inv_share"?f$1(true):b.id==="courier"?w():b.id==="mode"?ae=(ae+1)%Go.length:b.id==="skill"?pt():b.id.startsWith("up:")?tn(b.id.slice(3),b.x,b.y):b.id.startsWith("biz")?Ct(Number(b.id.slice(3))):b.id.startsWith("buy")?Ht(Number(b.id.slice(3))):b.id.startsWith("mgr")&&It(Number(b.id.slice(3))),Ge(),Vo(d,oe())&&ot());}),e$1.on($t,()=>{Xe(),e$1.vars.level=c.level;}),e$1.on(Wt,Xe),e$1.on(Kt,it),e$1.on(Ft,()=>{ge()&&(e$1.vars.reviving=false,tt("out-of-time"));}),e$1.on(zt,l=>{we.clear(),me(),M=[],e$1.vars.ty_buttons="",O!==null&&e$1.isAlive(O)&&et(e$1,O,l.reason==="cleared"?"dance":"idle");}),e$1.on(k,()=>Tt(e$1,"board",Ie(e$1).h*.24));let p=l=>{if(!l)return;let u=l.kind==="collect"||l.kind==="fix"?`biz${l.index}`:l.kind==="buy"?`buy${l.index}`:l.kind==="hire"?`mgr${l.index}`:`up:${l.key}`;return M.find(b=>b.id===u)},y=l=>{let u=ce().U,b=d.biz.findIndex(A=>A.ready);if(!ht(l,"tycoon-collect")&&b>=0){let A=Se(b);return ft(l,"tap",A,void 0,A.size*.8)}if(!ht(l,"tycoon-buy")){let A=d.biz.findIndex(N=>d.cash>=Zn(d,N,Y(d.biz.indexOf(N)))),I=M.find(N=>N.id===`buy${A}`);if(A>=0&&I)return ft(l,"tap",I,void 0,I.h)}if(!ht(l,"tycoon-manager")){let A=d.biz.findIndex(N=>N.level>0&&!N.manager&&d.cash>=no(d,N)),I=M.find(N=>N.id===`mgr${A}`);if(A>=0&&I)return ft(l,"tap",I,void 0,I.w)}if(Q>=De().charge&&!ht(l,"tycoon-skill")){let A=M.find(I=>I.id==="skill");if(A)return ft(l,"tap",A,void 0,A.w)}if(B>6){let A=p(ga(d,oe()));A&&ft(l,"tap",A,void 0,Math.min(A.w,u*.18));}};e$1.addSystem({id:"tycoon",order:0,run(l,u){if(!(!Ze(l)||ue)){if(!ge()){G+=u,B+=u,$=Math.max(0,$-u);for(let b of ua(d,u).paid)b.amount<=0||l.emit("cycle-collected",{index:b.index,amount:b.amount});Q=Math.min(De().charge,Q+u),Fe(u);}if(Pt(),Ge(),!ge()){if(Vo(d,oe()))return ot();un(l)||y(l),$<=0&&ct();}}}}),Xe();}};var Bn=(e,t,n,s,r,o,c,d,x)=>({en:e,ru:t,kz:n,zh:s,ko:r,ja:o,hi:c,pt:d,de:x}),xa=Bn("Score","\u041E\u0447\u043A\u0438","\u04B0\u043F\u0430\u0439","\u5206\u6570","\uC810\uC218","\u30B9\u30B3\u30A2","\u0938\u094D\u0915\u094B\u0930","Pontos","Punkte"),gl={id:"fantasy",version:1,setting:"fantasy",names:Bn("Fantasy","\u0424\u044D\u043D\u0442\u0435\u0437\u0438","\u0424\u044D\u043D\u0442\u0435\u0437\u0438","\u5947\u5E7B","\uD310\uD0C0\uC9C0","\u30D5\u30A1\u30F3\u30BF\u30B8\u30FC","\u092B\u093C\u0948\u0902\u091F\u0947\u0938\u0940","Fantasia","Fantasy"),palette:{background:"#1f2a1d",ground:"#3b4a2e",lane:"#56683f",primary:"#4fa3e0",secondary:"#8e5bd1",danger:"#d0483b",coin:"#f2c14e",accent:"#6fbf4a",text:"#fff6e0",muted:"#b9b08f",piece1:"#e0443e",piece2:"#3f7fe0",piece3:"#43b05c",piece4:"#f2c14e",piece5:"#9b59d0",piece6:"#ef8a2f",panel:"#3a2f25"},texts:{"res.coins":Bn("Gold","\u0417\u043E\u043B\u043E\u0442\u043E","\u0410\u043B\u0442\u044B\u043D","\u91D1\u5E01","\uACE8\uB4DC","\u30B4\u30FC\u30EB\u30C9","\u0938\u094B\u0928\u093E","Ouro","Gold"),"res.score":xa},races:["human","elf","dwarf","orc","undead"],cast:{hero:{preset:"knight",races:["human"]},foe:{preset:"berserker",parts:{Hat:null,Offhand:null,Weapon:"weapon/battle_axe"},races:["orc"]},foe2:{preset:"viking",parts:{Weapon:"weapon/double_axe"},races:["orc"]},boss:{preset:"dark_knight",races:["orc"]},helper:{preset:"hunter",parts:{Weapon:null,Hat:null},races:["elf","dwarf","human"]},foe3:{preset:"crossbowman",parts:{Weapon:"weapon/crossbow"},races:["undead"]},foe4:{preset:"lumberjack",parts:{Weapon:"weapon/spear",Back:null},races:["undead"]},foe5:{preset:"hunter",parts:{Hat:null,Back:null,Weapon:"weapon/dagger"},races:["undead"]},hero2:{preset:"crusader",races:["human","dwarf"]},hero3:{preset:"archmage",races:["elf"]}}},bl={id:"sci-fi",version:1,setting:"sci-fi",names:Bn("Sci-fi","\u041D\u0430\u0443\u0447\u043D\u0430\u044F \u0444\u0430\u043D\u0442\u0430\u0441\u0442\u0438\u043A\u0430","\u0492\u044B\u043B\u044B\u043C\u0438 \u0444\u0430\u043D\u0442\u0430\u0441\u0442\u0438\u043A\u0430","\u79D1\u5E7B","SF","SF","\u0935\u093F\u091C\u094D\u091E\u093E\u0928 \u0915\u0925\u093E","Fic\xE7\xE3o cient\xEDfica","Science-Fiction"),palette:{background:"#0b1020",ground:"#151d33",lane:"#22305a",primary:"#36e3ff",secondary:"#b45cff",danger:"#ff3d6e",coin:"#ffe14d",accent:"#3dff9a",text:"#e8f6ff",muted:"#7d8fb3",piece1:"#ff3d6e",piece2:"#36a3ff",piece3:"#3dff9a",piece4:"#ffe14d",piece5:"#b45cff",piece6:"#ff8f3d",panel:"#18213d"},texts:{"res.coins":Bn("Chips","\u0427\u0438\u043F\u044B","\u0427\u0438\u043F\u0442\u0435\u0440","\u82AF\u7247","\uCE69","\u30C1\u30C3\u30D7","\u091A\u093F\u092A\u094D\u0938","Chips","Chips"),"res.score":xa},races:["human"],cast:{hero:{preset:"soldier",races:["human"]},foe:{preset:"soldier",parts:{Hat:"hat/great_helm",Weapon:"weapon/pistol"},races:["undead"]},foe2:{preset:"gunslinger",parts:{Weapon:"weapon/rifle",Back:null},races:["orc"]},boss:{preset:"dark_knight",parts:{Weapon:"weapon/flame_sword"},races:["orc"]},helper:{preset:"gunslinger",parts:{Weapon:null,Back:null},races:["elf","human"]},foe3:{preset:"gunslinger",parts:{Weapon:"weapon/pistol",Back:null},races:["undead"]},foe4:{preset:"soldier",parts:{Hat:"hat/great_helm",Weapon:"weapon/spear"},races:["orc"]},foe5:{preset:"soldier",parts:{Hat:null,Back:null,Weapon:"weapon/dagger"},races:["undead"]},hero2:{preset:"musketeer",parts:{Weapon:"weapon/rifle"},races:["human"]},hero3:{preset:"archmage",parts:{Weapon:"weapon/wizard_staff"},races:["elf","human"]}}},vl={id:"cozy",version:1,setting:"cozy",names:Bn("Cozy cartoon","\u0423\u044E\u0442\u043D\u044B\u0439 \u043C\u0443\u043B\u044C\u0442\u044F\u0448\u043D\u044B\u0439","\u0416\u0430\u0439\u043B\u044B \u043C\u0443\u043B\u044C\u0442\u0444\u0438\u043B\u044C\u043C","\u6E29\u99A8\u5361\u901A","\uC544\uB291\uD55C \uCE74\uD230","\u307B\u306E\u307C\u306E\u30AB\u30FC\u30C8\u30A5\u30FC\u30F3","\u0906\u0930\u093E\u092E\u0926\u093E\u092F\u0915 \u0915\u093E\u0930\u094D\u091F\u0942\u0928","Cartoon aconchegante","Gem\xFCtlicher Cartoon"),palette:{background:"#fdf1e4",ground:"#f3d9bf",lane:"#e9c6a3",primary:"#ff8fab",secondary:"#8fb8ff",danger:"#ff6b6b",coin:"#ffb627",accent:"#7ccf8a",text:"#3d2b25",muted:"#9c8478",piece1:"#ff8fab",piece2:"#7fb8ff",piece3:"#8cd98f",piece4:"#ffd166",piece5:"#c39bff",piece6:"#ffa96b",panel:"#fff8f0"},texts:{"res.coins":Bn("Coins","\u041C\u043E\u043D\u0435\u0442\u043A\u0438","\u0422\u0438\u044B\u043D\u0434\u0430\u0440","\u786C\u5E01","\uCF54\uC778","\u30B3\u30A4\u30F3","\u0938\u093F\u0915\u094D\u0915\u0947","Moedas","M\xFCnzen"),"res.score":xa},races:["human","elf","dwarf"],cast:{hero:{preset:"camper",parts:{Glasses:null},races:["human"]},foe:{preset:"lumberjack",parts:{Weapon:"weapon/3",Back:null},races:["orc"]},foe2:{preset:"lumberjack",parts:{Weapon:null,Back:null},races:["dwarf"]},boss:{preset:"viking",races:["orc"]},helper:{preset:"camper",parts:{Weapon:null,Back:null,Glasses:null},races:["human","elf","dwarf"]},foe3:{preset:"hunter",parts:{Weapon:"weapon/hunting_bow"},races:["orc"]},foe4:{preset:"quarterback",races:["orc"]},foe5:{preset:"camper",parts:{Weapon:null,Back:null,Glasses:null},races:["orc"]},hero2:{preset:"quarterback",races:["human"]},hero3:{preset:"wizard",races:["elf"]}}},xl={id:"post-apocalypse",version:1,setting:"post-apocalypse",names:Bn("Post-apocalypse","\u041F\u043E\u0441\u0442\u0430\u043F\u043E\u043A\u0430\u043B\u0438\u043F\u0441\u0438\u0441","\u041F\u043E\u0441\u0442\u0430\u043F\u043E\u043A\u0430\u043B\u0438\u043F\u0441\u0438\u0441","\u672B\u65E5\u5E9F\u571F","\uD3EC\uC2A4\uD2B8 \uC544\uD3EC\uCE7C\uB9BD\uC2A4","\u30DD\u30B9\u30C8\u30A2\u30DD\u30AB\u30EA\u30D7\u30B9","\u092A\u094D\u0930\u0932\u092F \u0915\u0947 \u092C\u093E\u0926","P\xF3s-apocalipse","Postapokalypse"),palette:{background:"#1d1a16",ground:"#3a3328",lane:"#4d4436",primary:"#d9a441",secondary:"#7a8f5b",danger:"#b8402d",coin:"#e0c060",accent:"#8fa35a",text:"#f0e6d2",muted:"#a39a86",piece1:"#b8402d",piece2:"#5a7f9a",piece3:"#7a8f5b",piece4:"#e0c060",piece5:"#8a6a4a",piece6:"#d9762f",panel:"#2c2620"},texts:{"res.coins":Bn("Caps","\u041A\u0440\u044B\u0448\u043A\u0438","\u049A\u0430\u049B\u043F\u0430\u049B\u0442\u0430\u0440","\u74F6\u76D6","\uBCD1\uB69C\uAED1","\u30AD\u30E3\u30C3\u30D7","\u0922\u0915\u094D\u0915\u0928","Tampinhas","Kronkorken"),"res.score":xa},races:["human","undead","orc"],cast:{hero:{preset:"soldier",parts:{Hat:null,Gloves:"gloves/bracers"},races:["human"]},foe:{preset:"lumberjack",parts:{Weapon:null,Back:null,Gloves:null},races:["undead"]},foe2:{preset:"berserker",parts:{Hat:null,Offhand:null,Weapon:"weapon/mace"},races:["orc"]},boss:{preset:"berserker",parts:{Hat:"hat/great_helm",Weapon:"weapon/double_axe"},races:["orc"]},helper:{preset:"soldier",parts:{Hat:null,Weapon:null},races:["human"]},foe3:{preset:"musketeer",parts:{Weapon:"weapon/musket",Hat:null},races:["undead"]},foe4:{preset:"viking",parts:{Weapon:"weapon/mace"},races:["undead"]},foe5:{preset:"lumberjack",parts:{Weapon:"weapon/dagger",Back:null},races:["undead"]},hero2:{preset:"viking",parts:{Hat:null},races:["human"]},hero3:{preset:"ranger",races:["human"]}}},so=[gl,bl,vl,xl],yl=(e,t)=>(e.flows??[]).some(n=>n.resource===t.resource&&n.by===t.by&&n.kind===t.kind)?e:{...e,flows:[...e.flows??[],t]},ud=e=>e.resources?.find(t=>t.kind==="currency")?.id??"coins",kl=e=>t=>yl(t,{resource:ud(t),by:`system:${e}`,kind:"sink"}),Sl={id:"hero-upgrade",version:1,name:"link.hero-upgrade",core:["runner","platformer","survivors","tower-defense"],systems:["character"],apply:kl("character")},El={id:"puzzle-city",version:1,name:"link.puzzle-city",core:["match3","merge"],systems:[],apply(e){if(e.modes.some(s=>s.id==="city"))return e;let t=ud(e),n={...e,modes:[...e.modes,{id:"city",preset:"tycoon",role:"meta"}]};return yl(yl(n,{resource:t,by:"city",kind:"source",amount:"vars.coins"}),{resource:t,by:"system:store",kind:"sink"})}},Ml={id:"runner-collection",version:1,name:"link.runner-collection",core:["runner","platformer"],systems:["lootboxes","collections"],apply:kl("lootboxes")},_l={id:"defense-boosts",version:1,name:"link.defense-boosts",core:["tower-defense","survivors"],systems:["boosts"],apply:kl("boosts")},ka=[Sl,El,Ml,_l];var fd=(e,t)=>`${e.character}-${t}`;var hd={id:"runner",version:1,engine:"phaser",genre:"runner",name:"preset.runner",blocks:["round","lane-runner"],params:{difficulty:{type:"number",default:.5,min:0,max:1},generosity:{type:"number",default:.6,min:0,max:1},lanes:{type:"number",default:3,min:2,max:5,integer:true},lives:{type:"number",default:3,min:1,max:9,integer:true},length:{type:"number",default:1,min:.05,max:5}},blockParams:{"lane-runner":{lanes:"params.lanes",lives:"params.lives",difficulty:"params.difficulty",coinRate:"0.5 + params.generosity * 0.4",powerRate:"0.12 + params.generosity * 0.2",lengthScale:"params.length"}},produces:["soft","score"],placements:[{id:"reward_window",kind:"reward-window"},{id:"revive",kind:"revive",dailyLimit:5}]},ao={difficulty:{type:"number",default:.5,min:0,max:1},generosity:{type:"number",default:.6,min:0,max:1}},io=[{id:"reward_window",kind:"reward-window"}],md={id:"platformer",version:1,engine:"phaser",genre:"platformer",name:"preset.platformer",blocks:["round","platformer"],params:{...ao,lives:{type:"number",default:3,min:1,max:9,integer:true},doubleJump:{type:"boolean",default:false}},blockParams:{platformer:{difficulty:"params.difficulty",lives:"params.lives",doubleJump:"params.doubleJump"}},produces:["soft","score"],placements:[...io,{id:"revive",kind:"revive",dailyLimit:5}]},yd={id:"survivors",version:1,engine:"phaser",genre:"survivors",name:"preset.survivors",blocks:["round","survivors"],params:{...ao,minutes:{type:"number",default:5,min:.5,max:15}},blockParams:{survivors:{duration:"params.minutes * 60",spawnRate:"0.9 + params.difficulty * 0.6",spawnGrowth:"0.6 + params.difficulty * 0.6",foeHpGrowth:"0.3 + params.difficulty * 0.3",foeDamage:"0.8 + params.difficulty * 0.4",coinRate:"0.15 + params.generosity * 0.3",hp:"120 - params.difficulty * 40"}},produces:["soft","score"],placements:[...io,{id:"revive",kind:"revive",dailyLimit:5},{id:"reroll",kind:"retry",dailyLimit:10}]},gd={id:"tower-defense",version:2,engine:"phaser",genre:"tower-defense",name:"preset.tower-defense",blocks:["round","tower-defense"],params:{...ao,lives:{type:"number",default:20,min:1,max:100,integer:true}},blockParams:{"tower-defense":{difficulty:"params.difficulty",lives:"params.lives",coinRate:"0.08 + params.generosity * 0.25",earlyGold:"1 + params.generosity * 2"}},produces:["soft","score"],placements:[...io,{id:"revive",kind:"revive",dailyLimit:5}]},bd={id:"match3",version:2,engine:"phaser",genre:"match3",name:"preset.match3",blocks:["round","match3"],params:{...ao},blockParams:{match3:{difficulty:"params.difficulty",coinEvery:"12 - params.generosity * 7"}},produces:["soft","score","stars"],placements:[...io,{id:"revive",kind:"revive",dailyLimit:5}]},vd={id:"merge",version:2,engine:"phaser",genre:"merge",name:"preset.merge",blocks:["round","merge"],params:{...ao},blockParams:{merge:{difficulty:"params.difficulty",orderReward:"0.6 + params.generosity * 0.8"}},produces:["soft","score","stars"],placements:[...io,{id:"revive",kind:"revive",dailyLimit:5}]},xd={id:"tycoon",version:2,engine:"phaser",genre:"idle-tycoon",name:"preset.tycoon",blocks:["round","tycoon"],params:{...ao},blockParams:{tycoon:{difficulty:"params.difficulty",coinReward:"0.6 + params.generosity * 0.8"}},produces:["soft","score","stars"],placements:[...io,{id:"revive",kind:"revive",dailyLimit:5}]},kd=[hd,md,yd,gd,bd,vd,xd],jp=[Qo,ns,Is,Gs,Zs,vs,As,va];function Xp(e){po(e);for(let t of jp)e.has(Vn,t.id)||e.define(Vn,t);for(let t of so)e.has(kr,t.id)||e.define(kr,t);for(let t of ka)e.has(uo,t.id)||e.define(uo,t);for(let t of kd)e.has(Gn,t.id)||e.define(Gn,t);}var Yp={v:1,engine:"phaser",seed:"demo-runner",modes:[{id:"run",preset:"runner",role:"core"}],resources:[{id:"coins",kind:"currency",ref:"CO",name:"res.coins"},{id:"score",kind:"score",name:"res.score"}],flows:[{resource:"coins",by:"run",kind:"source",amount:"vars.coins"},{resource:"coins",by:"system:store",kind:"sink"},{resource:"score",by:"run",kind:"source",amount:"vars.score"}],texts:{title:{en:"Lane Dash",ru:"\u0420\u044B\u0432\u043E\u043A \u043F\u043E \u043F\u043E\u043B\u043E\u0441\u0430\u043C"},hint:{en:"Swipe or tap a side to change lanes",ru:"\u0421\u0432\u0430\u0439\u043F \u0438\u043B\u0438 \u043D\u0430\u0436\u0430\u0442\u0438\u0435 \u0441\u0431\u043E\u043A\u0443 \u043C\u0435\u043D\u044F\u0435\u0442 \u043F\u043E\u043B\u043E\u0441\u0443"}}};function Jp(e,t={}){let n=e==="runner"?"run":"main";return {v:1,engine:"phaser",seed:t.seed??e,modes:[{id:n,preset:e,role:"core",...t.params?{params:t.params}:{}}],resources:[{id:"coins",kind:"currency",ref:t.coinRef??"CO",name:"res.coins"},{id:"score",kind:"score",name:"res.score"}],flows:[{resource:"coins",by:n,kind:"source",amount:"vars.coins"},{resource:"coins",by:"system:store",kind:"sink"},{resource:"score",by:n,kind:"source",amount:"vars.score"}],...t.texts?{texts:t.texts}:{},...t.palette?{palette:t.palette}:{},...t.assets?{assets:t.assets}:{}}}var Sd=255,Ed=10;var zn=e=>typeof e=="object"&&e!==null&&!Array.isArray(e),Ea=e=>e===void 0?e:JSON.parse(JSON.stringify(e)),Md=(e,t)=>JSON.stringify(e)===JSON.stringify(t),Zp=/^([A-Za-z0-9_-]+)(?:\[([A-Za-z0-9_-]+)=([^\]]*)\])?$/,Qp=/^'([^']+)'$/;function eu(e){let t=[],n="",s=false;for(let r of e)r==="'"&&(s=!s),r==="."&&!s?(t.push(n),n=""):n+=r;return t.push(n),t}function Ma(e){if(!e)return [];let t=[];for(let n of eu(e)){let s=Qp.exec(n);if(s){t.push({key:s[1]});continue}let r=Zp.exec(n);if(!r)return null;t.push(r[2]!==void 0?{key:r[1],match:{field:r[2],value:r[3]??""}}:{key:r[1]});}return t}function _d(e,t){let n=e.range;if(!n||t===void 0)return e.value;let s=Math.min(Math.max(Number.isFinite(t)?t:.5,0),1),r=n.min+s*(n.max-n.min);if(n.integer)return Math.round(r);let o=10**(n.digits??2);return Math.round(r*o)/o}function Sa(e,t){if(!zn(e)||!zn(t))return Ea(t);let n={...e};for(let[s,r]of Object.entries(t))n[s]=s in n?Sa(n[s],r):Ea(r);return n}function tu(e,t,n){let s=zn(e)?Ea(e):{},r=[];return t.forEach((o,c)=>{let d=Ma(o.path);if(!d){r.push(c);return}let x=Ea(_d(o,n));if(d.length===0){o.op==="set"&&zn(x)?s=x:o.op==="merge"&&zn(x)?s=Sa(s,x):r.push(c);return}let _=s;for(let M=0;M<d.length-1;M++){let $=nu(_,d[M],o.ifExists!==true);if($===void 0){r.push(c);return}_=$;}let O=d[d.length-1];if(!zn(_)){r.push(c);return}if(O.match){let M=_[O.key];if(!Array.isArray(M)){r.push(c);return}let $=M.findIndex(G=>zn(G)&&String(G[O.match.field])===O.match.value);if($<0){r.push(c);return}o.op==="set"?M[$]=x:o.op==="merge"?M[$]=Sa(M[$],x):o.op==="unset"?M.splice($,1):r.push(c);return}if(o.ifExists===true&&_[O.key]===void 0){r.push(c);return}switch(o.op){case "set":_[O.key]=x;break;case "merge":_[O.key]=_[O.key]===void 0?x:Sa(_[O.key],x);break;case "unset":delete _[O.key];break;case "add":case "remove":{let M=Array.isArray(x)?x:[x],$=_[O.key];if($!==void 0&&!Array.isArray($)){r.push(c);return}let G=$?[...$]:[];if(o.op==="add")for(let B of M)G.some(Q=>Md(Q,B))||G.push(B);else for(let B of M){let Q=G.findIndex(ae=>Md(ae,B));Q>=0&&G.splice(Q,1);}_[O.key]=G;break}}}),{value:s,skipped:r}}function nu(e,t,n){if(zn(e)){if(t.match){let s=e[t.key];return Array.isArray(s)?s.find(r=>zn(r)&&String(r[t.match.field])===t.match.value):void 0}if(e[t.key]===void 0||e[t.key]===null){if(!n)return;e[t.key]={};}return e[t.key]}}function ru(e){return [...new Set(e.map(t=>`${t.section}:${t.path??""}`))]}var ou=/^#([0-9a-f]{6})$/i;function Rd(e){let t=ou.exec(e);if(!t)return [0,0,.5];let n=parseInt(t[1],16),s=(n>>16&255)/255,r=(n>>8&255)/255,o=(n&255)/255,c=Math.max(s,r,o),d=Math.min(s,r,o),x=(c+d)/2;if(c===d)return [0,0,x];let _=c-d,O=x>.5?_/(2-c-d):_/(c+d),M=c===s?(r-o)/_+(r<o?6:0):c===r?(o-s)/_+2:(s-r)/_+4;return M*=60,[M,O,x]}function Td(e,t,n){let s=(e%360+360)%360/360,r=Math.min(Math.max(t,0),1),o=Math.min(Math.max(n,0),1),c=x=>{let _=x;_<0&&(_+=1),_>1&&(_-=1);let O=o<.5?o*(1+r):o+r-o*r,M=2*o-O;return _<1/6?M+(O-M)*6*_:_<1/2?O:_<2/3?M+(O-M)*(2/3-_)*6:M},d=x=>Math.round(x*255).toString(16).padStart(2,"0");return r===0?`#${d(o)}${d(o)}${d(o)}`:`#${d(c(s+1/3))}${d(c(s))}${d(c(s-1/3))}`}function _a(e,t,n=1,s=0){let[r,o,c]=Rd(e);return Td(r+t,o*n,c+s)}function Ra(e,t){let[n,s,r]=Rd(e);return Td(n,s,r*(1-t))}var Oe=(e,t)=>({en:e,ru:t}),Tl=(e,t)=>({section:"Look",op:"set",path:e,value:t}),Rl=(e,t)=>({section:"GameSpec",op:"set",path:e,value:t}),su=[{id:"casual-violet",title:Oe("Violet casual","\u0424\u0438\u043E\u043B\u0435\u0442\u043E\u0432\u044B\u0439 \u043A\u0430\u0437\u0443\u0430\u043B"),what:"Bright blue-violet screens, chunky glossy buttons: the classic mobile casual look.",examples:["any casual game","puzzle","arcade"],bgTop:"#5865f2",bgBottom:"#5a3fd6",panel:"#3d8ff5",nav:"#2c3794",ink:"#17193a"},{id:"candy-pink",title:Oe("Candy pink","\u0420\u043E\u0437\u043E\u0432\u0430\u044F \u043A\u043E\u043D\u0444\u0435\u0442\u0430"),what:"Sweet pink and raspberry, playful and girly, candy shop mood.",examples:["sweets","fashion","pets","kids"],bgTop:"#ff7ac6",bgBottom:"#d94a9c",panel:"#ff9ad5",nav:"#a8306f",ink:"#4a1235"},{id:"sunny-orange",title:Oe("Sunny orange","\u0421\u043E\u043B\u043D\u0435\u0447\u043D\u044B\u0439 \u043E\u0440\u0430\u043D\u0436\u0435\u0432\u044B\u0439"),what:"Warm orange and yellow, cheerful summer energy.",examples:["beach","fruit","summer","food"],bgTop:"#ffb347",bgBottom:"#ff7a2f",panel:"#ffc75f",nav:"#c4521b",ink:"#4a2410"},{id:"forest-green",title:Oe("Forest green","\u041B\u0435\u0441\u043D\u043E\u0439 \u0437\u0435\u043B\u0451\u043D\u044B\u0439"),what:"Deep greens of a forest, calm nature mood.",examples:["farm","nature","elves","camping"],bgTop:"#4caf50",bgBottom:"#2e7d32",panel:"#66bb6a",nav:"#1b5e20",ink:"#0f2e12"},{id:"ocean-blue",title:Oe("Ocean blue","\u041E\u043A\u0435\u0430\u043D\u0441\u043A\u0438\u0439 \u0441\u0438\u043D\u0438\u0439"),what:"Sea blue and aqua, fresh water mood.",examples:["ocean","fishing","pirates","islands"],bgTop:"#29b6f6",bgBottom:"#0277bd",panel:"#4fc3f7",nav:"#01579b",ink:"#062c47"},{id:"midnight-navy",title:Oe("Midnight navy","\u041F\u043E\u043B\u043D\u043E\u0447\u043D\u044B\u0439 \u0441\u0438\u043D\u0438\u0439"),what:"Dark navy night, calm and serious, stars at night.",examples:["space","night","strategy","sleep"],bgTop:"#283593",bgBottom:"#0d1442",panel:"#3949ab",nav:"#141a52",ink:"#070a22"},{id:"neon-cyber",title:Oe("Neon cyber","\u041D\u0435\u043E\u043D\u043E\u0432\u044B\u0439 \u043A\u0438\u0431\u0435\u0440"),what:"Black with neon cyan and magenta, cyberpunk and synthwave.",examples:["cyberpunk","hackers","racing at night","sci-fi"],bgTop:"#1a1033",bgBottom:"#07040f",panel:"#2b1a55",nav:"#120a26",ink:"#00e5ff",gold:"#ff3df5",green:"#00ffa3"},{id:"space-purple",title:Oe("Space purple","\u041A\u043E\u0441\u043C\u0438\u0447\u0435\u0441\u043A\u0438\u0439 \u043F\u0443\u0440\u043F\u0443\u0440"),what:"Deep purple space with nebula tones.",examples:["space","aliens","galaxy","magic"],bgTop:"#6a1b9a",bgBottom:"#2a0845",panel:"#8e24aa",nav:"#38006b",ink:"#16001f"},{id:"lava-red",title:Oe("Lava red","\u041B\u0430\u0432\u043E\u0432\u044B\u0439 \u043A\u0440\u0430\u0441\u043D\u044B\u0439"),what:"Hot red and black, danger, fire and action.",examples:["fire","volcano","action","boss fights"],bgTop:"#e53935",bgBottom:"#7f0000",panel:"#ef5350",nav:"#5c0000",ink:"#2a0000"},{id:"royal-gold",title:Oe("Royal gold","\u041A\u043E\u0440\u043E\u043B\u0435\u0432\u0441\u043A\u043E\u0435 \u0437\u043E\u043B\u043E\u0442\u043E"),what:"Gold and deep burgundy, rich, royal and luxurious.",examples:["kings","casino","treasure","empire"],bgTop:"#8e2b3a",bgBottom:"#4a0f1c",panel:"#b3424f",nav:"#3a0a15",ink:"#1f0509",gold:"#ffcf40"},{id:"ice-frost",title:Oe("Ice frost","\u041B\u0435\u0434\u044F\u043D\u043E\u0439"),what:"Pale icy blue and white, winter and snow.",examples:["winter","snow","christmas","north"],bgTop:"#e3f6ff",bgBottom:"#9fd7f5",panel:"#ffffff",nav:"#5aa6d6",ink:"#1d4a6b",light:true},{id:"paper-light",title:Oe("Paper light","\u0421\u0432\u0435\u0442\u043B\u0430\u044F \u0431\u0443\u043C\u0430\u0433\u0430"),what:"Clean light paper, minimal and calm, for word and brain games.",examples:["words","quiz","sudoku","education"],bgTop:"#fbf7ef",bgBottom:"#efe6d5",panel:"#ffffff",nav:"#cdbfa6",ink:"#3d3428",light:true},{id:"mint-fresh",title:Oe("Mint fresh","\u0421\u0432\u0435\u0436\u0430\u044F \u043C\u044F\u0442\u0430"),what:"Light mint and teal, fresh and soft.",examples:["cafe","health","relax","spa"],bgTop:"#b9f6e3",bgBottom:"#5fd4b0",panel:"#e6fff7",nav:"#2f9b80",ink:"#0e3d33",light:true},{id:"lemon-pop",title:Oe("Lemon pop","\u041B\u0438\u043C\u043E\u043D\u043D\u044B\u0439 \u043F\u043E\u043F"),what:"Bright lemon yellow, loud and happy pop art.",examples:["comics","party","kids","music"],bgTop:"#fff176",bgBottom:"#fbc02d",panel:"#fff9c4",nav:"#c49000",ink:"#3d2c00",light:true},{id:"peach-soft",title:Oe("Soft peach","\u041D\u0435\u0436\u043D\u044B\u0439 \u043F\u0435\u0440\u0441\u0438\u043A"),what:"Soft peach and coral pastel, cosy and gentle.",examples:["cooking","home decor","romance","pets"],bgTop:"#ffd3b6",bgBottom:"#ffaa85",panel:"#fff0e6",nav:"#d9775a",ink:"#4a2418",light:true},{id:"lavender-dream",title:Oe("Lavender dream","\u041B\u0430\u0432\u0430\u043D\u0434\u043E\u0432\u044B\u0439 \u0441\u043E\u043D"),what:"Pastel lavender, dreamy and magical.",examples:["fairies","unicorns","dreams","princess"],bgTop:"#e1d5ff",bgBottom:"#b39ddb",panel:"#f5f0ff",nav:"#7e57c2",ink:"#2e1a4d",light:true},{id:"toxic-lime",title:Oe("Toxic lime","\u042F\u0434\u043E\u0432\u0438\u0442\u044B\u0439 \u043B\u0430\u0439\u043C"),what:"Acid lime on dark, toxic, zombies and slime.",examples:["zombies","slime","chemistry","monsters"],bgTop:"#33402a",bgBottom:"#141a10",panel:"#4b5e35",nav:"#1c2414",ink:"#a6ff00",gold:"#d4ff3d",green:"#7dff2a"},{id:"desert-sand",title:Oe("Desert sand","\u041F\u0443\u0441\u0442\u044B\u043D\u043D\u044B\u0439 \u043F\u0435\u0441\u043E\u043A"),what:"Sand, ochre and terracotta, desert and ancient ruins.",examples:["egypt","western","desert","archaeology"],bgTop:"#e0b075",bgBottom:"#b5763f",panel:"#f0c995",nav:"#8a5126",ink:"#3b2210"},{id:"rust-wasteland",title:Oe("Rust wasteland","\u0420\u0436\u0430\u0432\u0430\u044F \u043F\u0443\u0441\u0442\u043E\u0448\u044C"),what:"Rusty brown and dusty orange, post-apocalypse scrap.",examples:["post-apocalypse","scrap","survival","mad roads"],bgTop:"#6d4c41",bgBottom:"#2e1f1a",panel:"#8d6e63",nav:"#3e2723",ink:"#140c09",gold:"#ff9e40"},{id:"steel-gray",title:Oe("Steel gray","\u0421\u0442\u0430\u043B\u044C\u043D\u043E\u0439 \u0441\u0435\u0440\u044B\u0439"),what:"Cool steel and graphite, military and industrial.",examples:["army","tanks","factory","robots"],bgTop:"#607d8b",bgBottom:"#263238",panel:"#78909c",nav:"#1c262b",ink:"#0b1013"},{id:"jungle-teal",title:Oe("Jungle teal","\u0422\u0440\u043E\u043F\u0438\u0447\u0435\u0441\u043A\u0438\u0439 \u0431\u0438\u0440\u044E\u0437\u043E\u0432\u044B\u0439"),what:"Teal and jungle green, tropical adventure.",examples:["jungle","tropics","dinosaurs","explorers"],bgTop:"#26a69a",bgBottom:"#00695c",panel:"#4db6ac",nav:"#004d40",ink:"#00211c"},{id:"berry-plum",title:Oe("Berry plum","\u042F\u0433\u043E\u0434\u043D\u0430\u044F \u0441\u043B\u0438\u0432\u0430"),what:"Plum and berry purple, juicy and rich.",examples:["berries","potions","fashion","music"],bgTop:"#ad1457",bgBottom:"#4a0072",panel:"#c2185b",nav:"#38004d",ink:"#1a0024"},{id:"sky-day",title:Oe("Clear sky","\u042F\u0441\u043D\u043E\u0435 \u043D\u0435\u0431\u043E"),what:"Light sky blue with white clouds, open and friendly.",examples:["flying","birds","kids","travel"],bgTop:"#bfe9ff",bgBottom:"#6ec6ff",panel:"#ffffff",nav:"#3a9ad9",ink:"#123a5a",light:true},{id:"chocolate",title:Oe("Chocolate","\u0428\u043E\u043A\u043E\u043B\u0430\u0434"),what:"Brown chocolate and caramel, sweet and warm.",examples:["bakery","coffee","sweets","autumn"],bgTop:"#8d5a3b",bgBottom:"#4e2c1a",panel:"#a6704b",nav:"#3b2012",ink:"#1a0d06",gold:"#ffc56b"},{id:"autumn-maple",title:Oe("Autumn maple","\u041E\u0441\u0435\u043D\u043D\u0438\u0439 \u043A\u043B\u0451\u043D"),what:"Orange and red autumn leaves, harvest mood.",examples:["autumn","halloween","harvest","forest"],bgTop:"#ef6c00",bgBottom:"#8c2f00",panel:"#f57c00",nav:"#6b2300",ink:"#2b0e00"},{id:"spooky-night",title:Oe("Spooky night","\u0416\u0443\u0442\u043A\u0430\u044F \u043D\u043E\u0447\u044C"),what:"Dark purple and pumpkin orange, ghosts and halloween.",examples:["halloween","ghosts","horror lite","witches"],bgTop:"#311b92",bgBottom:"#120838",panel:"#4527a0",nav:"#0d0629",ink:"#05020f",gold:"#ff8f00"},{id:"sakura",title:Oe("Sakura","\u0421\u0430\u043A\u0443\u0440\u0430"),what:"Cherry blossom pink with soft white, japanese spring.",examples:["japan","anime","spring","ninja lite"],bgTop:"#ffd6e7",bgBottom:"#f48fb1",panel:"#fff3f8",nav:"#c2185b",ink:"#4d0f2a",light:true},{id:"matrix-green",title:Oe("Terminal green","\u0422\u0435\u0440\u043C\u0438\u043D\u0430\u043B\u044C\u043D\u044B\u0439 \u0437\u0435\u043B\u0451\u043D\u044B\u0439"),what:"Black with bright terminal green, hacker console.",examples:["hacking","code","retro computers","spy"],bgTop:"#0b1f0f",bgBottom:"#000000",panel:"#123317",nav:"#06120a",ink:"#39ff6a",gold:"#c6ff00",green:"#39ff6a"},{id:"retro-arcade",title:Oe("Retro arcade","\u0420\u0435\u0442\u0440\u043E-\u0430\u0440\u043A\u0430\u0434\u0430"),what:"Eighties arcade: deep blue with hot pink and yellow.",examples:["retro","pixel","80s","arcade"],bgTop:"#1e2a78",bgBottom:"#0a0f3d",panel:"#ff2e88",nav:"#0a0f3d",ink:"#05071f",gold:"#ffe600"},{id:"stone-dungeon",title:Oe("Stone dungeon","\u041A\u0430\u043C\u0435\u043D\u043D\u043E\u0435 \u043F\u043E\u0434\u0437\u0435\u043C\u0435\u043B\u044C\u0435"),what:"Dark stone and torchlight, dungeons and castles.",examples:["dungeon","castle","knights","rpg"],bgTop:"#4e4a46",bgBottom:"#1f1c1a",panel:"#6b655e",nav:"#171513",ink:"#0a0908",gold:"#ffb300"},{id:"emerald-luxe",title:Oe("Emerald luxe","\u0418\u0437\u0443\u043C\u0440\u0443\u0434\u043D\u044B\u0439 \u043B\u044E\u043A\u0441"),what:"Emerald green with gold, wealth and luck.",examples:["casino","luck","money","irish"],bgTop:"#00695c",bgBottom:"#00251a",panel:"#00897b",nav:"#001a12",ink:"#000c08",gold:"#ffd54f"},{id:"bubblegum",title:Oe("Bubblegum","\u0416\u0432\u0430\u0447\u043A\u0430"),what:"Pastel cyan and pink together, fun and bouncy.",examples:["kids","toys","party","bubbles"],bgTop:"#a0f0ff",bgBottom:"#ff9fe0",panel:"#ffffff",nav:"#d66bb4",ink:"#3a1f4d",light:true},{id:"military-olive",title:Oe("Military olive","\u0410\u0440\u043C\u0435\u0439\u0441\u043A\u0430\u044F \u043E\u043B\u0438\u0432\u0430"),what:"Olive drab and khaki, army and survival.",examples:["army","war","survival","hunting"],bgTop:"#6b7a3a",bgBottom:"#33391b",panel:"#808f4a",nav:"#262b14",ink:"#101207",gold:"#e6c34d"},{id:"deep-sea",title:Oe("Deep sea","\u041C\u043E\u0440\u0441\u043A\u0430\u044F \u0431\u0435\u0437\u0434\u043D\u0430"),what:"Very dark teal-blue of the deep ocean with glowing tones.",examples:["submarine","deep sea","mermaids","monsters"],bgTop:"#004e64",bgBottom:"#001219",panel:"#00677f",nav:"#000c11",ink:"#000508",gold:"#94fbab",green:"#4dfff3"},{id:"sunset",title:Oe("Sunset","\u0417\u0430\u043A\u0430\u0442"),what:"Orange to purple sunset gradient, warm evening.",examples:["travel","music","romance","racing"],bgTop:"#ff8a65",bgBottom:"#6a1b9a",panel:"#ff7043",nav:"#4a148c",ink:"#1f0738"},{id:"arctic-night",title:Oe("Polar night","\u041F\u043E\u043B\u044F\u0440\u043D\u0430\u044F \u043D\u043E\u0447\u044C"),what:"Dark blue with aurora green and cyan.",examples:["aurora","north","winter night","magic"],bgTop:"#0d3b66",bgBottom:"#021526",panel:"#145374",nav:"#01101e",ink:"#000810",gold:"#7cf5c8",green:"#3ff2a0"},{id:"honey",title:Oe("Honey","\u041C\u0451\u0434"),what:"Golden honey amber, warm and sweet, bees and farms.",examples:["bees","farm","bakery","sunny"],bgTop:"#ffca28",bgBottom:"#ff8f00",panel:"#ffe082",nav:"#b26a00",ink:"#3d2400"},{id:"monochrome",title:Oe("Monochrome","\u041C\u043E\u043D\u043E\u0445\u0440\u043E\u043C"),what:"Black, white and gray only, strict and stylish.",examples:["noir","minimal","chess","detective"],bgTop:"#3a3a3a",bgBottom:"#111111",panel:"#555555",nav:"#0c0c0c",ink:"#000000",gold:"#ffffff",green:"#d9d9d9"},{id:"tropical-punch",title:Oe("Tropical punch","\u0422\u0440\u043E\u043F\u0438\u0447\u0435\u0441\u043A\u0438\u0439 \u043F\u0443\u043D\u0448"),what:"Hot coral, turquoise and yellow, tropical party.",examples:["tropics","summer party","cocktails","carnival"],bgTop:"#ff5e62",bgBottom:"#ff9966",panel:"#1de9b6",nav:"#c2364a",ink:"#3d0f16"},{id:"cloud-gray",title:Oe("Soft gray","\u041C\u044F\u0433\u043A\u0438\u0439 \u0441\u0435\u0440\u044B\u0439"),what:"Light neutral gray, calm and modern, apps and tools.",examples:["tools","productivity","calm puzzle","office"],bgTop:"#f2f4f7",bgBottom:"#d5dae1",panel:"#ffffff",nav:"#8a94a6",ink:"#2b313b",light:true}];function au(e){let t={bgTop:e.bgTop,bgBottom:e.bgBottom,panel:e.panel,panelDeep:Ra(e.panel,.18),panelEdge:e.ink,ink:e.ink,nav:e.nav,text:e.light?e.ink:"#ffffff",textDim:e.light?_a(e.ink,0,.6,.25):_a(e.panel,0,.5,.35)};return e.gold&&(t.gold=e.gold,t.goldDeep=Ra(e.gold,.2)),e.green&&(t.green=e.green,t.greenDeep=Ra(e.green,.25)),{id:e.id,title:e.title,what:e.what,examples:e.examples,swatch:[e.bgTop,e.bgBottom,e.panel,e.gold??"#ffd43b"],patches:[Tl("Theme",t)]}}var Od=su.map(au),iu=[{id:"classic",title:Oe("Classic","\u041A\u043B\u0430\u0441\u0441\u0438\u043A\u0430"),what:"The pack's own colours.",dh:0,sat:1,dl:0},{id:"dawn",title:Oe("Dawn","\u0420\u0430\u0441\u0441\u0432\u0435\u0442"),what:"Lighter and warmer, a morning mood.",dh:20,sat:1.05,dl:.08},{id:"night",title:Oe("Night","\u041D\u043E\u0447\u044C"),what:"Darker and bluer, a night mood.",dh:-35,sat:.9,dl:-0.07},{id:"ember",title:Oe("Ember","\u0423\u0433\u043B\u0438"),what:"Shifted to red and orange, hot and dangerous.",dh:-60,sat:1.15,dl:0},{id:"frost",title:Oe("Frost","\u0418\u043D\u0435\u0439"),what:"Shifted to cyan and pale blue, cold and icy.",dh:140,sat:.8,dl:.05},{id:"toxic",title:Oe("Toxic","\u042F\u0434"),what:"Shifted to acid green and yellow, toxic.",dh:70,sat:1.25,dl:0},{id:"royal",title:Oe("Royal","\u041A\u043E\u0440\u043E\u043B\u0435\u0432\u0441\u043A\u0438\u0439"),what:"Shifted to purple and violet, magical and noble.",dh:200,sat:1.1,dl:0},{id:"faded",title:Oe("Faded","\u0412\u044B\u0446\u0432\u0435\u0442\u0448\u0438\u0439"),what:"Muted, low saturation, old photo and dusty.",dh:0,sat:.45,dl:.03}],lu=["background","ground","lane","primary","secondary","accent","muted","panel"],Dd=so.flatMap(e=>iu.map(t=>{let n={...e.palette};for(let s of lu){let r=e.palette[s];r&&(n[s]=_a(r,t.dh,t.sat,t.dl));}return {id:`${e.id}-${t.id}`,title:{en:`${e.names.en??e.id}: ${t.title.en}`,ru:`${e.names.ru??e.id}: ${t.title.ru}`},what:`${e.names.en??e.id} world. ${t.what}`,swatch:[n.background,n.ground,n.primary,n.accent],patches:[Rl("assets",e.id),Rl("palette",n)]}})),cu=[["knight","Knight","\u0420\u044B\u0446\u0430\u0440\u044C","An armoured knight with a sword and shield, brave and classic."],["dark_knight","Dark knight","\u0422\u0451\u043C\u043D\u044B\u0439 \u0440\u044B\u0446\u0430\u0440\u044C","A knight in black armour, grim and mighty."],["archmage","Archmage","\u0410\u0440\u0445\u0438\u043C\u0430\u0433","An old wizard in robes with a staff, magic and wisdom."],["berserker","Berserker","\u0411\u0435\u0440\u0441\u0435\u0440\u043A","A wild warrior with a big axe, rage and strength."],["hunter","Hunter","\u041E\u0445\u043E\u0442\u043D\u0438\u043A","A hunter with a bow and a hood, forests and tracking."],["crossbowman","Crossbowman","\u0410\u0440\u0431\u0430\u043B\u0435\u0442\u0447\u0438\u043A","A soldier with a crossbow, a careful shooter."],["gunslinger","Gunslinger","\u0421\u0442\u0440\u0435\u043B\u043E\u043A","A cowboy gunslinger, the wild west and duels."],["musketeer","Musketeer","\u041C\u0443\u0448\u043A\u0435\u0442\u0451\u0440","A musketeer with a hat and a musket, honour and adventure."],["soldier","Soldier","\u0421\u043E\u043B\u0434\u0430\u0442","A modern soldier with a rifle, war and missions."],["quarterback","Quarterback","\u041A\u0432\u043E\u0442\u0435\u0440\u0431\u0435\u043A","An american football player, sport and teams."],["lumberjack","Lumberjack","\u041B\u0435\u0441\u043E\u0440\u0443\u0431","A bearded lumberjack in a checked shirt with an axe, woods and work."],["viking","Viking","\u0412\u0438\u043A\u0438\u043D\u0433","A horned viking with a hammer, the north and raids."],["wizard","Wizard","\u0412\u043E\u043B\u0448\u0435\u0431\u043D\u0438\u043A","A young wizard with a pointy hat, spells and school of magic."],["ranger","Ranger","\u0421\u043B\u0435\u0434\u043E\u043F\u044B\u0442","A ranger of the wild, light armour and a long bow."],["king","King","\u041A\u043E\u0440\u043E\u043B\u044C","A king with a crown and a cape, kingdoms and rule."],["camper","Camper","\u0422\u0443\u0440\u0438\u0441\u0442","A casual hiker with a backpack, everyday modern life."],["crusader","Crusader","\u041A\u0440\u0435\u0441\u0442\u043E\u043D\u043E\u0441\u0435\u0446","A holy warrior in white and gold, light against darkness."]],Ad=cu.map(([e,t,n,s])=>({id:e,title:Oe(t,n),what:s,patches:[Rl("cast.hero.preset",e)]})),Ld=[["gear","Game gear","\u0418\u0433\u0440\u043E\u0432\u044B\u0435 \u043F\u0440\u0435\u0434\u043C\u0435\u0442\u044B","Faint swords, shields, potions, gems and crowns: the classic casual game look."],["plain","Plain gradient","\u0427\u0438\u0441\u0442\u044B\u0439 \u0433\u0440\u0430\u0434\u0438\u0435\u043D\u0442","No pattern, only the theme's gradient."],["dots","Polka dots","\u0413\u043E\u0440\u043E\u0448\u0435\u043A","Soft polka dots, playful."],["stripes","Diagonal stripes","\u0414\u0438\u0430\u0433\u043E\u043D\u0430\u043B\u044C\u043D\u044B\u0435 \u043F\u043E\u043B\u043E\u0441\u044B","Diagonal stripes, energetic and sporty."],["grid","Grid","\u0421\u0435\u0442\u043A\u0430","A thin grid like graph paper, tech or puzzle."],["hex","Honeycomb","\u0421\u043E\u0442\u044B","A honeycomb pattern, bees, sci-fi or strategy."],["stars","Stars","\u0417\u0432\u0451\u0437\u0434\u044B","Small scattered stars, night, space or magic."],["waves","Waves","\u0412\u043E\u043B\u043D\u044B","Soft waves, water and the sea."],["checker","Checkerboard","\u0428\u0430\u0445\u043C\u0430\u0442\u043A\u0430","A checkerboard, board games, racing flags."],["confetti","Confetti","\u041A\u043E\u043D\u0444\u0435\u0442\u0442\u0438","Colourful confetti bits, party and celebration."],["bubbles","Bubbles","\u041F\u0443\u0437\u044B\u0440\u0438","Round bubbles of different sizes, underwater or soda."],["zigzag","Zigzag","\u0417\u0438\u0433\u0437\u0430\u0433","A bold zigzag, retro and pop."],["diamonds","Diamonds","\u0420\u043E\u043C\u0431\u044B","A diamond pattern, cards, casino, royal."],["clouds","Clouds","\u041E\u0431\u043B\u0430\u043A\u0430","Puffy clouds, sky and dreams."],["leaves","Leaves","\u041B\u0438\u0441\u0442\u044C\u044F","Scattered leaves, nature, forest and autumn."],["circuit","Circuit","\u041C\u0438\u043A\u0440\u043E\u0441\u0445\u0435\u043C\u0430","Circuit board lines, robots, hackers and tech."],["sparkles","Sparkles","\u0418\u0441\u043A\u0440\u044B","Twinkling sparkles, magic, fairies and treasure."],["rays","Sun rays","\u041B\u0443\u0447\u0438","Rays from the centre, victory and big wins."],["bricks","Bricks","\u041A\u0438\u0440\u043F\u0438\u0447\u0438","A brick wall, city, castle or dungeon."],["paws","Paw prints","\u0421\u043B\u0435\u0434\u044B \u043B\u0430\u043F","Little paw prints, pets and animals."],["snow","Snowflakes","\u0421\u043D\u0435\u0436\u0438\u043D\u043A\u0438","Falling snowflakes, winter and holidays."]],wd=Ld.map(([e,t,n,s])=>({id:e,title:Oe(t,n),what:s,patches:[Tl("Background",e)]})),Pd=[["classic","Classic","\u041A\u043B\u0430\u0441\u0441\u0438\u043A\u0430","The kit's default bright casual clicks and coins."],["soft","Soft","\u041C\u044F\u0433\u043A\u0438\u0435","Quiet, rounded, calm sounds for relaxing games."],["retro","Retro 8-bit","\u0420\u0435\u0442\u0440\u043E 8-\u0431\u0438\u0442","Square-wave chiptune bleeps of old consoles."],["magic","Magic","\u041C\u0430\u0433\u0438\u044F","Shimmering chimes and sparkles, fairy-tale."],["sci-fi","Sci-fi","\u0424\u0430\u043D\u0442\u0430\u0441\u0442\u0438\u043A\u0430","Electronic blips and sweeps, space and robots."],["wood","Wooden","\u0414\u0435\u0440\u0435\u0432\u044F\u043D\u043D\u044B\u0435","Short wooden knocks and marimba, cosy and natural."]],Cd=Pd.map(([e,t,n,s])=>({id:e,title:Oe(t,n),what:s,patches:[Tl("SoundSet",e)]})),du={backgrounds:Ld.map(e=>e[0]),soundSets:Pd.map(e=>e[0])},Ol={"ui-themes":Od,"kit-palettes":Dd,"hero-looks":Ad,backgrounds:wd,"sound-sets":Cd};var Id=1,W=(e,t)=>({en:e,ru:t}),yt=(e,t)=>({section:"Look",op:"set",path:e,value:t}),Qn=(e,t,n,s=false)=>({section:"GameSpec",op:"set",path:`modes[role=core].params.${e}`,range:{min:t,max:n,...s?{integer:true}:{}}}),wt=(e,t)=>({section:"GameSpec",op:"add",path:`modes[role=core].content.${e}.without`,value:t}),gt=(e,t)=>({section:"GameSpec",op:"remove",path:`modes[role=core].content.${e}.without`,value:t}),Fo={modules:["kit-game"]},pu=[{id:"look.theme",group:"look",title:W("Interface colours","\u0426\u0432\u0435\u0442\u0430 \u0438\u043D\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430"),hint:W("Screens, panels and buttons of the whole app.","\u042D\u043A\u0440\u0430\u043D\u044B, \u043F\u0430\u043D\u0435\u043B\u0438 \u0438 \u043A\u043D\u043E\u043F\u043A\u0438 \u0432\u0441\u0435\u0433\u043E \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u044F."),question:"Pick the colour theme of the app's interface (menus, panels, buttons) that fits this product best.",kind:"choice",list:"ui-themes"},{id:"look.background",group:"look",title:W("Screen pattern","\u0423\u0437\u043E\u0440 \u0444\u043E\u043D\u0430"),hint:W("A pattern over the screens' gradient.","\u0423\u0437\u043E\u0440 \u043F\u043E\u0432\u0435\u0440\u0445 \u0433\u0440\u0430\u0434\u0438\u0435\u043D\u0442\u0430 \u044D\u043A\u0440\u0430\u043D\u043E\u0432."),question:"Pick the background pattern of the app's screens that fits this product best.",kind:"choice",list:"backgrounds"},{id:"look.shape",group:"look",title:W("Shape of buttons","\u0424\u043E\u0440\u043C\u0430 \u043A\u043D\u043E\u043F\u043E\u043A"),question:"What shape should the buttons and panels of the interface have?",kind:"choice",options:[{id:"chunky",title:W("Chunky round","\u041F\u0443\u0445\u043B\u044B\u0435 \u043A\u0440\u0443\u0433\u043B\u044B\u0435"),what:"Big rounded corners and a thick outline: toy-like, casual, for kids.",patches:[yt("Radius",18),yt("ButtonRadius",16),yt("Outline",3)]},{id:"classic",title:W("Classic","\u041A\u043B\u0430\u0441\u0441\u0438\u043A\u0430"),what:"Medium rounded corners and a normal outline: the default mobile casual look.",patches:[yt("Radius",14),yt("ButtonRadius",12),yt("Outline",3)]},{id:"sharp",title:W("Sharp","\u0421\u0442\u0440\u043E\u0433\u0438\u0435"),what:"Small corners and a thin outline: serious, tactical, strategy or sci-fi.",patches:[yt("Radius",4),yt("ButtonRadius",4),yt("Outline",2)]},{id:"pill",title:W("Pills","\u0422\u0430\u0431\u043B\u0435\u0442\u043A\u0438"),what:"Fully round pill buttons, no outline: soft, modern, minimal.",patches:[yt("Radius",24),yt("ButtonRadius",32),yt("Outline",0)]}]},{id:"look.motion",group:"look",title:W("Animations","\u0410\u043D\u0438\u043C\u0430\u0446\u0438\u0438"),question:"How lively should the interface animations be?",kind:"choice",options:[{id:"calm",title:W("Calm","\u0421\u043F\u043E\u043A\u043E\u0439\u043D\u044B\u0435"),what:"Slow, soft, no bounce: relaxing, meditative, for brain games.",patches:[yt("MotionSpeed",.7),yt("MotionIntensity",.3),yt("Particles",false)]},{id:"normal",title:W("Normal","\u041E\u0431\u044B\u0447\u043D\u044B\u0435"),what:"The default lively casual animations.",patches:[yt("MotionSpeed",1),yt("MotionIntensity",1),yt("Particles",true)]},{id:"bouncy",title:W("Bouncy","\u041F\u0440\u0443\u0436\u0438\u043D\u0438\u0441\u0442\u044B\u0435"),what:"Strong bounces and overshoots: cartoonish, playful, for kids.",patches:[yt("MotionSpeed",1.1),yt("MotionIntensity",2),yt("Particles",true)]},{id:"snappy",title:W("Snappy","\u0420\u0435\u0437\u043A\u0438\u0435"),what:"Very fast and short, little bounce: action, arcade, competitive.",patches:[yt("MotionSpeed",1.8),yt("MotionIntensity",.6),yt("Particles",true)]}]},{id:"look.sound",group:"look",title:W("Interface sounds","\u0417\u0432\u0443\u043A\u0438 \u0438\u043D\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430"),question:"Pick the sound style of the interface (clicks, rewards, coins) that fits this product best.",kind:"choice",list:"sound-sets"}],uu=[{id:"look.kit.palette",group:"look",title:W("World and colours of the game","\u041C\u0438\u0440 \u0438 \u0446\u0432\u0435\u0442\u0430 \u0438\u0433\u0440\u044B"),hint:W("The game's world (fantasy, sci-fi, cozy, post-apocalypse) and its colour mood.","\u041C\u0438\u0440 \u0438\u0433\u0440\u044B (\u0444\u044D\u043D\u0442\u0435\u0437\u0438, \u0444\u0430\u043D\u0442\u0430\u0441\u0442\u0438\u043A\u0430, \u0443\u044E\u0442, \u043F\u043E\u0441\u0442\u0430\u043F\u043E\u043A\u0430\u043B\u0438\u043F\u0441\u0438\u0441) \u0438 \u043D\u0430\u0441\u0442\u0440\u043E\u0435\u043D\u0438\u0435 \u0446\u0432\u0435\u0442\u0430."),for:Fo,question:"Pick the world and colour mood of the game scene that fits this idea best.",kind:"choice",list:"kit-palettes"},{id:"look.kit.hero",group:"look",title:W("The hero","\u0413\u0435\u0440\u043E\u0439"),for:Fo,question:"Pick the look of the game's main hero that fits this idea best.",kind:"choice",list:"hero-looks"},{id:"look.kit.race",group:"look",title:W("Hero's race","\u0420\u0430\u0441\u0430 \u0433\u0435\u0440\u043E\u044F"),for:Fo,question:"Which race should the main hero be?",kind:"choice",options:[["human","Human","\u0427\u0435\u043B\u043E\u0432\u0435\u043A","An ordinary human."],["elf","Elf","\u042D\u043B\u044C\u0444","A graceful elf with pointed ears: forests, magic, archery."],["dwarf","Dwarf","\u0413\u043D\u043E\u043C","A stout bearded dwarf: mines, forges, hammers."],["orc","Orc","\u041E\u0440\u043A","A green orc with tusks: brute strength, war, savage lands."],["undead","Undead","\u041D\u0435\u0436\u0438\u0442\u044C","A pale undead: skeletons, graveyards, dark magic, halloween."]].map(([e,t,n,s])=>({id:e,title:W(t,n),what:s,patches:[{section:"GameSpec",op:"set",path:"cast.hero.races",value:[e]}]}))}],fu=[{id:"feel.difficulty",group:"feel",title:W("Difficulty","\u0421\u043B\u043E\u0436\u043D\u043E\u0441\u0442\u044C"),for:Fo,question:"How hard should this game be for its players?",kind:"score",levelTitles:[W("Very easy","\u041E\u0447\u0435\u043D\u044C \u043B\u0435\u0433\u043A\u043E"),W("Easy","\u041B\u0435\u0433\u043A\u043E"),W("Balanced","\u0421\u0431\u0430\u043B\u0430\u043D\u0441\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u043E"),W("Hard","\u0421\u043B\u043E\u0436\u043D\u043E"),W("Very hard","\u041E\u0447\u0435\u043D\u044C \u0441\u043B\u043E\u0436\u043D\u043E")],levels:["Very easy and relaxing, for kids or a calm break.","Easy, casual.","Balanced: easy to start, harder later.","Hard, for players who like a challenge.","Very hard and punishing."],patches:[Qn("difficulty",0,1)]},{id:"feel.generosity",group:"feel",title:W("Rewards in the game","\u041D\u0430\u0433\u0440\u0430\u0434\u044B \u0432 \u0438\u0433\u0440\u0435"),for:Fo,question:"How generous should the game's rewards be?",kind:"score",levelTitles:[W("Stingy","\u0421\u043A\u0443\u043F\u043E"),W("Modest","\u0421\u043A\u0440\u043E\u043C\u043D\u043E"),W("Normal","\u041E\u0431\u044B\u0447\u043D\u043E"),W("Generous","\u0429\u0435\u0434\u0440\u043E"),W("Very generous","\u041E\u0447\u0435\u043D\u044C \u0449\u0435\u0434\u0440\u043E")],levels:["Stingy: rewards are rare and earned slowly.","Modest rewards.","Normal rewards.","Generous rewards.","Very generous: rewards rain down."],patches:[Qn("generosity",0,1)]},{id:"feel.runner.lanes",group:"feel",title:W("Lanes","\u041F\u043E\u043B\u043E\u0441\u044B"),for:{modules:["kit-game"],presets:["runner"]},question:"How wide should the running track be?",kind:"score",levelTitles:[W("2 lanes","2 \u043F\u043E\u043B\u043E\u0441\u044B"),W("3 lanes","3 \u043F\u043E\u043B\u043E\u0441\u044B"),W("4 lanes","4 \u043F\u043E\u043B\u043E\u0441\u044B"),W("5 lanes","5 \u043F\u043E\u043B\u043E\u0441")],levels:["Narrow: two lanes, simple and quick.","Normal: three lanes.","Wide: four lanes.","Very wide: five lanes, lots of dodging."],patches:[Qn("lanes",2,5,true)]},{id:"feel.runner.lives",group:"feel",title:W("Lives in a run","\u0416\u0438\u0437\u043D\u0438 \u0432 \u0437\u0430\u0431\u0435\u0433\u0435"),for:{modules:["kit-game"],presets:["runner"]},question:"How many hits should the runner survive?",kind:"score",levelTitles:[W("One hit","\u041E\u0434\u0438\u043D \u0443\u0434\u0430\u0440"),W("A few","\u041D\u0435\u0441\u043A\u043E\u043B\u044C\u043A\u043E"),W("Many","\u041C\u043D\u043E\u0433\u043E")],levels:["One hit ends the run.","A few lives.","Many lives, forgiving."],patches:[Qn("lives",1,6,true)]},{id:"feel.runner.length",group:"feel",title:W("Length of levels","\u0414\u043B\u0438\u043D\u0430 \u0443\u0440\u043E\u0432\u043D\u0435\u0439"),for:{modules:["kit-game"],presets:["runner"]},question:"How long should one level of the run be?",kind:"score",levelTitles:[W("Very short","\u041E\u0447\u0435\u043D\u044C \u043A\u043E\u0440\u043E\u0442\u043A\u0438\u0435"),W("Short","\u041A\u043E\u0440\u043E\u0442\u043A\u0438\u0435"),W("Normal","\u041E\u0431\u044B\u0447\u043D\u044B\u0435"),W("Long","\u0414\u043B\u0438\u043D\u043D\u044B\u0435")],levels:["Very short bursts for a quick break.","Short.","Normal.","Long runs."],patches:[Qn("length",.5,2)]},{id:"feel.runner.powers",group:"feel",title:W("Power-ups","\u0423\u0441\u0438\u043B\u0435\u043D\u0438\u044F"),for:{modules:["kit-game"],presets:["runner"]},question:"Which power-ups fit this runner best?",kind:"choice",options:[{id:"all",title:W("All of them","\u0412\u0441\u0435"),what:"Magnet, shield, double coins, dash and flight: the full set.",patches:[gt("powers",["magnet","shield","double","dash","flight"])]},{id:"grounded",title:W("On the ground","\u0411\u0435\u0437 \u043F\u043E\u043B\u0451\u0442\u0430"),what:"No flight: magnet, shield, double coins and dash. Realistic, sports, city.",patches:[gt("powers",["magnet","shield","double","dash"]),wt("powers",["flight"])]},{id:"coins",title:W("Coin hunter","\u041E\u0445\u043E\u0442\u0430 \u0437\u0430 \u043C\u043E\u043D\u0435\u0442\u0430\u043C\u0438"),what:"Only the coin ones: magnet and double coins. Collecting, greed, treasure.",patches:[gt("powers",["magnet","double"]),wt("powers",["shield","dash","flight"])]},{id:"hardcore",title:W("Hardcore","\u0425\u0430\u0440\u0434\u043A\u043E\u0440"),what:"No shield and no flight: dodging is everything. Skill, challenge.",patches:[gt("powers",["magnet","double","dash"]),wt("powers",["shield","flight"])]}]},{id:"feel.runner.obstacles",group:"feel",title:W("Obstacles","\u041F\u0440\u0435\u043F\u044F\u0442\u0441\u0442\u0432\u0438\u044F"),for:{modules:["kit-game"],presets:["runner"]},question:"Which obstacles fit this runner best?",kind:"choice",options:[{id:"all",title:W("Everything","\u0412\u0441\u0451 \u043F\u043E\u0434\u0440\u044F\u0434"),what:"Walls, barriers, pits, moving blocks, trains and rocks.",patches:[gt("obstacles",["wall","barrier","pit","mover","train","rock"])]},{id:"city",title:W("City streets","\u0413\u043E\u0440\u043E\u0434\u0441\u043A\u0438\u0435 \u0443\u043B\u0438\u0446\u044B"),what:"Walls, barriers, moving blocks and trains: a city, a subway, traffic.",patches:[gt("obstacles",["wall","barrier","mover","train"]),wt("obstacles",["pit","rock"])]},{id:"wild",title:W("Wild lands","\u0414\u0438\u043A\u0438\u0435 \u0437\u0435\u043C\u043B\u0438"),what:"Walls, pits, rocks and barriers: forests, mountains, ruins, no trains.",patches:[gt("obstacles",["wall","barrier","pit","rock"]),wt("obstacles",["mover","train"])]},{id:"simple",title:W("Simple","\u041F\u0440\u043E\u0441\u0442\u044B\u0435"),what:"Only walls, barriers and pits: easy to read, for kids.",patches:[gt("obstacles",["wall","barrier","pit"]),wt("obstacles",["mover","train","rock"])]}]},{id:"feel.platformer.lives",group:"feel",title:W("Lives on a level","\u0416\u0438\u0437\u043D\u0438 \u043D\u0430 \u0443\u0440\u043E\u0432\u043D\u0435"),for:{modules:["kit-game"],presets:["platformer"]},question:"How many hits should the hero survive on a level?",kind:"score",levelTitles:[W("One hit","\u041E\u0434\u0438\u043D \u0443\u0434\u0430\u0440"),W("A few hearts","\u041D\u0435\u0441\u043A\u043E\u043B\u044C\u043A\u043E \u0441\u0435\u0440\u0434\u0435\u0446"),W("Many hearts","\u041C\u043D\u043E\u0433\u043E \u0441\u0435\u0440\u0434\u0435\u0446")],levels:["One hit and the level restarts.","A few hearts.","Many hearts, forgiving."],patches:[Qn("lives",1,6,true)]},{id:"feel.platformer.double-jump",group:"feel",title:W("Double jump from the start","\u0414\u0432\u043E\u0439\u043D\u043E\u0439 \u043F\u0440\u044B\u0436\u043E\u043A \u0441\u0440\u0430\u0437\u0443"),for:{modules:["kit-game"],presets:["platformer"]},question:"Should the hero have a double jump from the very first level?",kind:"noul",yes:"Yes: the game is light and acrobatic, the hero flies around from the start.",no:"No: the double jump is earned later, the start is grounded and careful.",onYes:[{section:"GameSpec",op:"set",path:"modes[role=core].params.doubleJump",value:true}],onNo:[{section:"GameSpec",op:"set",path:"modes[role=core].params.doubleJump",value:false}]},{id:"feel.survivors.minutes",group:"feel",title:W("Length of a chapter","\u0414\u043B\u0438\u043D\u0430 \u0433\u043B\u0430\u0432\u044B"),for:{modules:["kit-game"],presets:["survivors"]},question:"How long should one chapter of survival last?",kind:"score",levelTitles:[W("2 minutes","2 \u043C\u0438\u043D\u0443\u0442\u044B"),W("5 minutes","5 \u043C\u0438\u043D\u0443\u0442"),W("10 minutes","10 \u043C\u0438\u043D\u0443\u0442"),W("15 minutes","15 \u043C\u0438\u043D\u0443\u0442")],levels:["Two minutes: quick bursts.","Five minutes.","Ten minutes.","Fifteen minutes: long sessions."],patches:[Qn("minutes",2,15)]},{id:"feel.survivors.foes",group:"feel",title:W("Monsters","\u041C\u043E\u043D\u0441\u0442\u0440\u044B"),for:{modules:["kit-game"],presets:["survivors"]},question:"Which kinds of monsters fit this game best?",kind:"choice",options:[{id:"all",title:W("The whole horde","\u0412\u0441\u044F \u043E\u0440\u0434\u0430"),what:"Swarms, grunts, archers, brutes, chargers and bombers.",patches:[gt("foes",["swarm","grunt","archer","brute","charger","bomber"])]},{id:"melee",title:W("Close combat","\u0411\u043B\u0438\u0436\u043D\u0438\u0439 \u0431\u043E\u0439"),what:"No shooters: swarms, grunts, brutes and chargers. Zombies, beasts.",patches:[gt("foes",["swarm","grunt","brute","charger"]),wt("foes",["archer","bomber"])]},{id:"army",title:W("An army","\u0410\u0440\u043C\u0438\u044F"),what:"Grunts, archers, brutes and chargers, no swarms: soldiers, knights, war.",patches:[gt("foes",["grunt","archer","brute","charger"]),wt("foes",["swarm","bomber"])]},{id:"chaos",title:W("Chaos","\u0425\u0430\u043E\u0441"),what:"Swarms, bombers and chargers: fast, explosive, crazy.",patches:[gt("foes",["swarm","charger","bomber","grunt"]),wt("foes",["archer","brute"])]}]},{id:"feel.td.lives",group:"feel",title:W("Lives of the base","\u0416\u0438\u0437\u043D\u0438 \u0431\u0430\u0437\u044B"),for:{modules:["kit-game"],presets:["tower-defense"]},question:"How many enemies may slip through before the level is lost?",kind:"score",levelTitles:[W("Very few","\u041E\u0447\u0435\u043D\u044C \u043C\u0430\u043B\u043E"),W("Some","\u0421\u0440\u0435\u0434\u043D\u0435"),W("Many","\u041C\u043D\u043E\u0433\u043E")],levels:["Very few: every leak hurts.","Some.","Many: forgiving."],patches:[Qn("lives",5,40,true)]},{id:"feel.td.foes",group:"feel",title:W("Enemies in the waves","\u0412\u0440\u0430\u0433\u0438 \u0432 \u0432\u043E\u043B\u043D\u0430\u0445"),for:{modules:["kit-game"],presets:["tower-defense"]},question:"Which enemies should march in the waves of this tower defense?",kind:"choice",options:[{id:"all",title:W("The whole army","\u0412\u0441\u044F \u0430\u0440\u043C\u0438\u044F"),what:"Grunts, runners, brutes, flyers, shamans, healers and splitters: the full mix.",patches:[gt("foes",["grunt","runner","brute","flyer","shaman","healer","splitter"])]},{id:"ground",title:W("Only on foot","\u0422\u043E\u043B\u044C\u043A\u043E \u043F\u0435\u0448\u0438\u0435"),what:"No flyers: every enemy walks the road. Medieval, zombies, ground war.",patches:[gt("foes",["grunt","runner","brute","shaman","healer","splitter"]),wt("foes",["flyer"])]},{id:"simple",title:W("Plain and clear","\u041F\u0440\u043E\u0441\u0442\u044B\u0435"),what:"No shamans, healers or splitters: easy to read, for kids and casual players.",patches:[gt("foes",["grunt","runner","brute","flyer"]),wt("foes",["shaman","healer","splitter"])]},{id:"swarm",title:W("Fast hordes","\u0411\u044B\u0441\u0442\u0440\u044B\u0435 \u043E\u0440\u0434\u044B"),what:"No brutes or shamans: many fast weak foes, a frantic pace. Insects, rats, robots.",patches:[gt("foes",["grunt","runner","flyer","healer","splitter"]),wt("foes",["brute","shaman"])]}]},{id:"feel.survivors.weapons",group:"feel",title:W("Weapons to find","\u041E\u0440\u0443\u0436\u0438\u0435 \u0432 \u0437\u0430\u0431\u0435\u0433\u0435"),hint:W("Which new weapons a level-up may offer.","\u041A\u0430\u043A\u043E\u0435 \u043D\u043E\u0432\u043E\u0435 \u043E\u0440\u0443\u0436\u0438\u0435 \u043F\u0440\u0435\u0434\u043B\u0430\u0433\u0430\u0435\u0442 \u043F\u043E\u0432\u044B\u0448\u0435\u043D\u0438\u0435 \u0443\u0440\u043E\u0432\u043D\u044F."),for:{modules:["kit-game"],presets:["survivors"]},question:"Which weapons fit the hero of this survival game best?",kind:"choice",options:[{id:"all",title:W("Everything","\u0412\u0441\u0451"),what:"Blaster, blades, aura, boomerang, lightning and drone: the full arsenal.",patches:[gt("weapons",["blaster","blades","aura","boomerang","lightning","drone"])]},{id:"tech",title:W("Technology","\u0422\u0435\u0445\u043D\u0438\u043A\u0430"),what:"Blaster, drone and lightning: guns and gadgets. Sci-fi, robots, the future.",patches:[gt("weapons",["blaster","drone","lightning"]),wt("weapons",["blades","aura","boomerang"])]},{id:"magic",title:W("Magic and steel","\u041C\u0430\u0433\u0438\u044F \u0438 \u0441\u0442\u0430\u043B\u044C"),what:"Blades, aura, boomerang and lightning, no guns: fantasy, wizards, knights.",patches:[gt("weapons",["blades","aura","boomerang","lightning"]),wt("weapons",["blaster","drone"])]},{id:"classic",title:W("Classic","\u041A\u043B\u0430\u0441\u0441\u0438\u043A\u0430"),what:"Blaster, blades and boomerang: simple weapons that are easy to read.",patches:[gt("weapons",["blaster","blades","boomerang"]),wt("weapons",["aura","lightning","drone"])]}]},{id:"feel.tycoon.events",group:"feel",title:W("Events in the city","\u0421\u043E\u0431\u044B\u0442\u0438\u044F \u0432 \u0433\u043E\u0440\u043E\u0434\u0435"),for:{modules:["kit-game"],presets:["tycoon"]},question:"Which events should pop up while this tycoon city earns money?",kind:"choice",options:[{id:"all",title:W("Busy life","\u0411\u0443\u0440\u043D\u0430\u044F \u0436\u0438\u0437\u043D\u044C"),what:"Rushes, breakdowns, investors and couriers: always something to tap.",patches:[gt("events",["rush","break","invest","courier"])]},{id:"calm",title:W("No breakdowns","\u0411\u0435\u0437 \u043F\u043E\u043B\u043E\u043C\u043E\u043A"),what:"Rushes, investors and couriers, nothing ever breaks: a calm, cozy business.",patches:[gt("events",["rush","invest","courier"]),wt("events",["break"])]},{id:"hands-on",title:W("Hands on","\u0421\u0432\u043E\u0438\u043C\u0438 \u0440\u0443\u043A\u0430\u043C\u0438"),what:"Rushes, breakdowns and couriers, no investors: the city grows by your own work.",patches:[gt("events",["rush","break","courier"]),wt("events",["invest"])]},{id:"minimal",title:W("Only rushes","\u0422\u043E\u043B\u044C\u043A\u043E \u0430\u0436\u0438\u043E\u0442\u0430\u0436"),what:"Only rush hours: a quiet idle game with few interruptions.",patches:[gt("events",["rush"]),wt("events",["break","invest","courier"])]}]}],hu=(e,t)=>({Type:"VirtualCurrency",CurrencyID:e,Amount:t}),Ta=(e,t,n,s,r)=>({id:e,title:W(t,n),what:s,patches:r.map((o,c)=>({section:"Reward",op:"set",path:`DailyCalendars.daily_login.Days[DayNumber=${c+1}].Rewards.Standard.Entries`,value:o.map(([d,x])=>hu(d,x))}))}),Dl=(e,t)=>`StoreOffers.${e}.${t}`,mu=[{id:"economy.shop-ad-gems",group:"economy",title:W("Gems for an ad in the shop","\u041A\u0440\u0438\u0441\u0442\u0430\u043B\u043B\u044B \u0437\u0430 \u0440\u0435\u043A\u043B\u0430\u043C\u0443 \u0432 \u043C\u0430\u0433\u0430\u0437\u0438\u043D\u0435"),for:{sections:["Store"]},question:"How many gems should one rewarded ad in the shop give?",kind:"score",levelTitles:[W("A few","\u041C\u0430\u043B\u043E"),W("Some","\u0421\u0440\u0435\u0434\u043D\u0435"),W("A handful","\u041F\u0440\u0438\u043B\u0438\u0447\u043D\u043E"),W("Many","\u041C\u043D\u043E\u0433\u043E")],levels:["A few: gems are rare.","Some.","A good handful.","Many: gems flow freely."],patches:[{section:"Store",op:"set",path:Dl("kit_gems_ad","Reward.Grant.Standard.Entries[Type=VirtualCurrency].Amount"),range:{min:2,max:15,integer:true}}]},{id:"economy.shop-ad-cap",group:"economy",title:W("Ads in the shop a day","\u0420\u0435\u043A\u043B\u0430\u043C\u0430 \u0432 \u043C\u0430\u0433\u0430\u0437\u0438\u043D\u0435 \u0437\u0430 \u0434\u0435\u043D\u044C"),for:{sections:["Store"]},question:"How many times a day may a player watch an ad for gems in the shop?",kind:"score",levelTitles:[W("A few times","\u041D\u0435\u0441\u043A\u043E\u043B\u044C\u043A\u043E \u0440\u0430\u0437"),W("About ten","\u041E\u043A\u043E\u043B\u043E \u0434\u0435\u0441\u044F\u0442\u0438"),W("Many times","\u041C\u043D\u043E\u0433\u043E \u0440\u0430\u0437")],levels:["A few times.","About ten.","Many times."],patches:[{section:"Store",op:"set",path:Dl("kit_gems_ad","Availability.Limits.DailyCap"),range:{min:3,max:20,integer:true}}]},{id:"economy.shop-pack",group:"economy",title:W("Size of the gem pack","\u0420\u0430\u0437\u043C\u0435\u0440 \u043D\u0430\u0431\u043E\u0440\u0430 \u043A\u0440\u0438\u0441\u0442\u0430\u043B\u043B\u043E\u0432"),for:{sections:["Store"]},question:"How many gems should the paid gem pack hold?",kind:"score",levelTitles:[W("Small","\u041C\u0430\u043B\u0435\u043D\u044C\u043A\u0438\u0439"),W("Normal","\u041E\u0431\u044B\u0447\u043D\u044B\u0439"),W("Big","\u0411\u043E\u043B\u044C\u0448\u043E\u0439"),W("Huge","\u041E\u0433\u0440\u043E\u043C\u043D\u044B\u0439")],levels:["A small pack.","A normal pack.","A big pack.","A huge pack: the best deal."],patches:[{section:"Store",op:"set",path:Dl("kit_gems_pack","Reward.Grant.Standard.Entries[Type=VirtualCurrency].Amount"),range:{min:60,max:200,integer:true}}]},{id:"economy.start-coins",group:"economy",title:W("Coins at the start","\u041C\u043E\u043D\u0435\u0442\u044B \u043D\u0430 \u0441\u0442\u0430\u0440\u0442\u0435"),for:{sections:["Currency"]},question:"How many coins should a new player start with?",kind:"score",levelTitles:[W("A few","\u041C\u0430\u043B\u043E"),W("Some","\u0421\u0440\u0435\u0434\u043D\u0435"),W("Comfortable","\u041A\u043E\u043C\u0444\u043E\u0440\u0442\u043D\u043E"),W("Rich","\u0411\u043E\u0433\u0430\u0442\u043E")],levels:["A few: everything is earned.","Some.","A comfortable start.","A rich start: buy upgrades right away."],patches:[{section:"Currency",op:"set",path:"VirtualCurrencies.CO.Economy.InitialDeposit",range:{min:100,max:3e3,integer:true}}]},{id:"economy.ad-multiplier",group:"economy",title:W("Round reward for an ad","\u041D\u0430\u0433\u0440\u0430\u0434\u0430 \u0440\u0430\u0443\u043D\u0434\u0430 \u0437\u0430 \u0440\u0435\u043A\u043B\u0430\u043C\u0443"),hint:W("How many times the round's coins grow for a rewarded ad (in the app).","\u0412\u043E \u0441\u043A\u043E\u043B\u044C\u043A\u043E \u0440\u0430\u0437 \u0440\u0430\u0441\u0442\u0443\u0442 \u043C\u043E\u043D\u0435\u0442\u044B \u0440\u0430\u0443\u043D\u0434\u0430 \u0437\u0430 \u0440\u0435\u043A\u043B\u0430\u043C\u0443 (\u0432 \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0438)."),for:{modules:["kit-game"],sections:["Reward"]},question:"How big should the bonus for watching an ad after a round be?",kind:"score",levelTitles:[W("x2","x2"),W("x3","x3"),W("x4","x4"),W("x5","x5")],levels:["Double.","Triple.","Four times.","Five times."],patches:[{section:"Reward",op:"set",path:"Windows.round.AdMultiplier",range:{min:2,max:5,integer:true}}]},{id:"economy.vip-multiplier",group:"economy",title:W("Round reward for VIP","\u041D\u0430\u0433\u0440\u0430\u0434\u0430 \u0440\u0430\u0443\u043D\u0434\u0430 \u0434\u043B\u044F VIP"),for:{modules:["kit-game"],sections:["Reward"]},question:"How big should the round reward bonus of VIP players be?",kind:"score",levelTitles:[W("x3","x3"),W("x5","x5"),W("x8","x8")],levels:["Triple.","Five times.","Eight times."],patches:[{section:"Reward",op:"set",path:"Windows.round.VipMultiplier",range:{min:3,max:8,integer:true}}]},{id:"economy.vip-price",group:"economy",title:W("Price of VIP","\u0426\u0435\u043D\u0430 VIP"),for:{sections:["Premium"]},question:"How expensive should the VIP pass be, in gems?",kind:"score",levelTitles:[W("Cheap","\u0414\u0451\u0448\u0435\u0432\u043E"),W("Normal","\u041E\u0431\u044B\u0447\u043D\u043E"),W("Expensive","\u0414\u043E\u0440\u043E\u0433\u043E")],levels:["Cheap, an easy first purchase.","Normal.","Expensive, for the most devoted."],patches:[{section:"Premium",op:"set",path:"Definitions.vip.PriceOptions.default.Cost.Standard.Entries[Type=VirtualCurrency].Amount",range:{min:20,max:120,integer:true}}]},{id:"economy.daily-calendar",group:"economy",title:W("Daily login rewards","\u041D\u0430\u0433\u0440\u0430\u0434\u044B \u0437\u0430 \u0432\u0445\u043E\u0434"),for:{sections:["Reward"]},question:"Which daily login reward plan fits this game best?",kind:"choice",options:[Ta("gentle","Gentle","\u0421\u043A\u0440\u043E\u043C\u043D\u044B\u0435","Small steady rewards every day: a calm game with a slow economy.",[[["CO",50]],[["CO",60]],[["CO",80]],[["GE",2]],[["CO",100]],[["CO",120]],[["GE",8],["CO",150]]]),Ta("standard","Standard","\u041E\u0431\u044B\u0447\u043D\u044B\u0435","Growing coins with gems on day 4 and a big day 7.",[[["CO",100]],[["CO",150]],[["CO",200]],[["GE",5]],[["CO",300]],[["CO",400]],[["GE",20],["CO",500]]]),Ta("generous","Generous","\u0429\u0435\u0434\u0440\u044B\u0435","Big rewards every day, gems often: a fast, rewarding economy.",[[["CO",300]],[["GE",5]],[["CO",500]],[["GE",10]],[["CO",800]],[["GE",15]],[["GE",40],["CO",1500]]]),Ta("jackpot","Jackpot day 7","\u0414\u0436\u0435\u043A\u043F\u043E\u0442 \u043D\u0430 7-\u0439 \u0434\u0435\u043D\u044C","Small days and a huge jackpot on day 7: come back every day.",[[["CO",50]],[["CO",50]],[["CO",80]],[["CO",80]],[["CO",100]],[["CO",150]],[["GE",60],["CO",3e3]]])]}],lo=(e,t,n)=>({section:"Quest",op:"set",path:`Quests.${e}.Reward.Grant.Standard.Entries[Type=VirtualCurrency].Amount`,range:{min:t,max:n,integer:true}}),Ko=(e,t,n,s)=>({section:"Quest",op:"set",path:`Quests.${e}.Objectives.${t}.TargetValue`,range:{min:n,max:s,integer:true}}),Nd="Definitions.star_festival",er=e=>{let[t,n]=e.name,[s,r]=e.token,o=`Collect ${s.toLowerCase()} by playing rounds, shopping and finishing quests. VIP gets a second prize on every milestone.`,c=`\u0421\u043E\u0431\u0438\u0440\u0430\u0439\u0442\u0435 ${r.toLowerCase()} \u0432 \u0440\u0430\u0443\u043D\u0434\u0430\u0445, \u043F\u043E\u043A\u0443\u043F\u043A\u0430\u0445 \u0438 \u0437\u0430\u0434\u0430\u043D\u0438\u044F\u0445. VIP \u043F\u043E\u043B\u0443\u0447\u0430\u0435\u0442 \u0432\u0442\u043E\u0440\u043E\u0439 \u043F\u0440\u0438\u0437 \u043D\u0430 \u043A\u0430\u0436\u0434\u043E\u0439 \u0432\u0435\u0445\u0435.`,d=[["stars_10",10],["stars_50",50],["stars_120",120],["stars_250",250]],x=(_,O)=>({section:"TimedEvent",op:"set",path:`${Nd}.${_}`,value:O});return {id:e.id,title:W(t,n),what:e.what,patches:[x("DisplayName",t),x("Description",o),x("Content.DisplayName",t),x("Content.Description",o),x("Content.Token.DisplayName",s),...d.map(([_,O])=>x(`Content.Milestones.${_}.DisplayName`,`${O} ${e.unit[0]}`)),x("Content.Milestones.stars_400.DisplayName",e.crown[0])],translations:{ru:{[t]:n,[o]:c,[s]:r,[e.crown[0]]:e.crown[1],...Object.fromEntries(d.map(([,_])=>[`${_} ${e.unit[0]}`,`${_} ${e.unit[1]}`]))}}}},Al=(e,t,n,s,r,o,c)=>({id:e,title:W(t,n),what:c,patches:[{section:"TimedBoost",op:"set",path:"Definitions.double_rewards.Effect.Value",value:s},{section:"TimedBoost",op:"set",path:"Definitions.double_rewards.DisplayName",value:t},{section:"TimedBoost",op:"set",path:"Definitions.double_rewards.Description",value:r}],translations:{ru:{[t]:n,[r]:o}}}),yu=[{id:"liveops.event-theme",group:"liveops",title:W("Theme of the weekly event","\u0422\u0435\u043C\u0430 \u043D\u0435\u0434\u0435\u043B\u044C\u043D\u043E\u0433\u043E \u0438\u0432\u0435\u043D\u0442\u0430"),hint:W("Name of the event, its tokens and prizes.","\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0438\u0432\u0435\u043D\u0442\u0430, \u0435\u0433\u043E \u0436\u0435\u0442\u043E\u043D\u043E\u0432 \u0438 \u043F\u0440\u0438\u0437\u043E\u0432."),for:{sections:["TimedEvent"]},question:"Which weekly event theme fits this product best?",kind:"choice",options:[er({id:"star-festival",name:["Star festival","\u0417\u0432\u0451\u0437\u0434\u043D\u044B\u0439 \u0444\u0435\u0441\u0442\u0438\u0432\u0430\u043B\u044C"],token:["Festival stars","\u0417\u0432\u0451\u0437\u0434\u044B \u0444\u0435\u0441\u0442\u0438\u0432\u0430\u043B\u044F"],unit:["stars","\u0437\u0432\u0451\u0437\u0434"],crown:["Festival crown","\u041A\u043E\u0440\u043E\u043D\u0430 \u0444\u0435\u0441\u0442\u0438\u0432\u0430\u043B\u044F"],what:"A cheerful festival of stars: fits anything."}),er({id:"harvest",name:["Harvest fair","\u042F\u0440\u043C\u0430\u0440\u043A\u0430 \u0443\u0440\u043E\u0436\u0430\u044F"],token:["Golden apples","\u0417\u043E\u043B\u043E\u0442\u044B\u0435 \u044F\u0431\u043B\u043E\u043A\u0438"],unit:["apples","\u044F\u0431\u043B\u043E\u043A"],crown:["Golden basket","\u0417\u043E\u043B\u043E\u0442\u0430\u044F \u043A\u043E\u0440\u0437\u0438\u043D\u0430"],what:"Farm, nature, cozy village, autumn."}),er({id:"monster-hunt",name:["Monster hunt","\u041E\u0445\u043E\u0442\u0430 \u043D\u0430 \u043C\u043E\u043D\u0441\u0442\u0440\u043E\u0432"],token:["Trophies","\u0422\u0440\u043E\u0444\u0435\u0438"],unit:["trophies","\u0442\u0440\u043E\u0444\u0435\u0435\u0432"],crown:["Hunter's crown","\u041A\u043E\u0440\u043E\u043D\u0430 \u043E\u0445\u043E\u0442\u043D\u0438\u043A\u0430"],what:"Action, fantasy, battles, monsters."}),er({id:"space-week",name:["Space week","\u041A\u043E\u0441\u043C\u0438\u0447\u0435\u0441\u043A\u0430\u044F \u043D\u0435\u0434\u0435\u043B\u044F"],token:["Star shards","\u0417\u0432\u0451\u0437\u0434\u043D\u044B\u0435 \u043E\u0441\u043A\u043E\u043B\u043A\u0438"],unit:["shards","\u043E\u0441\u043A\u043E\u043B\u043A\u043E\u0432"],crown:["Galaxy medal","\u041C\u0435\u0434\u0430\u043B\u044C \u0433\u0430\u043B\u0430\u043A\u0442\u0438\u043A\u0438"],what:"Sci-fi, space, robots, the future."}),er({id:"winter",name:["Winter holidays","\u0417\u0438\u043C\u043D\u0438\u0435 \u043F\u0440\u0430\u0437\u0434\u043D\u0438\u043A\u0438"],token:["Snowflakes","\u0421\u043D\u0435\u0436\u0438\u043D\u043A\u0438"],unit:["snowflakes","\u0441\u043D\u0435\u0436\u0438\u043D\u043E\u043A"],crown:["Ice crown","\u041B\u0435\u0434\u044F\u043D\u0430\u044F \u043A\u043E\u0440\u043E\u043D\u0430"],what:"Winter, new year, cozy and festive."}),er({id:"beach",name:["Beach party","\u041F\u043B\u044F\u0436\u043D\u0430\u044F \u0432\u0435\u0447\u0435\u0440\u0438\u043D\u043A\u0430"],token:["Seashells","\u0420\u0430\u043A\u0443\u0448\u043A\u0438"],unit:["seashells","\u0440\u0430\u043A\u0443\u0448\u0435\u043A"],crown:["Golden surfboard","\u0417\u043E\u043B\u043E\u0442\u0430\u044F \u0434\u043E\u0441\u043A\u0430"],what:"Summer, the sea, islands, holidays."}),er({id:"treasure",name:["Treasure hunt","\u041E\u0445\u043E\u0442\u0430 \u0437\u0430 \u0441\u043E\u043A\u0440\u043E\u0432\u0438\u0449\u0430\u043C\u0438"],token:["Map pieces","\u041A\u0443\u0441\u043E\u0447\u043A\u0438 \u043A\u0430\u0440\u0442\u044B"],unit:["pieces","\u043A\u0443\u0441\u043E\u0447\u043A\u043E\u0432"],crown:["Pirate chest","\u041F\u0438\u0440\u0430\u0442\u0441\u043A\u0438\u0439 \u0441\u0443\u043D\u0434\u0443\u043A"],what:"Pirates, adventure, exploring, mysteries."}),er({id:"carnival",name:["Carnival","\u041A\u0430\u0440\u043D\u0430\u0432\u0430\u043B"],token:["Masks","\u041C\u0430\u0441\u043A\u0438"],unit:["masks","\u043C\u0430\u0441\u043E\u043A"],crown:["Carnival crown","\u041A\u043E\u0440\u043E\u043D\u0430 \u043A\u0430\u0440\u043D\u0430\u0432\u0430\u043B\u0430"],what:"Music, dance, a bright party, cartoon fun."})]},{id:"liveops.event-pace",group:"liveops",title:W("Pace of the weekly event","\u0422\u0435\u043C\u043F \u043D\u0435\u0434\u0435\u043B\u044C\u043D\u043E\u0433\u043E \u0438\u0432\u0435\u043D\u0442\u0430"),for:{sections:["TimedEvent"]},question:"How fast should players collect the weekly event tokens by playing rounds?",kind:"score",levelTitles:[W("Slow","\u041C\u0435\u0434\u043B\u0435\u043D\u043D\u043E"),W("Normal","\u041E\u0431\u044B\u0447\u043D\u043E"),W("Fast","\u0411\u044B\u0441\u0442\u0440\u043E"),W("Very fast","\u041E\u0447\u0435\u043D\u044C \u0431\u044B\u0441\u0442\u0440\u043E")],levels:["Slow: the top prize is for the most devoted.","Normal.","Fast.","Very fast: most players reach the top."],patches:[{section:"TimedEvent",op:"set",path:`${Nd}.Content.TokenSources[SourceType=CustomAction].BaseWeight`,range:{min:2,max:10,integer:true}}]},{id:"liveops.boost-power",group:"liveops",title:W("Power of the reward boost","\u0421\u0438\u043B\u0430 \u0431\u0443\u0441\u0442\u0430 \u043D\u0430\u0433\u0440\u0430\u0434"),for:{sections:["TimedBoost"]},question:"How strong should the paid reward boost be?",kind:"choice",options:[Al("x1-5","Rewards x1.5","\u041D\u0430\u0433\u0440\u0430\u0434\u044B x1.5",1.5,"Every reward is 1.5 times bigger for an hour.","\u041A\u0430\u0436\u0434\u0430\u044F \u043D\u0430\u0433\u0440\u0430\u0434\u0430 \u0432 1.5 \u0440\u0430\u0437\u0430 \u0431\u043E\u043B\u044C\u0448\u0435 \u0432 \u0442\u0435\u0447\u0435\u043D\u0438\u0435 \u0447\u0430\u0441\u0430.","A gentle boost: a slow, balanced economy."),Al("x2","Double rewards","\u0414\u0432\u043E\u0439\u043D\u044B\u0435 \u043D\u0430\u0433\u0440\u0430\u0434\u044B",2,"Every reward is doubled for an hour.","\u041A\u0430\u0436\u0434\u0430\u044F \u043D\u0430\u0433\u0440\u0430\u0434\u0430 \u0443\u0434\u0432\u043E\u0435\u043D\u0430 \u043D\u0430 \u0447\u0430\u0441.","The classic double: fits most games."),Al("x3","Triple rewards","\u0422\u0440\u043E\u0439\u043D\u044B\u0435 \u043D\u0430\u0433\u0440\u0430\u0434\u044B",3,"Every reward is tripled for an hour.","\u041A\u0430\u0436\u0434\u0430\u044F \u043D\u0430\u0433\u0440\u0430\u0434\u0430 \u0443\u0442\u0440\u043E\u0435\u043D\u0430 \u043D\u0430 \u0447\u0430\u0441.","A big boost: a fast, generous economy.")]},{id:"liveops.quest-effort",group:"liveops",title:W("Effort of daily quests","\u0421\u043B\u043E\u0436\u043D\u043E\u0441\u0442\u044C \u0435\u0436\u0435\u0434\u043D\u0435\u0432\u043D\u044B\u0445 \u0437\u0430\u0434\u0430\u043D\u0438\u0439"),for:{sections:["Quest"]},question:"How much play should the daily quests ask for?",kind:"score",levelTitles:[W("A few minutes","\u041F\u0430\u0440\u0430 \u043C\u0438\u043D\u0443\u0442"),W("Short","\u041A\u043E\u0440\u043E\u0442\u043A\u043E"),W("Normal","\u041E\u0431\u044B\u0447\u043D\u043E"),W("Long","\u0414\u043E\u043B\u0433\u043E")],levels:["Very little: done in a few minutes.","A short session.","A normal session.","A long session: for devoted players."],patches:[Ko("daily_play","play",1,8),Ko("daily_earn","earn",50,500),Ko("kit_daily_coins","coins",100,1500),Ko("kit_daily_time","seconds",180,1800),Ko("kit_daily_levels","levels",1,6)]},{id:"liveops.quest-rewards",group:"liveops",title:W("Rewards of daily quests","\u041D\u0430\u0433\u0440\u0430\u0434\u044B \u0437\u0430 \u0437\u0430\u0434\u0430\u043D\u0438\u044F"),for:{sections:["Quest"]},question:"How generous should the rewards of the daily quests be?",kind:"score",levelTitles:[W("Small","\u041C\u0430\u043B\u0435\u043D\u044C\u043A\u0438\u0435"),W("Normal","\u041E\u0431\u044B\u0447\u043D\u044B\u0435"),W("Big","\u0411\u043E\u043B\u044C\u0448\u0438\u0435"),W("Very big","\u041E\u0447\u0435\u043D\u044C \u0431\u043E\u043B\u044C\u0448\u0438\u0435")],levels:["Small.","Normal.","Big.","Very big."],patches:[lo("daily_visit",10,100),lo("daily_earn",30,300),lo("daily_play",80,600),lo("kit_daily_coins",50,500),lo("kit_daily_time",50,500),lo("kit_daily_levels",5,40)]},{id:"liveops.leaderboard",group:"liveops",title:W("Weekly leaderboard","\u041D\u0435\u0434\u0435\u043B\u044C\u043D\u044B\u0439 \u0440\u0435\u0439\u0442\u0438\u043D\u0433"),for:{sections:["Leaderboard"]},question:"Is competing on a weekly leaderboard a good fit for this product?",kind:"noul",yes:"Yes: players like to compete and compare their scores.",no:"No: it is a calm, personal or creative product without competition.",onYes:[{section:"Leaderboard",op:"set",path:"Definitions.weekly_score.IsEnabled",value:true}],onNo:[{section:"Leaderboard",op:"set",path:"Definitions.weekly_score.IsEnabled",value:false}]}],Mn=(e,t,n,s)=>({id:e,title:W(t,n),what:s,patches:[{section:"Currency",op:"set",path:"VirtualCurrencies.CO.DisplayName",value:t},{section:"GameSpec",op:"set",path:"texts.'res.coins'",value:{en:t,ru:n}}],translations:{ru:{[t]:n}}}),tr=(e,t,n,s)=>({id:e,title:W(t,n),what:s,patches:[{section:"Currency",op:"set",path:"VirtualCurrencies.GE.DisplayName",value:t}],translations:{ru:{[t]:n}}}),gu=[{id:"texts.coin-name",group:"texts",title:W("Name of the coins","\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u043C\u043E\u043D\u0435\u0442"),for:{sections:["Currency"]},question:"What should the game's soft currency (earned in rounds) be called?",kind:"choice",options:[Mn("coins","Coins","\u041C\u043E\u043D\u0435\u0442\u044B","Plain coins: fits anything."),Mn("gold","Gold","\u0417\u043E\u043B\u043E\u0442\u043E","Gold: fantasy, medieval, pirates, treasure."),Mn("credits","Credits","\u041A\u0440\u0435\u0434\u0438\u0442\u044B","Credits: sci-fi, space, future, robots."),Mn("cash","Cash","\u041D\u0430\u043B\u0438\u0447\u043D\u044B\u0435","Cash: business, city, modern life, tycoon."),Mn("scrap","Scrap","\u0425\u043B\u0430\u043C","Scrap: post-apocalypse, survival, junk."),Mn("candies","Candies","\u041A\u043E\u043D\u0444\u0435\u0442\u044B","Candies: sweets, kids, cozy cartoon."),Mn("stars","Stars","\u0417\u0432\u0451\u0437\u0434\u044B","Stars: kids, space, dreams, music."),Mn("bones","Bones","\u041A\u043E\u0441\u0442\u0438","Bones: pets, dogs, dinosaurs, halloween."),Mn("shells","Shells","\u0420\u0430\u043A\u0443\u0448\u043A\u0438","Shells: the sea, islands, mermaids."),Mn("leaves","Leaves","\u041B\u0438\u0441\u0442\u044C\u044F","Leaves: nature, forest, farm, elves.")]},{id:"texts.gem-name",group:"texts",title:W("Name of the gems","\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u043A\u0440\u0438\u0441\u0442\u0430\u043B\u043B\u043E\u0432"),for:{sections:["Currency"]},question:"What should the game's premium currency be called?",kind:"choice",options:[tr("gems","Gems","\u041A\u0440\u0438\u0441\u0442\u0430\u043B\u043B\u044B","Gems: fits anything."),tr("diamonds","Diamonds","\u0410\u043B\u043C\u0430\u0437\u044B","Diamonds: luxury, mining, treasure."),tr("rubies","Rubies","\u0420\u0443\u0431\u0438\u043D\u044B","Rubies: fantasy, royal, magic."),tr("crystals","Energy cells","\u042D\u043D\u0435\u0440\u0433\u043E\u044F\u0447\u0435\u0439\u043A\u0438","Energy cells: sci-fi, robots, space."),tr("pearls","Pearls","\u0416\u0435\u043C\u0447\u0443\u0433","Pearls: the sea, mermaids, elegance."),tr("orbs","Orbs","\u0421\u0444\u0435\u0440\u044B","Magic orbs: wizards, spells, mystery."),tr("tokens","Tokens","\u0416\u0435\u0442\u043E\u043D\u044B","Tokens: arcade, casino, retro."),tr("hearts","Hearts","\u0421\u0435\u0440\u0434\u0435\u0447\u043A\u0438","Hearts: cute, love, pets, kids.")]}],bu=new Set(["Look","GameSpec"]),Oa=e=>e?.map(t=>bu.has(t.section)?t:{...t,ifExists:true}),vu=e=>{switch(e.kind){case "choice":return e.options?{...e,options:e.options.map(t=>({...t,patches:Oa(t.patches)}))}:e;case "score":return {...e,patches:Oa(e.patches)};case "noul":return {...e,onYes:Oa(e.onYes),...e.onNo?{onNo:Oa(e.onNo)}:{}}}},$d=[...pu,...uu,...fu,...mu,...yu,...gu].map(vu),xu={version:Id,knobs:$d,lists:Ol};var Ll=/^[a-z0-9][a-z0-9_.-]{0,63}$/,ku=new Set(["set","merge","unset","add","remove"]),Su=/[\u2013\u2014]/;function Da(e,t,n,s=false){(!e||e.length===0)&&n.push(`${t}: no patches`);for(let[r,o]of (e??[]).entries())(!o.section||!/^[A-Z][A-Za-z0-9]*$/.test(o.section))&&n.push(`${t}.patches[${r}]: section "${o.section}"`),ku.has(o.op)||n.push(`${t}.patches[${r}]: op "${o.op}"`),Ma(o.path)===null&&n.push(`${t}.patches[${r}]: path "${o.path}"`),s&&o.op==="set"&&!o.range&&o.value===void 0&&n.push(`${t}.patches[${r}]: a score patch needs a range`),o.range&&!(Number.isFinite(o.range.min)&&Number.isFinite(o.range.max))&&n.push(`${t}.patches[${r}]: range`);}function Bd(e,t,n){e.length===0&&n.push(`${t}: no options`),e.length>255&&n.push(`${t}: ${e.length} options, the decision model takes ${255}`);let s=new Set;for(let r of e)Ll.test(r.id)||n.push(`${t}: option id "${r.id}"`),s.has(r.id)&&n.push(`${t}: option "${r.id}" twice`),s.add(r.id),r.title?.en||n.push(`${t}.${r.id}: no English title`),r.what||n.push(`${t}.${r.id}: no description for the decision model`),Da(r.patches,`${t}.${r.id}`,n);}function wl(e,t){if(typeof e=="string")t.push(e);else if(Array.isArray(e))for(let n of e)wl(n,t);else if(e&&typeof e=="object")for(let n of Object.values(e))wl(n,t);}function Eu(e){let t=[];for(let[r,o]of Object.entries(e.lists))Ll.test(r)||t.push(`list "${r}": id`),Bd(o,`list ${r}`,t);let n=new Set;for(let r of e.knobs){let o=`knob ${r.id}`;Ll.test(r.id)||t.push(`${o}: id`),n.has(r.id)&&t.push(`${o}: twice`),n.add(r.id),r.title?.en||t.push(`${o}: no English title`),r.question||t.push(`${o}: no question`),r.kind==="choice"?(r.list&&r.options&&t.push(`${o}: options OR a list, not both`),r.list&&!e.lists[r.list]&&t.push(`${o}: no list "${r.list}"`),r.list||Bd(r.options??[],o,t)):r.kind==="score"?((r.levels.length<2||r.levels.length>10)&&t.push(`${o}: ${r.levels.length} levels, 2..${10}`),r.levelTitles?.length!==r.levels.length?t.push(`${o}: levelTitles must name every level`):r.levelTitles.forEach((c,d)=>{(!c.en||!c.ru)&&t.push(`${o}: level ${d} needs en and ru titles`);}),Da(r.patches,o,t,true)):r.kind==="noul"?((!r.yes||!r.no)&&t.push(`${o}: yes and no`),Da(r.onYes,o,t),r.onNo&&Da(r.onNo,`${o}.no`,t)):t.push(`${o}: kind`);}let s=[];wl(e,s);for(let r of s)Su.test(r)&&t.push(`a long dash in "${r.slice(0,60)}"`);return t}export{Pi as ABILITIES,kr as ASSET_PACKS,wd as BACKGROUND_OPTIONS,Vn as BLOCKS,Gi as BOSS_DEFEATED,Vs as BOSS_SPAWNED,Ui as BRANCH_LEVEL,jt as Body,Nn as Bullet,zs as CHAPTERS,zl as CORE_EFFECTS,Ed as DECISION_MAX_LEVELS,Sd as DECISION_MAX_OPTIONS,Vl as DEFAULT_REWARDS,Yp as DEMO_SPEC,Xt as Drop,co as EFFECTS,hr as ENEMIES,Yo as ENGINES,Il as ENTRY_ID_RE,Zt as ExprError,Cn as FOES,Na as FUNCTIONS,$e as Foe,Ft as GIVE_UP,qn as Gem,Fr as HEROES,Ad as HERO_LOOK_OPTIONS,cn as Jumper,Dd as KIT_PALETTES,$d as KNOBS,xu as KNOB_CATALOG,Id as KNOB_CATALOG_VERSION,Ol as KNOB_LISTS,Wl as KNOWN_SYSTEMS,lr as LEVELS_PER_WORLD,Ni as LEVEL_CLEARED,Yi as LEVEL_MAPS,zi as LEVEL_UP,uo as LINKS,du as LOOK_RUNTIME_IDS,Qa as M3_CHARACTER,ko as M3_ELEMENTS,ja as M3_ENEMIES,Lr as M3_HEROES,is as M3_LEVELS,xo as M3_LEVELS_PER_WORLD,as as M3_LEVEL_DEFS,sc as M3_META,ei as M3_META_STATS,Dn as M3_OBSTACLES,qa as M3_PIECES,Xa as M3_SKILLS,or as M3_SPECIALS,nc as M3_WORLDS,Ya as M3_WORLD_STARS,qi as MAPS,Sn as MAP_COLS,En as MAP_ROWS,Qt as MAX_LEVEL,$s as MAX_PASSIVES,Ns as MAX_WEAPONS,Bi as META_CHARACTER,$i as META_STATS,sr as MG_BOARDS,_o as MG_CHAINS,Si as MG_CHARACTER,mc as MG_COLS,Nr as MG_HEROES,Ms as MG_LEVELS,Ir as MG_LEVELS_PER_WORLD,Es as MG_LEVEL_DEFS,bc as MG_META,Ei as MG_META_STATS,rn as MG_OBSTACLES,Rs as MG_REVIVE_ENERGY,yc as MG_ROWS,vi as MG_SKILLS,yi as MG_SPECIAL_ITEMS,gc as MG_WORLDS,xi as MG_WORLD_STARS,To as MergeItem,mr as Missile,es as OBSTACLE_KINDS,Lc as Order,Gr as PASSIVES,Bs as PASSIVE_IDS,Ul as PIECE_COLORS,Ci as PLATFORMER_CHARACTER,Vr as PLATFORMER_HEROES,Ps as PLATFORMER_LEVELS,Nc as PLATFORMER_META,Ii as PLATFORMER_META_STATS,ka as PLATFORM_LINKS,so as PLATFORM_PACKS,kd as PLATFORM_PRESETS,fn as POWERS,go as POWER_IDS,Gn as PRESETS,Hc as REROLL_GEMS,Kt as REVIVE,Wc as REVIVE_GEMS,Gt as REVIVE_OFFER,ws as ROOMS,Lt as ROOM_ROWS,zt as ROUND_ENDED,Bt as ROUND_OVER,$t as ROUND_STARTED,Ka as RUNNER_CHARACTER,Dr as RUNNER_HEROES,yo as RUNNER_LEVELS,Xl as RUNNER_META,Fa as RUNNER_META_STATS,Te as Raider,xt as RoadItem,On as Runner,Lo as SELL_SHARE,Wt as SHOW_START,Cd as SOUND_SET_OPTIONS,ho as SPEC_VERSION,qr as SPELLS,Ga as START_ROUND,Vc as SURVIVORS_META,fr as Shot,hn as Soldier,Js as Spot,Hs as Survivor,Qi as TD_CHARACTER,Jr as TD_HEROES,Co as TD_LEVELS,xn as TD_LEVELS_PER_WORLD,Xc as TD_LIVES,Yc as TD_META,el as TD_META_STATS,js as TD_REVIVE_LIVES,ji as TD_WORLDS,Xi as TD_WORLD_STARS,Ks as TOWERS,No as TY_BUSINESSES,ll as TY_CHARACTER,Qr as TY_EVENTS,eo as TY_HEROES,Zr as TY_LEVELS,to as TY_LEVELS_PER_WORLD,gr as TY_LEVEL_DEFS,sd as TY_META,cl as TY_META_STATS,$o as TY_MILESTONES,oa as TY_REVIVE_SECONDS,ol as TY_SKILLS,ta as TY_UPGRADES,rd as TY_WORLDS,sl as TY_WORLD_STARS,lt as Thing,sn as Tower,ml as TyManager,Od as UI_THEMES,Hi as UPGRADE_PICK,Wi as UPGRADE_PICKED,Vi as UPGRADE_REROLL,nl as WAVE_STARTED,vn as WEAPONS,dr as WEAPON_IDS,Ai as WORLDS,Li as WORLD_STARS,Cs as abilitiesFor,He as act,rp as applyLink,tu as applyPatches,za as attachRules,Fn as boardOf,Kc as buildFromVar,Ki as buildToVar,Tn as cellAt,Qe as cellCenter,Kr as chapterOf,Ha as checkEconomy,$a as checkExpr,jo as checkRules,dn as compileExpr,pn as contentOf,vl as cozyPack,pp as createKitRegistry,Uo as createRegistry,_l as defenseBoostsLink,Rn as defineKind,en as enemyOf,Ba as evalNumber,gl as fantasyPack,Pr as findMatches,V as fx,Wa as hasErrors,ai as hasMove,fd as heroCharacterOf,Sl as heroUpgradeLink,ns as laneRunnerBlock,Tr as levelOf,Eo as m3EnemyOf,wr as m3LevelOf,os as m3SkillOf,Ja as m3StarsToEnter,vs as match3Block,bd as match3Preset,As as mergeBlock,vd as mergePreset,Or as metersOf,gn as mgChainOf,$r as mgLevelOf,Ss as mgSkillOf,wn as mgSpecialOf,_s as mgStarsFor,ki as mgStarsToEnter,Gl as migrateSpec,jr as mirrored,Fc as offerFromVar,Fi as offerToVar,np as packName,Ma as parseKnobPath,ru as patchTargets,_d as patchValue,Tt as placeBackdrop,Is as platformerBlock,Hr as platformerLevelOf,md as platformerPreset,xl as postApocalypsePack,El as puzzleCityLink,po as registerCoreEffects,Xp as registerPlatformKit,Xo as resolveParams,Qo as roundBlock,Ml as runnerCollectionLink,hd as runnerPreset,bl as sciFiPack,mo as scrollBackdrop,et as setPose,an as shortCash,Jp as specForPreset,wi as starsToEnter,up as startMode,Gs as survivorsBlock,yd as survivorsPreset,Yr as tdLevelOf,qs as tdStarsFor,Zi as tdStarsToEnter,Ji as tdWavesOf,Fs as towerArt,Zs as towerDefenseBlock,gd as towerDefensePreset,kn as towerOf,Po as towerSpent,wo as towerStats,Xr as traceMap,_r as trackControls,ba as tyBotTimeOf,yr as tyBusinessOf,Qc as tyEventOf,ro as tyLevelOf,na as tySkillOf,ra as tyStarsFor,al as tyStarsToEnter,va as tycoonBlock,xd as tycoonPreset,pd as tycoonStateOf,Eu as validateKnobCatalog,lp as validateSpec,Ie as viewOf};
|