@idosgames/game-kit 0.1.0 → 0.1.2
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 +70 -70
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,d){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 p=n(r.name);if((p.has(o.id)||(e?.has(r,o.id)??false))&&!d?.override)throw new Error(`registry: ${r.name} "${o.id}" is already defined (pass { override: true } to replace it)`);let M=Object.freeze({...o});return p.set(o.id,M),M},get(r,o){let d=t.get(r.name)?.get(o);return d||e?.get(r,o)},require(r,o){let d=s.get(r,o);if(!d)throw new Error(`registry: no ${r.name} "${o}"`);return d},has(r,o){return s.get(r,o)!==void 0},list(r){let o=new Map;for(let d of e?.list(r)??[])o.set(d.id,d);for(let[d,p]of t.get(r.name)??[])o.set(d,p);return [...o.values()].sort((d,p)=>d.id<p.id?-1:d.id>p.id?1:0)},extend(){return Uo(s)}};return s}var Jt=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,tt=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 Jt("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 Jt("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 Jt("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 Jt(`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=K=>{let z=s();return z.t==="op"&&z.v===K},d=K=>{let z=r();if(z.t!=="op"||z.v!==K)throw new Jt(`expected "${K}"`,e,z.at)},p=K=>{if(K>Ia)throw new Jt("formula is nested too deep",e,s().at);let z=v(0,K+1);if(!o("?"))return z;r();let ne=p(K+1);d(":");let ae=p(K+1);return {k:"cond",c:z,a:ne,b:ae}},v=(K,z)=>{if(z>Ia)throw new Jt("formula is nested too deep",e,s().at);let ne=M(z+1);for(;;){let ae=s();if(ae.t!=="op")break;let j=$l[ae.v];if(j===void 0||j<K)break;r();let ue=ae.v==="^"?v(j,z+1):v(j+1,z+1);ne={k:"bin",op:ae.v,a:ne,b:ue};}return ne},M=K=>{if(K>Ia)throw new Jt("formula is nested too deep",e,s().at);return o("-")||o("!")?{k:"un",op:r().v,a:v($l["^"],K+1)}:O(K+1)},O=K=>{let z=r();if(z.t==="num")return {k:"num",v:z.v};if(z.t==="str")return {k:"str",v:z.v};if(z.t==="op"&&z.v==="("){let ne=p(K+1);return d(")"),ne}if(z.t==="id"){if(z.v==="true")return {k:"bool",v:true};if(z.v==="false")return {k:"bool",v:false};if(o("(")){if(!Object.prototype.hasOwnProperty.call(Na,z.v))throw new Jt(`unknown function "${z.v}"`,e,z.at);r();let ne=[];if(!o(")"))for(;;){if(ne.push(p(K+1)),o(",")){r();continue}break}return d(")"),{k:"call",fn:z.v,args:ne}}return {k:"var",path:z.v.split(".")}}throw new Jt(z.t==="end"?"unexpected end":"unexpected token",e,z.at)},E=p(0),I=s();if(I.t!=="end")throw new Jt("unexpected token",e,I.at);return E}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 Yt(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==="-"?-tt(Yt(e.a,t)):!nr(Yt(e.a,t));case "cond":return nr(Yt(e.c,t))?Yt(e.a,t):Yt(e.b,t);case "call":return tt(Na[e.fn](...e.args.map(n=>tt(Yt(n,t)))));case "bin":{if(e.op==="&&")return nr(Yt(e.a,t))&&nr(Yt(e.b,t));if(e.op==="||")return nr(Yt(e.a,t))||nr(Yt(e.b,t));let n=Yt(e.a,t),s=Yt(e.b,t);switch(e.op){case "==":return typeof n=="string"||typeof s=="string"?String(n)===String(s):tt(n)===tt(s);case "!=":return typeof n=="string"||typeof s=="string"?String(n)!==String(s):tt(n)!==tt(s);case "<":return tt(n)<tt(s);case "<=":return tt(n)<=tt(s);case ">":return tt(n)>tt(s);case ">=":return tt(n)>=tt(s);case "+":return typeof n=="string"||typeof s=="string"?`${n}${s}`:tt(n)+tt(s);case "-":return tt(n)-tt(s);case "*":return tt(n)*tt(s);case "/":{let r=tt(s);return r===0?0:tt(n)/r}case "%":{let r=tt(s);return r===0?0:tt(n)%r}case "^":return tt(Math.pow(tt(n),tt(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 Jt("formula is too long",e,Nl);let n=Jd(e),s=new Set;Hn(n,s);let r={source:e,reads:[...s],eval:o=>Yt(n,o),num:o=>tt(Yt(n,o)),bool:o=>nr(Yt(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,d]of Object.entries(s))r[o]=typeof d=="string"?dn(d).eval(e.scope):d;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,d)=>{let p=`${n}.${d}`;if(!o||typeof o!="object"){s.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?s.push({level:"error",path:`${p}.id`,code:"RULE_ID",message:"a rule needs an id"}):r.has(o.id)?s.push({level:"error",path:`${p}.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:`${p}.on`,code:"RULE_TRIGGER",message:"a rule needs an event topic in `on`"}),o.when!==void 0)try{dn(String(o.when));}catch(v){s.push({level:"error",path:`${p}.when`,code:"RULE_FORMULA",message:v.message});}if(!Array.isArray(o.do)||o.do.length===0){s.push({level:"error",path:`${p}.do`,code:"RULE_EFFECTS",message:"a rule needs at least one effect"});return}o.do.forEach((v,M)=>{let O=`${p}.do.${M}`,E=typeof v?.type=="string"?t.get(co,v.type):void 0;if(!E){s.push({level:"error",path:`${O}.type`,code:"EFFECT_UNKNOWN",message:`unknown effect "${String(v?.type)}"`});return}for(let I of E.required??[])v[I]===void 0&&s.push({level:"error",path:`${O}.${I}`,code:"EFFECT_PARAM",message:`effect "${E.id}" needs "${I}"`});for(let I of E.formulas??[]){let K=v[I];if(typeof K=="string")try{dn(K);}catch(z){s.push({level:"error",path:`${O}.${I}`,code:"RULE_FORMULA",message:z.message});}}});});}function za(e,t,n,s={}){let r=t.map(p=>({def:p,...p.when!==void 0?{when:dn(p.when)}:{},effects:p.do.map(v=>({spec:v,def:n.require(co,v.type)})),hits:0,runs:0,lastRunAt:Number.NEGATIVE_INFINITY})),o=new Map;for(let p of r){let v=o.get(p.def.on)??[];v.push(p),o.set(p.def.on,v);}let d=[...o.entries()].map(([p,v])=>e.on(p,M=>{for(let O of v){if(O.def.once&&O.runs>0)continue;let E={event:M,vars:e.vars,tick:e.tick,time:e.time};if(O.when&&!O.when.bool(E)||(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 I={world:e,rule:O.def,event:M,scope:E,num:(K,z=0)=>typeof K=="number"||typeof K=="string"?Ba(K,E,z):z};for(let K of O.effects)try{K.def.run(I,K.spec);}catch(z){s.onError?.(O.def,z);}}}));return ()=>d.forEach(p=>p())}var Wa=e=>e.some(t=>t.level==="error");function Xo(e,t,n,s){let r={};for(let[o,d]of Object.entries(e))r[o]=d.default;if(!t)return r;for(let[o,d]of Object.entries(t)){let p=e[o],v=`${n}.${o}`;if(!p){s.push({level:"warning",path:v,code:"PARAM_UNKNOWN",message:`unknown parameter "${o}"`});continue}switch(p.type){case "number":{if(typeof d!="number"||!Number.isFinite(d)){s.push({level:"warning",path:v,code:"PARAM_TYPE",message:"expected a number, default used"});break}let M=p.integer?Math.round(d):d;p.min!==void 0&&M<p.min&&(M=p.min),p.max!==void 0&&M>p.max&&(M=p.max),M!==d&&s.push({level:"warning",path:v,code:"PARAM_CLAMPED",message:`${d} \u2192 ${M}`}),r[o]=M;break}case "enum":typeof d=="string"&&p.values.includes(d)?r[o]=d:s.push({level:"warning",path:v,code:"PARAM_ENUM",message:`not one of ${p.values.join(", ")}, default used`});break;case "boolean":typeof d=="boolean"?r[o]=d:s.push({level:"warning",path:v,code:"PARAM_TYPE",message:"expected true/false, default used"});break;case "string":if(typeof d=="string"){let M=p.maxLength??500;r[o]=d.length>M?d.slice(0,M):d,d.length>M&&s.push({level:"warning",path:v,code:"PARAM_CLAMPED",message:`cut to ${M} characters`});}else s.push({level:"warning",path:v,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(v=>v.id)),o=new Set(t.map(v=>v.id)),d=new Map,p=new Map;n.forEach((v,M)=>{let O=`flows.${M}`;o.has(v.resource)||s.push({level:"error",path:`${O}.resource`,code:"FLOW_RESOURCE_UNKNOWN",message:`no resource "${v.resource}"`});let E=ep.exec(v.by);E?Wl.includes(E[1])||s.push({level:"warning",path:`${O}.by`,code:"FLOW_SYSTEM_UNKNOWN",message:`"${v.by}" is not a platform system`}):r.has(v.by)||s.push({level:"error",path:`${O}.by`,code:"FLOW_BY_UNKNOWN",message:`"${v.by}" is neither a mode of the spec nor "system:<id>"`}),v.kind!=="source"&&v.kind!=="sink"&&s.push({level:"error",path:`${O}.kind`,code:"FLOW_KIND",message:'kind is "source" or "sink"'});let I=v.kind==="source"?d:p;I.set(v.resource,(I.get(v.resource)??0)+1);}),t.forEach((v,M)=>{let O=`resources.${M}`,E=d.get(v.id)??0,I=p.get(v.id)??0;E===0&&s.push({level:"error",path:O,code:"RESOURCE_NO_SOURCE",message:`nothing produces "${v.id}"`}),tp.has(v.kind)&&I===0&&s.push({level:"error",path:O,code:"RESOURCE_NO_SINK",message:`nothing spends "${v.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(p=>p.role==="core")??e.modes[0],d=o?n.get(Gn,o.preset)?.genre:void 0;return !d||!r.core.includes(d)?(s.push({level:"error",path:"link",code:"LINK_GENRE",message:`link "${t}" fits ${r.core.join(", ")}, not "${d??"?"}"`}),{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 d=new Set,p=[];o.forEach((j,ue)=>{let fe=`modes.${ue}`;if(!ut(j)){n.push({level:"error",path:fe,code:"MODE_SHAPE",message:"a mode must be an object"});return}typeof j.id!="string"||!Va.test(j.id)?n.push({level:"error",path:`${fe}.id`,code:"MODE_ID",message:"mode id: snake_case, starts with a letter"}):d.has(j.id)?n.push({level:"error",path:`${fe}.id`,code:"MODE_DUPLICATE",message:`mode "${j.id}" is defined twice`}):d.add(j.id);let ie=typeof j.preset=="string"?t.get(Gn,j.preset):void 0;if(!ie){n.push({level:"error",path:`${fe}.preset`,code:"MODE_PRESET_UNKNOWN",message:`no preset "${String(j.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)}`}),j.role!==void 0&&!["core","meta","embedded"].includes(j.role)&&n.push({level:"error",path:`${fe}.role`,code:"MODE_ROLE",message:"role is core, meta or embedded"});let xe=Xo(ie.params??{},ut(j.params)?j.params:void 0,`${fe}.params`,n),se={},_e=new Set(ie.blocks);for(let oe of ie.blocks){let me=t.get(Vn,oe);if(!me){n.push({level:"error",path:`${fe}.preset`,code:"PRESET_BLOCK_UNKNOWN",message:`preset "${ie.id}" uses unknown block "${oe}"`});continue}me.engines&&!me.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 Q of me.requires??[])_e.has(Q)||n.push({level:"error",path:`${fe}.preset`,code:"BLOCK_REQUIRES",message:`block "${oe}" needs "${Q}" in the same preset`});let Se={};for(let[Q,Re]of Object.entries(ie.blockParams?.[oe]??{})){let We=me.params?.[Q];if(typeof Re=="string"&&(We?.type==="number"||We?.type==="boolean"))try{let we=dn(Re).eval({params:xe});Se[Q]=We.type==="number"?Number(we):!!we;}catch(we){n.push({level:"error",path:`${fe}.preset`,code:"PRESET_FORMULA",message:`preset "${ie.id}", ${oe}.${Q}: ${we.message}`});}else Se[Q]=Re;}let Ee={...Se,...ut(j.blockParams)&&ut(j.blockParams[oe])?j.blockParams[oe]:{}};se[oe]=Xo(me.params??{},Ee,`${fe}.blockParams.${oe}`,n);}if(ut(j.blockParams))for(let oe of Object.keys(j.blockParams))_e.has(oe)||n.push({level:"warning",path:`${fe}.blockParams.${oe}`,code:"BLOCK_NOT_IN_PRESET",message:`preset "${ie.id}" has no block "${oe}"`});let Ae=[...ie.rules??[],...fo(j.rules)];jo(Ae,t,`${fe}.rules`,n);let be={};if(j.content!==void 0)if(!ut(j.content))n.push({level:"warning",path:`${fe}.content`,code:"CONTENT_SHAPE",message:"content is { kind: { without: [ids] } }; ignored"});else for(let[oe,me]of Object.entries(j.content)){let Se=ut(me)?me.without:void 0;Array.isArray(Se)&&Se.every(Ee=>typeof Ee=="string")?be[oe]=[...Se]:n.push({level:"warning",path:`${fe}.content.${oe}`,code:"CONTENT_SHAPE",message:"expected { without: [ids] }; ignored"});}p.push({id:j.id,role:j.role??(ue===0?"core":"meta"),preset:ie,params:xe,blockParams:se,rules:Ae,content:be});}),o.length>0&&!o.some((j,ue)=>ut(j)?(j.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 v=fo(r.resources),M=new Set;v.forEach((j,ue)=>{let fe=`resources.${ue}`;if(!ut(j)||typeof j.id!="string"||!Va.test(j.id)){n.push({level:"error",path:fe,code:"RESOURCE_ID",message:"resource id: snake_case, starts with a letter"});return}M.has(j.id)&&n.push({level:"error",path:`${fe}.id`,code:"RESOURCE_DUPLICATE",message:`resource "${j.id}" is defined twice`}),M.add(j.id),["currency","item","score","local"].includes(j.kind)||n.push({level:"error",path:`${fe}.kind`,code:"RESOURCE_KIND",message:"kind is currency, item, score or local"}),(j.kind==="currency"||j.kind==="item")&&j.ref!==void 0&&(typeof j.ref!="string"||j.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((j,ue)=>{if(typeof j?.amount=="string"){let fe=$a(j.amount);fe&&n.push({level:"error",path:`flows.${ue}.amount`,code:"FLOW_FORMULA",message:fe});}}),Ha(o.filter(ut),v.filter(j=>ut(j)&&typeof j.id=="string"),O.filter(ut),n);let E=fo(r.rules);jo(E,t,"rules",n);let I={};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[j,ue]of Object.entries(r.vars))Va.test(j)?typeof ue=="number"||typeof ue=="string"||typeof ue=="boolean"?I[j]=ue:n.push({level:"error",path:`vars.${j}`,code:"VAR_TYPE",message:"a var is a number, text or true/false"}):n.push({level:"error",path:`vars.${j}`,code:"VAR_NAME",message:"var name: snake_case"});let K=typeof r.assets=="string"&&r.assets?t.get(kr,r.assets):void 0;if(r.assets!==void 0&&!K&&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[j,ue]of Object.entries(r.palette))(typeof ue!="string"||!sp.test(ue))&&n.push({level:"warning",path:`palette.${j}`,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[j,ue]of Object.entries(r.texts)){if(ip.test(j)||n.push({level:"error",path:`texts.${j}`,code:"TEXT_KEY",message:"text key: lower case, digits, _ . -"}),!ut(ue)){n.push({level:"error",path:`texts.${j}`,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.${j}.${fe}`,code:"TEXT_LANG",message:"language code like en or pt-BR, value text"});ue.en===void 0&&n.push({level:"warning",path:`texts.${j}`,code:"TEXT_NO_EN",message:"no English text: other languages fall back to it"});}let z={...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 j=(fe,ie,xe)=>{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 _e=Math.min(Math.max(se,ie),xe);_e!==se&&n.push({level:"warning",path:`rewards.${fe}`,code:"PARAM_CLAMPED",message:`${se} \u2192 ${_e}`}),z[fe]=_e;};j("adMultiplier",1,10),j("vipMultiplier",1,20);let ue=r.rewards.window;ue!==void 0&&(typeof ue=="string"&&/^[A-Za-z0-9_-]{1,64}$/.test(ue)?z.window=ue:n.push({level:"warning",path:"rewards.window",code:"PARAM_TYPE",message:"expected a window id, default used"}));}let ne=r.multiplayer??"none";Hl.includes(ne)||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:p,resources:v,flows:O,rules:E,vars:I,rewards:z,multiplayer:ne,palette:i({...K?.palette,...ut(r.palette)?r.palette:{}}),texts:dp(K?.texts,ut(r.texts)?r.texts:void 0),look:{style:K?K.style??K.id:m.style,cast:cp({...l,...K?.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(d=>typeof d=="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[d,p]of Object.entries(o))typeof p=="string"&&((n[r]??={})[d]=p);return n}function pp(){let e=Uo();return po(e),e}function up(e,t,n,s={}){let r=e.modes.find(p=>p.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 p of r.preset.blocks)n.require(Vn,p).setup?.({world:o,spec:e,mode:r,params:r.blockParams[p]??{},registry:n});let d=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:d}}var Ce=e=>({w:Number(e.vars.view_w??720),h:Number(e.vars.view_h??1280)}),Je=e=>e.vars.state==="playing",Kn=e=>e.vars.started_tick===e.tick,Fe=(e,t,n)=>{let s=Number(e.vars[t]??0)+n;return e.vars[t]=s,s},nn=(e,t)=>Number(e[t]);function Mt(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 nt=(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)),d=(e.w-o*t)/2,p=e.h*s.top+(r-o*n)/2;return {cols:t,rows:n,cell:o,left:d,top:p}}var Ze=(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")}`},G=(e,t)=>e.emit(n,t),Mr=b("kit.backdrop");function Ot(e,t,n,s={}){for(let O of e.query(Mr))e.destroy(O);let r=Ce(e),o=(O,E,I,K)=>Mt(e,E,I,K,{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 E=e.rng.stream("backdrop"),I=Math.round(r.w*r.h/52e3),K=Math.min(r.w,r.h);for(let z=0;z<I;z++){let ne=K*E.range(.06,.1);o(O,E.range(0,r.w),E.range(0,r.h),{shape:"sprite",art:`decor${E.int(1,4)}`,w:ne,h:ne,depth:-95});}return}let d=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 p=Math.min(r.w,r.h)*.34;o(.02,r.w*.74,d*.3,{shape:"sprite",art:"sun",w:p,h:p,depth:-99});let v=Math.min(r.h*.32,r.w*.55);o(.12,r.w/2,d-v/2,{shape:"tile",art:"far",w:r.w,h:v,depth:-90});let M=v*.62;o(.4,r.w/2,d-M/2+2,{shape:"tile",art:"near",w:r.w,h:M,depth:-80}),t==="board"?o(0,r.w/2,(r.h+d)/2,{shape:"tile",art:"ground",w:r.w,h:r.h-d+4,unit:v*.7,depth:-79}):o(0,r.w/2,(r.h+d)/2,{shape:"rect",w:r.w,h:r.h-d,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=Ce(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 d=e$1.need(o,f);if(d.shape==="tile"){d.scrollX=(d.scrollX??0)+t,d.scrollY=(d.scrollY??0)+n;continue}let p=e$1.need(o,e);p.x-=t,p.y-=n,p.x<-r?p.x+=s.w+2*r:p.x>s.w+r&&(p.x-=s.w+2*r),p.y<-r?p.y+=s.h+2*r:p.y>s.h+r&&(p.y-=s.h+2*r);}}function Qe(e,t,n){let s=e.get(t,f);s?.shape==="actor"&&(s.pose=n);}function ze(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 d=s.need(o,Er);d.left-=r;let p=s.get(o,f);p&&(p.alpha=Math.max(0,Math.min(1,d.left/d.total*2))),d.left<=0&&s.destroy(o);}}}));}var Ht=(e,t,n=5)=>n+t/Math.max(1,Ce(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){Dt(e$1);let o=r??Math.min(Ce(e$1).w,Ce(e$1).h)*.13,d={kind:t,ax:n.x,ay:n.y,bx:s.x,by:s.y,size:o,t:0},p=Jo(n.x,n.y,o);Mt(e$1,n.x,n.y,{shape:"circle",r:o*.22,color:"#ffffff",alpha:0,depth:89},{type:Sr,data:{...d,part:"ring"}}),Mt(e$1,p.x,p.y,{shape:"sprite",art:"hand",w:o,h:o,alpha:0,depth:90},{type:Sr,data:{...d,part:"hand"}}),!Fl.has(e$1)&&(Fl.add(e$1),e$1.addSystem({id:"kit.hints",order:95,run(v,M){for(let O of v.query(Sr)){let E=v.need(O,Sr);E.t+=M;let I=v.need(O,e),K=v.need(O,f);if(E.kind==="tap"){let z=E.t%1.2/1.2,ne=z>.35&&z<.55;if(E.part==="hand"){let ae=Jo(E.ax,E.ay+(ne?E.size*.06:0),E.size);I.x=ae.x,I.y=ae.y,I.scale=ne?.9:1,K.alpha=Math.min(1,E.t*4);}else {let ae=z<.4?0:(z-.4)/.6;I.scale=1+ae*2.2,K.alpha=z<.4?0:.55*(1-ae);}}else if(E.kind==="swipe"){let z=E.t%1.6/1.6,ne=z<.15?0:z>.75?1:(z-.15)/.6,ae=ne*ne*(3-2*ne),j=E.ax+(E.bx-E.ax)*ae,ue=E.ay+(E.by-E.ay)*ae;if(E.part==="hand"){let fe=Jo(j,ue,E.size);I.x=fe.x,I.y=fe.y,K.alpha=z<.1?z*10:z>.85?Math.max(0,(1-z)/.15):1;}else I.x=j,I.y=ue,K.alpha=z>.15&&z<.8?.35:0;}else {let z=E.t*3,ne=E.ax+Math.cos(z)*E.bx,ae=E.ay+Math.sin(z)*E.bx;if(E.part==="hand"){let j=Jo(ne,ae,E.size);I.x=j.x,I.y=j.y,K.alpha=Math.min(1,E.t*3);}else I.x=ne,I.y=ae,K.alpha=.3;}}}}));}function Dt(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,Dt(e));}var Rr=b("round.start"),Nt="round-started",$t="round-over",Bt="round-ended",Ga="start-round",zt="show-start",Vt="revive-offer",Gt="revive",Kt="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 p of s.query(Rr))s.destroy(p);if(s.vars.state!=="ready")return;let r=Ce(s),o=Math.min(r.w,r.h)*.26,d={x:r.w/2,y:r.h*.55};Mt(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}}),Mt(s,d.x,d.y,{shape:"sprite",art:"play",w:o,h:o,color:"accent",depth:85},{type:Rr,data:{t:0}}),ft(s,"tap",{x:d.x+o*.12,y:d.y+o*.1});},n=()=>{for(let s of e$1.query(Rr))e$1.destroy(s);Dt(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(Nt,{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(zt,()=>{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 d=s.need(o,Rr);d.t<0||(d.t+=r,s.need(o,e).scale=1+.06*Math.sin(d.t*5));}}}),t(e$1),e$1.on($t,s=>{if(e$1.vars.state!=="playing")return;e$1.vars.state="ended",Dt(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(Bt,{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(p=>jl[p]<=n),o=es.find(p=>jl[p]===n)??null,d=330+t*120+s*220;return {level:n,length:Math.round(16e3+(n-1)*3e3),speed:d,topSpeed:d*(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"),wt=(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},_t={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"),d=null,p=f=>({...f,kinds:[...pn(n,"obstacles",f.kinds)]}),v=pn(n,"powers",go),M=p(Tr(1,s("difficulty"))),O=M.length,E=0,I=0,K=0,z=false,ne=false,ae=false,j$1=0,ue=0,fe=0,ie=0,xe=0,se=0,_e=0,Ae=3,be=0,oe=false,me=null,Se=new Map,Ee=new Map,Q=()=>Dr.find(f=>f.id===e$1.vars["meta:hero"])??Dr[0],Re=f=>(fn[f].seconds+bo(e$1,fn[f].var))*(Q().perk==="power"?1.25:1),We=()=>e$1.vars.reviving===true,we=()=>{for(let i of e$1.query(ts))e$1.destroy(i);let f$1=wt(e$1,r);Ot(e$1,"side",f$1.top+2);for(let i=0;i<r;i++){let u=e$1.create();e$1.set(u,ts,{index:i}),e$1.set(u,e,{x:f$1.viewW/2,y:f$1.top+f$1.laneH*(i+.5)}),e$1.set(u,f,{shape:"tile",art:"road",w:f$1.viewW,h:f$1.laneH,unit:f$1.laneH*1.28,depth:-20+i*.1});}let c=f$1.viewH-(f$1.top+f$1.laneH*r),y=e$1.create();e$1.set(y,ts,{index:-1}),e$1.set(y,e,{x:f$1.viewW/2,y:f$1.viewH-c/2+1}),e$1.set(y,f,{shape:"tile",art:"ground",w:f$1.viewW,h:c+2,unit:f$1.laneH*1.2,depth:-21});},ee=(f,c,y)=>Ar(f,c.lane)-c.alt-y/2,Le=(f,c,y,i,u)=>{let g=f.laneH,T=9+y;switch(c){case "wall":return {v:{shape:"sprite",art:"obstacle",w:i,h:g*_t.wall,depth:T},h:g*_t.wall};case "barrier":return {v:{shape:"sprite",art:"hurdle",w:i,h:g*_t.barrier,depth:T},h:g*_t.barrier};case "pit":return {v:{shape:"sprite",art:"pit",w:i,h:g*.42,depth:-19+y*.1+.05},h:-g*.42};case "mover":return {v:{shape:"actor",cast:"foe",h:g*1.5,pose:"run",facing:-1,depth:T},h:g*1.5};case "train":return {v:{shape:"sprite",art:"wagon",w:i,h:g*_t.train,depth:T},h:g*_t.train};case "ramp":return {v:{shape:"sprite",art:"ramp",w:i,h:g*_t.train,depth:T},h:g*_t.train};case "rock":return {v:{shape:"sprite",art:"shadow",w:i,h:g*.3,alpha:.5,depth:-19+y*.1+.06},h:-g*.3};case "coin":return {v:{shape:"sprite",art:"coin",w:i,h:i,depth:T+.2},h:i};case "power":return {v:{shape:"sprite",art:fn[u??"magnet"].art,color:fn[u??"magnet"].color,w:i,h:i,depth:T+.2},h:i};case "finish":return {v:{shape:"sprite",art:"finish",w:g*.7,h:g*r+g*.9,depth:8},h:0}}},ye=(f$1,c,y,i={})=>{let u=wt(e$1,r),g=i.size??(f$1==="coin"?u.laneH*.42:f$1==="power"?u.laneH*.62:u.laneH*.85),T=i.alt??(f$1==="coin"?u.laneH*.5:f$1==="power"?u.laneH*.6:0),w=e$1.create();e$1.set(w,xt,{lane:c,kind:f$1,size:g,alt:T,...i.power!==void 0?{power:i.power}:{}});let{v:N,h:$}=Le(u,f$1,c,g,i.power),te=u.viewW+u.laneH+g/2+y,le=f$1==="finish"?u.top+u.laneH*r/2:$<0?Ar(u,c)+$/2+u.laneH*.08:ee(u,{lane:c,alt:T},$);return e$1.set(w,e,{x:te,y:le}),e$1.set(w,f,N),f$1==="coin"&&ie++,w},ke=(f,c,y,i)=>{let u=wt(e$1,r);for(let g=0;g<y;g++)ye("coin",f,c+g*u.laneH*.75,i!==void 0?{alt:i}:{});},Ue=(f,c)=>{let y=1+bo(e$1,"meta:luck");o.chance(Math.min(.9,s("powerRate")*y))&&ye("power",f,c,{power:o.weighted(v,i=>fn[i].weight)});},Y=f=>M.kinds.includes(f),Me=()=>[...Array(r).keys()],Xe=f=>{let c=["wall",...Y("barrier")?["barrier"]:[],...Y("pit")?["pit"]:[]],y=new Map;for(let g of Me())o.chance(M.density)&&y.set(g,o.pick(c));y.size>=r&&y.delete(o.int(0,r-1));let i=wt(e$1,r);for(let[g,T]of y)ye(T,g,f,T==="pit"?{size:i.laneH*1.25}:{});let u=Me().filter(g=>!y.has(g));u.length>0&&o.chance(s("coinRate"))&&ke(o.pick(u),f-i.laneH,3);for(let[g,T]of y)(T==="barrier"||T==="pit")&&o.chance(.5)&&ke(g,f-i.laneH*.75,3,i.laneH*1.3);},at=()=>{let c=wt(e$1,r).laneH,y=u=>u+Math.round(M.density*3),i=[{id:"scatter",weight:3,make:u=>{let g=y(2);for(let T=0;T<g;T++)Xe(T*u);return Ue(o.int(0,r-1),g*u-u/2),g*u}},{id:"rest",weight:1,make:u=>{let g=o.int(0,r-1);for(let T=0;T<4;T++)ke(g,T*u*.8,3),g=Math.max(0,Math.min(r-1,g+(o.chance(.5)?1:-1)));return Ue(g,4*u*.8),4*u*.8}}];return M.level>=3&&i.push({id:"corridor",weight:2,make:u=>{let g=y(3),T=o.int(0,r-1);for(let w=0;w<g;w++){for(let N of Me())N!==T&&ye("wall",N,w*u);ke(T,w*u-c*.4,2),w%2===1&&(T=Math.max(0,Math.min(r-1,T+(o.chance(.5)?1:-1))));}return g*u}}),(Y("barrier")||Y("pit"))&&i.push({id:"hurdles",weight:2,make:()=>{let u=Math.max(c*3.6,M.speed*s("jumpTime")*1.45),g=2+Math.round(M.density*2),T=[...Y("barrier")?["barrier"]:[],...Y("pit")?["pit"]:[]],w=o.int(0,r-1);for(let N=0;N<g;N++){for(let $ of Me()){let te=o.pick(T);ye(te,$,N*u,te==="pit"?{size:c*1.25}:{});}ke(w,N*u-c*.75,3,c*1.3);}return g*u}}),Y("train")&&i.push({id:"train",weight:2,make:u=>{let g=o.int(0,r-1),T=c*o.int(5,8),w=o.chance(.75),N=c*1.4;w&&ye("ramp",g,0,{size:N}),ye("train",g,(w?N:0)+T/2-c*.42,{size:T}),w&&ke(g,N+c*.4,Math.floor(T/(c*.75))-1,c*(_t.train+.5));let $=Me().filter(le=>le!==g),te=o.pick($);if(o.chance(.5))ye("train",te,u*.5+T/2,{size:T*.8});else for(let le=0;le<2;le++)ye("wall",te,u*(.5+le*1.4));return (w?N:0)+T+u*.5}}),Y("mover")&&i.push({id:"movers",weight:1.5,make:u=>{let g=1+(o.chance(M.density)?1:0),T=new Set;for(let N=0;N<g;N++){let $=o.int(0,r-1);T.has($)&&($=($+1)%r),T.add($),ye("mover",$,N*u*1.6,{size:c*.6});}let w=Me().filter(N=>!T.has(N));return w.length>0&&ke(o.pick(w),0,4),g*u*1.6}}),Y("rock")&&i.push({id:"rocks",weight:1.5,make:u=>{let g=2+(o.chance(M.density)?1:0);for(let T=0;T<g;T++){let w=o.int(0,r-1);ye("rock",w,T*u*1.2,{size:c*.9});let N=Me().filter($=>$!==w);ke(o.pick(N),T*u*1.2,2);}return g*u*1.2}}),i},Te=f=>{let c=wt(e$1,r),y=Math.floor(r/2),i=M.fresh;if(i===null||i==="wall")return 0;if(i==="barrier"||i==="pit"){for(let u=0;u<3;u++)ye(i,y,u*f*1.6,i==="pit"?{size:c.laneH*1.25}:{}),ke(y,u*f*1.6-c.laneH*.75,3,c.laneH*1.3);return 3*f*1.6}return i==="train"?(ye("ramp",y,0,{size:c.laneH*1.4}),ye("train",y,c.laneH*1.4+c.laneH*3-c.laneH*.42,{size:c.laneH*6}),ke(y,c.laneH*1.8,7,c.laneH*(_t.train+.5)),c.laneH*8+f):(ye(i,y,0,{size:i==="mover"?c.laneH*.6:c.laneH*.9}),f*1.5)},Wt=()=>{let f=Math.max(wt(e$1,r).laneH*2.1,300-M.density*110),c;if(!oe&&M.fresh!==null&&M.fresh!=="wall")oe=true,c=Te(f);else {let y=at();c=(K>0&&K%4===3?y.find(u=>u.id==="rest"):o.weighted(y,u=>u.weight)).make(f);}K++,I=Number(e$1.vars.distance??0)+c+f*1.2;},Ge=(f,c,y)=>{let i=f.laneH*1.05;return {x:f.playerX,y:Ar(f,c)-y-i/2,h:i}},qe=()=>{let f$1=wt(e$1,r);(d===null||!e$1.isAlive(d))&&(d=e$1.create(),e$1.set(d,On,{lane:Math.floor(r/2),size:f$1.laneH*.5,alt:0,vy:0}),e$1.set(d,f,{shape:"actor",cast:Q().cast,h:0,pose:"idle",depth:10}));let c=e$1.need(d,On);c.size=f$1.laneH*.5;let y=Ge(f$1,c.lane,c.alt);e$1.set(d,e,{x:y.x,y:y.y});let i=e$1.need(d,f);i.shape==="actor"&&(i.cast=Q().cast,i.h=y.h,i.depth=10+c.lane);},et=()=>{for(let c of e$1.query(xt))e$1.destroy(c);Ke(),M=p(Tr(bo(e$1,"meta:chapter")||1,s("difficulty"))),O=Math.round(M.length*s("lengthScale")),Ae=s("lives")+(Q().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=M.level,e$1.vars.speed=M.speed,e$1.vars.lives=Ae,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,I=wt(e$1,r).laneH*2,K=0,z=false,ne=false,ae=false,j$1=0,ue=0,fe=0,ie=0,xe=0,se=0,_e=0,be=0,oe=false,me=null,Se.clear();let f=bo(e$1,"meta:head_start");if(f>0&&Se.set("dash",f),d!==null&&e$1.isAlive(d)){let c=e$1.need(d,On);c.lane=Math.floor(r/2),c.alt=0,c.vy=0;}qe();},rt=f=>{if(!Je(e$1)||We()||d===null)return;let c=e$1.need(d,On),y=Math.min(r-1,Math.max(0,c.lane+f));y!==c.lane&&(vt(e$1,"runner-lanes"),me=c.lane),c.lane=y;},lt=()=>{let f=wt(e$1,r),c=s("jumpTime");return 8*f.laneH*_t.jump/(c*c)},ct=(f,c,y)=>{let i=wt(f,r),u=i.playerX,g=i.laneH*.22,T=0;for(let w of f.query(xt)){let N=f.need(w,xt);if(N.lane!==c||N.kind!=="train"&&N.kind!=="ramp")continue;let $=f.need(w,e),te=$.x-N.size/2,le=$.x+N.size/2;if(u+g<te||u-g>le)continue;let ge=i.laneH*_t.train;if(N.kind==="ramp")T=Math.max(T,ge*Math.max(0,Math.min(1,(u-te)/N.size)));else if(y>=ge-i.laneH*.12)T=Math.max(T,ge);else return null}return T},dt=()=>{if(!Je(e$1)||We()||d===null||Se.has("flight"))return;let f=e$1.need(d,On),c=ct(e$1,f.lane,f.alt)??0;f.alt-c>2||(f.vy=lt()*s("jumpTime")/2,_e++,vt(e$1,"runner-jump"),Dt(e$1),e$1.emit("jumped",{}),ze(e$1,d,"jump"));},ot=()=>{if(ht(e$1,"runner-lanes")||d===null)return;let f=wt(e$1,r),c=f.playerX+f.laneH*1.6,y=Ar(f,Math.floor(r/2))-f.laneH*.4;ft(e$1,"swipe",{x:c,y:y+f.laneH*.5},{x:c,y:y-f.laneH*.9},f.laneH);},Pe=(f$1,c,y,i)=>{let u=Ee.get(f$1);(u===void 0||!e$1.isAlive(u))&&(u=e$1.create(),e$1.set(u,Yl,{id:f$1}),Ee.set(f$1,u)),e$1.set(u,e,{x:c,y}),e$1.set(u,f,i);},bt=f=>{let c=Ee.get(f);c!==void 0&&e$1.destroy(c),Ee.delete(f);};function Ke(){for(let f of Ee.values())e$1.destroy(f);Ee.clear(),nt(e$1,Yl);}let At=(f,c,y,i,u,g,T,w=41)=>{let N=Math.max(0,Math.min(1,Math.round(g*100)/100));Pe(`${f}:bg`,c,y,{shape:"rect",w:i,h:u,color:"#000000",alpha:.45,radius:u/2,depth:w});let $=Math.max(0,(i-4)*N);$<1?bt(`${f}:fill`):Pe(`${f}:fill`,c-(i-4)/2+$/2,y,{shape:"rect",w:$,h:u-4,color:T,radius:(u-4)/2,depth:w+.01});},en=f=>{let c=wt(f,r),y=Math.min(c.viewW,c.viewH),i=c.viewH*.085,u=c.viewW*.66,g=Math.max(10,y*.026),T=Number(f.vars.distance??0)/Math.max(1,O);At("way",c.viewW/2,i,u,g,T,"accent");let w=y*.055;Pe("flag",c.viewW/2+u/2+w*.45,i-w*.25,{shape:"sprite",art:"flag",w,h:w,depth:42}),Pe("lvl",c.viewW/2-u/2-y*.05,i,{shape:"text",text:`${M.level}`,size:Math.round(y*.04),color:"text",bold:true,depth:42});let N=i+y*.07,$=y*.05,te=Number(f.vars.lives??0);for(let Z=0;Z<Ae;Z++)Pe(`h${Z}`,c.viewW*.07+Z*$*1.1,N,{shape:"sprite",art:"heart",w:$,h:$,alpha:Z<te?1:.25,depth:42});for(let Z=Ae;Z<10;Z++)bt(`h${Z}`);let le=y*.045,ge=String(f.vars.coins??0);Pe("coin:i",c.viewW*.93-ge.length*le*.6-le*.7,N,{shape:"sprite",art:"coin",w:le,h:le,depth:42}),Pe("coin",c.viewW*.93-ge.length*le*.6/2,N,{shape:"text",text:ge,size:Math.round(le),color:"text",bold:true,depth:42});let He=Number(f.vars.mult??1);He>1?Pe("mult",c.viewW*.9,N+le*1.2,{shape:"text",text:`x${He}`,size:Math.round(le*1.05),color:"coin",bold:true,depth:42}):bt("mult");let je=y*.055,st=0;for(let Z of go){let H=Se.get(Z);if(H===void 0){bt(`p:${Z}`),bt(`pb:${Z}:bg`),bt(`pb:${Z}:fill`);continue}let X=c.viewW*.07+st*je*1.25,q=N+$*1.25;Pe(`p:${Z}`,X,q,{shape:"sprite",art:fn[Z].art,color:fn[Z].color,w:je,h:je,depth:42}),At(`pb:${Z}`,X,q+je*.7,je,Math.max(6,y*.011),H/Math.max(.1,Re(Z)),"coin",42),st++;}},Rt=(f,c)=>{if(!Je(f)||ne)return;ne=true;let y=c==="cleared",i=y?1+(ie>0&&xe>=ie*M.coinStar?1:0)+(se===0?1:0):0;f.vars.stars=i,y&&f.vars["meta:first_clear"]===true&&Fe(f,"coins",M.firstClearGold);let u=Or(Number(f.vars.distance??0));f.vars.score=be+u*2+(y?500*i:0),f.vars.reviving=false,f.emit($t,{reason:c,stats:{chapter:M.level,seconds:Math.floor(j$1),cleared:y,stars:i,coins:xe,meters:u,jumps:_e,hits:se}});},tn=f=>{if(f.vars.revive_ready===true&&!ae){f.vars.reviving=true,Dt(f),f.emit(Vt,{});return}Rt(f,"crashed");},Et=f=>{if(!We())return;ae=true,f.vars.reviving=false,f.vars.lives=Math.max(1,Math.ceil(Ae/2)),E=2.5,Se.set("shield",Math.max(Se.get("shield")??0,3));let c=wt(f,r);for(let y of f.query(xt)){let i=f.need(y,xt);if(i.kind==="coin"||i.kind==="power"||i.kind==="finish")continue;let u=f.need(y,e);u.x-i.size/2<c.playerX+c.laneH*6&&(G(f,{kind:"burst",x:u.x,y:u.y,color:"coin",n:8,size:c.laneH*.6}),f.destroy(y));}if(d!==null){let y=f.need(d,On);y.alt=0,y.vy=0,Qe(f,d,"run");let i=f.need(d,e);G(f,{kind:"ring",x:i.x,y:i.y,color:"coin",size:c.laneH*4});}G(f,{kind:"flash",color:"coin"});},L=(f,c)=>{if(d===null)return;let y=f.need(c,e),i=wt(f,r);if(Se.has("dash")){G(f,{kind:"burst",x:y.x,y:y.y,color:"accent",n:14,size:i.laneH*.8}),G(f,{kind:"shake",power:.6}),f.need(c,xt).kind!=="pit"&&f.destroy(c);return}if(E>0)return;if(Se.has("shield")){Se.delete("shield"),E=.8,G(f,{kind:"ring",x:i.playerX,y:f.need(d,e).y,color:"muted",size:i.laneH*2}),f.need(c,xt).kind!=="pit"&&f.destroy(c);return}se++,ue=0,f.vars.mult=1;let u=Number(f.vars.lives??1)-1;f.vars.lives=u,f.emit("player-hit",{lives:u}),G(f,{kind:"burst",x:y.x,y:y.y,color:"danger",n:14,size:i.laneH*.9}),G(f,{kind:"shake",power:1.5}),ze(f,d,"hit"),f.need(c,xt).kind!=="pit"&&f.destroy(c),E=s("graceTime"),u<=0&&tn(f);},B=(f,c)=>{let y=f.need(c,xt),i=f.need(c,e),u=wt(f,r);if(y.kind==="power"&&y.power!==void 0){Se.set(y.power,Re(y.power)),f.emit("power-up",{id:y.power}),G(f,{kind:"ring",x:i.x,y:i.y,color:fn[y.power].color,size:u.laneH*1.6}),f.destroy(c);return}ue++;let g=Math.min(5,1+Math.floor(ue/12));g>Number(f.vars.mult??1)&&G(f,{kind:"pop",x:u.playerX,y:i.y-u.laneH,text:`x${g}`,color:"coin",size:Math.round(u.laneH*.42)}),f.vars.mult=g;let T=(Se.has("double")?2:1)*(1+bo(f,"meta:greed"));fe+=T;let w=Math.floor(fe);fe-=w,w>0&&Fe(f,"coins",w),xe++,be+=Math.round(T*s("coinScore")*g),f.emit("coin-collected",{value:T}),G(f,{kind:"burst",x:i.x,y:i.y,color:"coin",n:6,size:y.size*1.3}),f.destroy(c);};e$1.on(j,f=>{let c=f;e$1.vars.started_tick!==e$1.tick&&(c.type==="swipe"&&(c.dir==="up"||c.dir==="down")?rt(c.dir==="up"?-1:1):c.type==="swipe"&&c.dir==="right"?dt():c.type==="key"&&(c.key==="left"||c.key==="up")?rt(-1):c.type==="key"&&(c.key==="right"||c.key==="down")?rt(1):(c.type==="key"&&c.key==="action"||c.type==="tap")&&dt());}),e$1.on(Nt,()=>{et(),d!==null&&Qe(e$1,d,"run"),ot();}),e$1.on(zt,et),e$1.on(Gt,()=>Et(e$1)),e$1.on(Kt,()=>{We()&&(e$1.vars.reviving=false,Rt(e$1,"crashed"));}),e$1.on(Bt,f=>{d!==null&&e$1.isAlive(d)&&Qe(e$1,d,f.reason==="cleared"?"dance":"die");for(let c of e$1.query(xt))e$1.need(c,xt).kind==="mover"&&Qe(e$1,c,"idle");Ke();}),e$1.on(k,()=>{we(),d!==null&&qe();let f$1=wt(e$1,r);for(let c of e$1.query(xt)){let y=e$1.need(c,xt),{v:i,h:u}=Le(f$1,y.kind,y.lane,y.size,y.power);e$1.set(c,f,i),e$1.need(c,e).y=y.kind==="finish"?f$1.top+f$1.laneH*r/2:u<0?Ar(f$1,y.lane)+u/2+f$1.laneH*.08:ee(f$1,y,u);}}),e$1.addSystem({id:"lane-runner",order:0,run(f$1,c){if(!Je(f$1)||d===null||ne||We())return;let y=wt(f$1,r),i=y.laneH;j$1+=c;let u=Number(f$1.vars.distance??0),T=(M.speed+(M.topSpeed-M.speed)*Math.min(1,u/Math.max(1,O)))*(Se.has("dash")?1.6:1);f$1.vars.speed=Math.round(T);let w=T*c;f$1.vars.distance=u+w,f$1.vars.meters=Or(u+w),E>0&&(E=Math.max(0,E-c));for(let[Z,H]of [...Se])H-c<=0?(Se.delete(Z),Z==="flight"&&(E=Math.max(E,.8))):Se.set(Z,H-c);mo(f$1,w);for(let Z of f$1.query(ts)){let H=f$1.need(Z,f);H.shape==="tile"&&(H.scrollX=(H.scrollX??0)+w);}let N=O-(u+w);if(!z&&N<=y.viewW-y.playerX+i){z=true;let Z=ye("finish",0,0);f$1.need(Z,e).x=y.playerX+N;}else !z&&u>=I&&N>y.viewW&&Wt();let $=f$1.need(d,On),te=Se.has("flight");if(te)$.alt+=(i*_t.flight-$.alt)*Math.min(1,c*6),$.vy=0,Math.floor((u+w)/(i*.9))!==Math.floor(u/(i*.9))&&ye("coin",$.lane,0,{alt:i*(_t.flight+.4)});else {$.vy-=lt()*c,$.alt+=$.vy*c;let Z=ct(f$1,$.lane,$.alt);if(Z===null){let H=f$1.query(xt).find(X=>{let q=f$1.need(X,xt);return q.lane===$.lane&&q.kind==="train"&&Math.abs(f$1.need(X,e).x-y.playerX)<q.size/2+i*.22});if(H!==void 0&&L(f$1,H),ne||We())return;$.alt=Math.max(0,$.alt);}else $.alt<=Z&&($.alt=Z,$.vy=0);}let le=f$1.need(d,e),ge=Ge(y,$.lane,$.alt);le.y+=(ge.y-le.y)*Math.min(1,c*14),le.x=ge.x,me!==null&&Math.abs(ge.y-le.y)<i*.15&&(me=null);let He=f$1.need(d,f);He.shape==="actor"&&(He.alpha=E>0&&Math.floor(f$1.time*12)%2===0?.35:1,He.depth=10+$.lane+.5,He.speed=T,He.pose=$.alt>2&&$.vy!==0?"air":"run");let je=i*.24,st=Se.has("magnet");for(let Z of f$1.query(xt)){if(!f$1.isAlive(Z)||!f$1.has(Z,xt))continue;let H=f$1.need(Z,xt),X=f$1.need(Z,e);if(X.x-=w,H.kind==="mover"){if(X.x-=T*.35*c,H.to===void 0&&X.x-y.playerX<i*6&&X.x-y.playerX>i*3){let S=[H.lane-1,H.lane+1].filter(a=>a>=0&&a<r);H.to=$.lane!==H.lane&&S.includes($.lane)?$.lane:o.pick(S),H.warn=.45;}if(H.warn!==void 0&&H.warn>0){H.warn-=c;let S=f$1.need(Z,f);S.alpha=Math.floor(f$1.time*14)%2===0?.4:1,H.warn<=0&&H.to!==void 0&&(H.lane=H.to,S.alpha=1,S.depth=9+H.lane);}X.y+=(ee(y,H,i*1.5)-X.y)*Math.min(1,c*10);}if(H.kind==="rock"&&!H.landed&&X.x-y.playerX<i*2.6&&(H.landed=true,f$1.set(Z,f,{shape:"sprite",art:"rock",w:H.size,h:i*_t.rock,depth:9+H.lane}),X.y=Ar(y,H.lane)-i*_t.rock/2,G(f$1,{kind:"burst",x:X.x,y:X.y+i*.4,color:"muted",n:10,size:i*.7}),G(f$1,{kind:"shake",power:.5})),H.kind==="rock"&&!H.landed){let S=f$1.need(Z,f);S.shape==="sprite"&&(S.alpha=.35+.3*Math.abs(Math.sin(f$1.time*6)));}if(H.kind==="power"&&(X.y=ee(y,H,H.size)+Math.sin(f$1.time*4+X.x*.01)*i*.06),X.x+H.size/2<-i*2){f$1.destroy(Z);continue}if(H.kind==="finish"){if(X.x<=y.playerX){G(f$1,{kind:"flash",color:"coin"}),Rt(f$1,"cleared");return}continue}if(H.kind==="coin"&&st&&X.x>y.playerX-i*.5&&X.x<y.playerX+i*4&&(H.pulled=true),H.kind==="coin"&&H.pulled){X.x+=(y.playerX-X.x)*Math.min(1,c*10),X.y+=(le.y-X.y)*Math.min(1,c*10),Math.hypot(X.x-y.playerX,X.y-le.y)<i*.4&&B(f$1,Z);continue}if(H.kind==="coin"||H.kind==="power"){if(H.lane!==$.lane&&H.lane!==me)continue;let S=je+H.size/2+i*.06;if(X.x-S>y.playerX||X.x+w+S<y.playerX)continue;let a=H.size/2+i*.08;(te||X.y+a>le.y-ge.h/2&&X.y-a<le.y+ge.h/2)&&B(f$1,Z);continue}let q=H.kind==="barrier"?H.size*.3:H.size/2;if(Math.abs(X.x-y.playerX)>je+q||H.lane!==$.lane||te||H.kind==="ramp"||H.kind==="train"||H.kind==="rock"&&!H.landed)continue;let x=H.kind==="wall"?_t.wall:H.kind==="barrier"?_t.barrier*.85:H.kind==="mover"?_t.mover:H.kind==="rock"?_t.rock:0;if(H.kind==="pit"?$.alt<2&&Math.abs(X.x-y.playerX)<H.size*.32&&L(f$1,Z):$.alt<i*x&&L(f$1,Z),ne||We())return}ht(f$1,"runner-jump")||f$1.query(xt).find(H=>{let X=f$1.need(H,xt),q=f$1.need(H,e).x-y.playerX;return (X.kind==="barrier"||X.kind==="pit")&&X.lane===$.lane&&q>i*1.5&&q<i*3.2})!==void 0&&!un(f$1)&&ft(f$1,"tap",{x:y.playerX+i*1.2,y:le.y}),f$1.vars.score=be+Or(u+w)*2,en(f$1);}}),we(),et();}};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}:{}}),Ft=(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)]),Ft("plain",3,"goblin"),mt("ice-mid",22,5,[kt("ice")]),mt("ring",20,5,[on(0,20),on(4,20)]),Ft("plain",3,"goblin","wolf"),mt("stones",22,5,[kt("stone"),on(1,15)]),mt("ice-low",25,5,[kt("ice")]),Ft("diamond",3,"wolf","orc"),Ft("plain",3,"troll"),mt("chains",24,5,[kt("chain")]),mt("plain",25,5,[vo(3)],3),Ft("plain",4,"frost-imp","goblin"),mt("cages",22,5,[kt("cage")]),mt("slime",25,5,[kt("slime")]),Ft("ice-mid",4,"orc","frost-imp"),mt("hourglass",24,5,[vo(3),on(2,20)],3),mt("ice-low",26,5,[kt("ice")]),Ft("plain",4,"spider","frost-imp","wolf"),Ft("plain",4,"frost-queen"),mt("ice-stone",26,5,[kt("ice"),kt("stone")]),mt("cross-holes",26,6,[on(0,20),on(3,20)]),Ft("chains",4,"spider","golem"),mt("fortress",28,5,[kt("ice"),kt("chain")]),mt("slime-cages",26,5,[kt("cage"),kt("slime")]),Ft("plain",4,"slime-beast","golem"),mt("diamond",28,5,[vo(3)],3),mt("ice-low",28,5,[kt("ice"),on(4,20)]),Ft("ring",5,"shaman","golem","spider"),Ft("plain",5,"spider-queen"),mt("fortress",28,6,[kt("ice"),kt("chain")]),mt("slime",28,5,[kt("slime"),vo(3)],3),Ft("ice-stone",5,"golem","shaman"),mt("ice-stone",28,6,[kt("ice"),kt("stone")]),mt("slime-cages",28,6,[kt("cage"),kt("slime")]),Ft("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)]),Ft("diamond",5,"golem","shaman","spider"),Ft("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(d=>Eo(d)?.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(d=>[...d].map(p=>{let v=s[p]??{};return {hole:v.hole===true,piece:null,under:v.under?{...v.under}:null,over:v.over?{...v.over}:null,block:v.block?{...v.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,d=Un(e,s-1,n)?.piece,p=Un(e,s-2,n)?.piece;d&&p&&d.color>=0&&d.color===p.color&&o.add(d.color);let v=Un(e,s,n-1)?.piece,M=Un(e,s,n-2)?.piece;v&&M&&v.color>=0&&v.color===M.color&&o.add(v.color);let O=e.colors.filter(I=>!o.has(I)),E=ps(e,O.length>0?O:e.colors);r.piece?r.piece.color=E:r.piece=cs(e,E);}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 d=e[r][o],p=1;for(;d!=null&&o+p<s&&e[r][o+p]===d;)p++;d!=null&&p>=3&&t.push({cells:Array.from({length:p},(v,M)=>[o+M,r]),dir:"h"}),o+=p;}for(let r=0;r<s;r++)for(let o=0;o<n;){let d=e[o][r],p=1;for(;d!=null&&o+p<n&&e[o+p][r]===d;)p++;d!=null&&p>=3&&t.push({cells:Array.from({length:p},(v,M)=>[r,o+M]),dir:"v"}),o+=p;}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 d=e[r[1]][r[0]];e[r[1]][r[0]]=e[o[1]][o[0]],e[o[1]][o[0]]=d;};for(let r=0;r<t;r++)for(let o=0;o<n;o++)for(let[d,p]of [[1,0],[0,1]]){if(o+d>=n||r+p>=t||e[r][o]===null||e[r+p][o+d]===null)continue;s([o,r],[o+d,r+p]);let v=Pr(e).size>0;if(s([o,r],[o+d,r+p]),v)return [[o,r],[o+d,r+p]]}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 d={col:s,row:n},p={col:s+r,row:n+o};if(!Mo(e,d,p))continue;let v=e.cells[n][s].piece,M=e.cells[p.row][p.col].piece;if(v.color===An&&M.color===An)continue;if(v.special==="rainbow"||M.special==="rainbow")return [d,p];if(v.special&&M.special)return [d,p];let O=t[n][s];t[n][s]=t[p.row][p.col],t[p.row][p.col]=O;let E=Pr(t).size>0;if(t[p.row][p.col]=t[n][s],t[n][s]=O,E)return [d,p]}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,d=r.piece;if(o.special==="rainbow"||d.special==="rainbow"||o.special&&d.special){s.piece=d,r.piece=o;let v=ri();return vp(e,v,n,o,t,d),fi(e,v),v}s.piece=d,r.piece=o;let p=lc(e,[t,n]);return p||(s.piece=o,r.piece=d,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 v=0;v<e.rows;v++)for(let M=0;M<e.cols;M++)e.cells[v][M].under?.id===r.id&&o.push({col:M,row:v});if(o.length===0)continue;let d=[];for(let v of o)for(let[M,O]of ac){let E=Un(e,v.col+M,v.row+O);E&&!E.hole&&!E.block&&!E.under&&d.push({col:v.col+M,row:v.row+O});}if(d.length===0)continue;let p=ps(e,d);e.cells[p.row][p.col].under={id:r.id,hp:1},n.push(p);}return n}function di(e,t,n){let s=Dn[t];if(!s)return [];let r=[];for(let p=0;p<e.rows;p++)for(let v=0;v<e.cols;v++){let M=e.cells[p][v];M.hole||M.block||!M.piece||M.piece.color<0||M.piece.special||s.layer==="under"&&M.under||s.layer==="over"&&M.over||r.push({col:v,row:p});}let o=[],d=s.max===void 0?n:Math.max(0,s.max-hs(e,t));for(let p=0;p<Math.min(n,d)&&r.length>0;p++){let v=Math.floor(e.rnd()*r.length)%r.length,M=r.splice(v,1)[0],O=e.cells[M.row][M.col],E={id:t,hp:s.hp};s.layer==="under"?O.under=E:s.layer==="over"?O.over=E:(O.block=E,O.piece=null),o.push(M);}return o}function gs(e,t,n){let s=[];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&&s.push({col:d,row:o});}let r=[];for(let o=0;o<n&&s.length>0;o++){let d=s.splice(Math.floor(e.rnd()*s.length)%s.length,1)[0];e.cells[d.row][d.col].piece.special=e.rnd()<.5?"row":"col",r.push(d);}return r}function lc(e,t){let n=ic(fs(e));if(n.length===0)return null;let s=ri(),r=[];for(let p of n){let v=new Set(p.cells.map(([E,I])=>`${E},${I}`)),M=r.filter(E=>E.some(I=>I.cells.some(([K,z])=>v.has(`${K},${z}`)))),O=[p,...M.flat()];for(let E of M)r.splice(r.indexOf(E),1);r.push(O);}let o=[],d=[];for(let p of r){let v=new Map;for(let I of p)for(let[K,z]of I.cells)v.set(`${K},${z}`,{col:K,row:z});let M=p.reduce((I,K)=>Math.max(I,K.cells.length),0),O=p.some(I=>I.dir==="h")&&p.some(I=>I.dir==="v"),E=or.filter(I=>I.make!==null).find(I=>I.make(M,O,p.find(K=>K.cells.length===M).dir));if(E){let I=t.find(z=>v.has(`${z.col},${z.row}`))??(O?yp(p):null)??gp(p.find(z=>z.cells.length===M)),K=e.cells[I.row][I.col].piece?.color??0;d.push({at:I,special:E.id,color:K});}for(let I of v.values())o.push({...I,match:true});}pi(e,s,o);for(let p of d){let v=e.cells[p.at.row][p.at.col];v.piece||v.block||v.hole||(v.piece=cs(e,p.special==="rainbow"?oi:p.color,p.special),s.created.push({...p.at,piece:v.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(),d=`${o.col},${o.row}`;if(!ds(e,o.col,o.row))continue;let p=e.cells[o.row][o.col];if(p.hole)continue;if(p.block){!o.match&&!r.has(d)&&(r.add(d),ls(t,p,"block",o));continue}if(s.has(d))continue;s.add(d);let v=p.piece;if(v){if(p.over){ls(t,p,"over",o);continue}if(v.color!==An){if(p.piece=null,t.cleared.push({...o,piece:v}),p.under&&(p.under.id==="slime"&&(t.slimeCleared=true),ls(t,p,"under",o)),o.match)for(let[M,O]of ac){let E=Un(e,o.col+M,o.row+O),I=`${o.col+M},${o.row+O}`;E?.block&&!r.has(I)&&Dn[E.block.id]?.hitByNear&&(r.add(I),ls(t,E,"block",{col:o.col+M,row:o.row+O}));}v.special&&bp(e,t,v.special,o,v.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 p=or.find(v=>v.id===n)?.shape??n;for(let v of ui(e,p,s,r))o.push({...v,match:false});}var bs=(e,t,n)=>ui(e,t,n,-1);function ui(e,t,n,s){let r=[],o=p=>{for(let v=0;v<e.cols;v++)r.push({col:v,row:p});},d=p=>{for(let v=0;v<e.rows;v++)r.push({col:p,row:v});};if(t==="row")o(n.row);else if(t==="col")d(n.col);else if(t==="cross")o(n.row),d(n.col);else if(t.startsWith("cross:")){let p=Number(t.slice(6));for(let v=-p;v<=p;v++)o(n.row+v),d(n.col+v);}else if(t.startsWith("area:")){let p=Number(t.slice(5));for(let v=-p;v<=p;v++)for(let M=-p;M<=p;M++)r.push({col:n.col+M,row:n.row+v});}else if(t==="color"){let p=s>=0?s:cc(e);for(let v=0;v<e.rows;v++)for(let M=0;M<e.cols;M++)e.cells[v][M].piece?.color===p&&r.push({col:M,row:v});}else if(t==="all")for(let p=0;p<e.rows;p++)o(p);return r.filter(p=>ds(e,p.col,p.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 d=[],p=s.special??"plain",v=o.special??"plain",M=Jl.find(E=>E.a===p&&E.b===v||E.a===v&&E.b===p);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:M?.effect??"combo"});let O=p==="rainbow"?o:s;if(M?.effect==="color"||M?.effect==="turn"){let E=O.color>=0?O.color:cc(e);for(let I=0;I<e.rows;I++)for(let K=0;K<e.cols;K++){let z=e.cells[I][K].piece;z?.color===E&&(M.effect==="turn"&&O.special&&O.special!=="rainbow"&&(z.special=O.special==="row"||O.special==="col"?e.rnd()<.5?"row":"col":O.special),d.push({col:K,row:I,match:false}));}}else for(let E of ui(e,M?.effect??"cross",r,O.color))d.push({...E,match:false});pi(e,t,d);}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 d=o;for(;d-1>=0&&!ti(e.cells[d-1][r]);)d--;let p=[];for(let O=o;O>=d;O--){let E=e.cells[O][r].piece;E&&p.push(E);}let v=o;for(let O of p)e.cells[v--][r].piece=O;let M=-1;for(;v>=d;v--){let O=d===xp(e,r)&&e.dropsToSpawn>0&&Sp(e)<2&&e.rnd()<.35,E=O?cs(e,An):cs(e,ps(e,e.colors));O&&e.dropsToSpawn--,e.cells[v][r].piece=E,t.spawned.push({col:r,row:v,piece:E,from:d+M--});}o=d-1;}}let s=false;for(let r=0;r<e.cols;r++){let o=kp(e,r);if(o<0)continue;let d=e.cells[o][r];d.piece?.color===An&&(d.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=x=>nn(t,x),s=e$1.rng.stream("match3"),r=wr(1,n("difficulty")),o=us(ss.plain,[0,1,2,3,4],()=>s.next(),Ua),d=Wt(),p="idle",v=new Map,M=new Map,O=null,E=null,I=null,K=null,z=0,ne=false,ae=0,j$1=0,ue=0,fe=0,ie=0,xe=false,se=false,_e={colors:new Map,drops:0},Ae=rs,be=rs,oe=0,me=0,Se=false,Ee=[],Q=null,Re=0,We=0,we=0,ee=null,Le=[],ye=new Map,ke=()=>Lr.find(x=>x.id===e$1.vars["meta:hero"])??Lr[0],Ue=()=>os(ke().skill),Y=()=>r.def.kind==="battle",Me=()=>e$1.vars.reviving===true,Xe=()=>Zl*Math.pow(1.06,r.level-1)*(1+Ln(e$1,"meta:attack")),at=()=>1+Ln(e$1,"meta:skill"),Te=()=>Ue().mana;function Wt(){return Fn(Ce(e$1),o.cols,o.rows,{top:.33,bottom:.96,widthShare:.94})}let Ge=()=>d.cell,qe=new Set,et=(x,S,a,k,A=1)=>{qe.add(x);let l=ye.get(x);(l===void 0||!e$1.isAlive(l))&&(l=e$1.create(),e$1.set(l,uc,{id:x}),ye.set(x,l)),e$1.set(l,e,{x:S,y:a,scale:A}),e$1.set(l,f,k);},rt=x=>{for(let[S,a]of [...ye])S.startsWith(x)&&(e$1.destroy(a),ye.delete(S));},lt=x=>{let S=Ge();if(x===oi)return {shape:"sprite",art:"m3_rainbow",w:S*.9,h:S*.9,depth:3};if(x===An)return {shape:"sprite",art:"m3_crate",w:S*.86,h:S*.86,depth:3};let a=So(x);return {shape:"sprite",art:a?.art??"gem1",w:S*.88,h:S*.88,color:a?.color??"piece1",depth:3}},ct=(x,S,a,k,A)=>{let l=Ze(d,S,A),h=e$1.create();return e$1.set(h,qn,{id:x,col:S,row:a,kind:k}),e$1.set(h,e,{x:l.x,y:l.y}),e$1.set(h,f,lt(k)),v.set(x,h),h},dt=()=>{let x=ii(o);for(let[S,a]of [...v])x.has(S)||(e$1.destroy(a),v.delete(S));for(let[S,a]of x){let k=v.get(S);k===void 0&&(k=ct(S,a.col,a.row,a.piece.color,a.row-o.rows));let A=e$1.need(k,qn);A.col=a.col,A.row=a.row,A.kind!==a.piece.color&&(A.kind=a.piece.color,e$1.set(k,f,lt(a.piece.color)));let l=a.piece.special&&a.piece.special!=="rainbow"?or.find(D=>D.id===a.piece.special):void 0,h=M.get(S);l&&h===void 0&&(h=e$1.create(),e$1.set(h,dc,{of:S}),e$1.set(h,e,{x:0,y:0}),M.set(S,h)),l&&h!==void 0&&e$1.set(h,f,{shape:"sprite",art:l.art,w:Ge()*.95,h:Ge()*.95,depth:4}),!l&&h!==void 0&&(e$1.destroy(h),M.delete(S));}for(let[S,a]of [...M])x.has(S)||(e$1.destroy(a),M.delete(S));ot();},ot=()=>{nt(e$1,hi);let x=Ge();for(let S=0;S<o.rows;S++)for(let a=0;a<o.cols;a++){let k=o.cells[S][a],A=Ze(d,a,S),l=(h,D,_,b=1)=>{if(!D)return;let m=Dn[D.id],R=e$1.create();e$1.set(R,hi,{key:h}),e$1.set(R,e,{x:A.x,y:A.y}),e$1.set(R,f,{shape:"sprite",art:D.hp>=2&&m?.id==="ice"?"m3_ice2":D.hp>=2&&m?.id==="stone"?"m3_stone2":m?.art??"m3_stone",w:x*b,h:x*b,depth:_});};l(`u${a},${S}`,k.under,1.5,.98),l(`o${a},${S}`,k.over,5,.98),l(`b${a},${S}`,k.block,3,.95);}},Pe=()=>{nt(e$1,pc),Ot(e$1,"board",d.top+d.cell*o.rows*.35);let x=Ge(),S=Ze(d,(o.cols-1)/2,(o.rows-1)/2),a=x*.25,k=(A,l,h)=>{let D=e$1.create();e$1.set(D,pc,{i:0}),e$1.set(D,e,{x:A,y:l}),e$1.set(D,f,h);};k(S.x,S.y,{shape:"sprite",art:"panel",w:x*o.cols+a*2,h:x*o.rows+a*2,color:"panel",alpha:.9,depth:-10});for(let A=0;A<o.rows;A++)for(let l=0;l<o.cols;l++){if(o.cells[A][l].hole)continue;let h=Ze(d,l,A);k(h.x,h.y,{shape:"sprite",art:"cell",w:x-2,h:x-2,color:(A+l)%2?"panel":"ground",alpha:.85,depth:-9});}},bt=()=>{let x=Ce(e$1),S=x.h*.12,a=d.top-Ge()*.4,k=Math.max(40,(a-S)*.92);if((ee===null||!e$1.isAlive(ee))&&(ee=e$1.create()),e$1.set(ee,e,{x:x.w*.15,y:a-k/2}),e$1.set(ee,f,{shape:"actor",cast:ke().cast,h:k,pose:"idle",facing:1,depth:20}),Q&&e$1.isAlive(Q.entity)){let A=k*Q.def.size;e$1.set(Q.entity,e,{x:x.w*.82,y:a-A/2});let l=e$1.need(Q.entity,f);l.shape==="actor"&&(l.h=A);}},Ke=()=>r.def.kind!=="goal"?[]:r.def.goals.map(x=>({goal:x,left:x.kind==="color"?Math.max(0,x.count-(_e.colors.get(x.color)??0)):x.kind==="clear"?hs(o,x.obstacle):x.kind==="drops"?Math.max(0,x.count-_e.drops):Math.max(0,x.value-Number(e$1.vars.score??0))})),At=()=>Ke().every(x=>x.left===0),en=x=>{let S=Ce(e$1).w*.07;if(x.kind==="color"){let a=So(x.color);return {shape:"sprite",art:a?.art??"gem1",w:S,h:S,color:a?.color??"piece1",depth:70}}return x.kind==="clear"?{shape:"sprite",art:Dn[x.obstacle]?.art??"m3_stone",w:S,h:S,depth:70}:x.kind==="drops"?{shape:"sprite",art:"m3_crate",w:S,h:S,depth:70}:{shape:"sprite",art:"coin",w:S,h:S,depth:70}},Rt=(x,S,a,k,A,l)=>{let h=Math.max(8,k*.09);et(`${x}:bg`,S,a,{shape:"rect",w:k,h,color:"#000000",alpha:.5,radius:h/2,depth:69});let D=Math.max(1,(k-4)*Math.max(0,Math.min(1,A)));et(`${x}:fill`,S-(k-4)/2+D/2,a,{shape:"rect",w:D,h:h-4,color:l,radius:(h-4)/2,depth:69.1});},tn=()=>{let x=Ce(e$1),S=Math.min(x.w,x.h),a=(b,m,R,C,P="text",W=S*.045)=>et(b,m,R,{shape:"text",text:C,size:Math.round(W),color:P,bold:true,depth:70}),k=d.top-Ge()*.4,A=x.h*.085;Le=[],qe.clear();let l=x.w*.36,h=(A+k)/2+S*.02,D=S*.07,_=me>=Te();if(Le.push({id:"skill",x:l,y:h,r:D*1.15}),_&&et("h:skill:glow",l,h,{shape:"circle",r:D*1.25,color:Se?"coin":"secondary",alpha:.5+.3*Math.sin(e$1.time*7),depth:68.9}),et("h:skill:bg",l,h,{shape:"circle",r:D,color:"panel",alpha:.95,depth:69}),et("h:skill:i",l,h,{shape:"sprite",art:Ue().art,w:D*1.4,h:D*1.4,alpha:_?1:.45,depth:69.2}),Rt("h:mana",l,h+D*1.45,D*2.2,me/Te(),"secondary"),Y()){let b=x.w*.15;if(Rt("h:hp",b,A,x.w*.24,Ae/be,"accent"),a("h:hp:t",b+x.w*.12+S*.05,A,`${Math.ceil(Ae)}`,"text",S*.034),oe>0&&(et("h:sh:i",b+x.w*.12+S*.05,A+S*.055,{shape:"sprite",art:"m3_shield",w:S*.045,h:S*.045,color:"primary",depth:70}),a("h:sh:t",b+x.w*.12+S*.11,A+S*.055,`${Math.ceil(oe)}`,"primary",S*.03)),Q){let m=x.w*.78;Rt("h:foe",m,A,x.w*.26,Q.hp/Q.max,"danger"),a("h:foe:t",m-x.w*.13-S*.05,A,`${Math.ceil(Q.hp)}`,"text",S*.034);let R=ko[Q.def.element];et("h:foe:el",m+x.w*.13+S*.03,A,{shape:"circle",r:S*.018,color:R.color,depth:70});let C=(A+k)/2;et("h:foe:in:bg",x.w*.62,C,{shape:"circle",r:S*.045,color:Q.in<=1?"danger":"panel",alpha:.95,depth:69}),a("h:foe:in",x.w*.62,C,String(Q.in),"text",S*.045);let P=r.def.kind==="battle"?r.def.enemies.length:0;for(let W=0;W<P;W++)et(`h:q:${W}`,x.w*.8+(W-(P-1)/2)*S*.04,k+S*.005,{shape:"circle",r:S*.012,color:W<Re?"muted":W===Re?"danger":"text",alpha:.9,depth:70});}}else {a("h:moves",x.w*.5,A+S*.01,String(j$1),j$1<=3?"danger":"text",S*.075);let b=Ke(),m=x.w*.64,R=x.w*.11,C=(A+k)/2+S*.02;b.forEach((P,W)=>{let J=m+W*R;et(`h:g:${W}`,J,C,en(P.goal)),a(`h:g:${W}:t`,J,C+S*.06,P.left===0?"\u2713":String(P.left),P.left===0?"accent":"text",S*.038);});}e$1.vars.m3_phase=p,e$1.vars.m3_buttons=Le.map(b=>`${b.id}@${Math.round(b.x)},${Math.round(b.y)}`).join(";");for(let[b,m]of [...ye])!b.startsWith("h:")||qe.has(b)||(e$1.destroy(m),ye.delete(b));},Et=()=>{Q&&e$1.isAlive(Q.entity)&&Qe(e$1,Q.entity,"die");let x=Ee.shift();if(x===void 0){Q=null;return}let S=Eo(x),a=e$1.create();e$1.set(a,e,{x:0,y:0}),e$1.set(a,f,{shape:"actor",cast:S.cast,variant:S.variant??s.int(0,99),h:50,pose:"idle",facing:-1,depth:20});let k=S.hp*r.enemyHp;Q={def:S,hp:k,max:k,in:S.every,rage:1,entity:a},bt(),S.boss&&(e$1.emit(Ep,{kind:x}),G(e$1,{kind:"shake",power:1})),L();},L=()=>{if(e$1.vars.moves=j$1,e$1.vars.hero_hp=Math.ceil(Ae),e$1.vars.mana=Math.floor(me),e$1.vars.m3_goals=Ke().map(x=>`${x.goal.kind==="color"?`color${x.goal.color}`:x.goal.kind==="clear"?x.goal.obstacle:x.goal.kind}:${x.left}`).join(","),e$1.vars.m3_enemy=Q?`${Q.def.id}:${Math.ceil(Q.hp)}/${Math.ceil(Q.max)}:${Q.in}`:"",Y()){let x=r.def.kind==="battle"?r.def.enemies.length:1;e$1.vars.level_progress=Math.min(1,(Re+(Q?1-Q.hp/Q.max:0))/x);}else {let x=r.def;if(x.kind==="goal"){let S=x.goals.map(k=>k.kind==="color"||k.kind==="drops"?k.count:k.kind==="score"?k.value:1),a=Ke();e$1.vars.level_progress=a.reduce((k,A,l)=>k+(A.goal.kind==="clear"?A.left===0?1:0:1-A.left/S[l]),0)/Math.max(1,a.length);}}},B=()=>{nt(e$1,qn),nt(e$1,dc),nt(e$1,hi),nt(e$1,uc),v.clear(),M.clear(),ye.clear(),Q&&e$1.isAlive(Q.entity)&&e$1.destroy(Q.entity),Q=null,r=wr(Ln(e$1,"meta:chapter")||1,n("difficulty"));let x=r.def;o=us(ss[x.board]??ss.plain,r.colors,()=>s.next(),Ua,x.kind==="goal"?x.drops??0:0),d=Wt(),Pe(),p="idle",O=null,E=null,I=null,K=null,z=0,ne=false,ae=0,_e.colors.clear(),_e.drops=0,j$1=x.kind==="goal"?x.moves+Ln(e$1,"meta:moves"):0,ue=j$1,fe=0,ie=0,xe=false,se=false,be=rs*Math.pow(1.06,r.level-1)*(1+Ln(e$1,"meta:health")),Ae=be,oe=0,me=0,Se=false,Re=0,We=0,we=0,Ee=x.kind==="battle"?[...x.enemies]:[],e$1.vars.m3_level=r.level,e$1.vars.m3_world=r.world,e$1.vars.m3_kind=x.kind,e$1.vars.coins=0,e$1.vars.score=0,e$1.vars.stars=0,e$1.vars.reviving=false,dt(),bt(),x.kind==="battle"&&Et(),L();},f$1=x=>{if(!x||!Q)return 1;let S=ko[x].beats.includes(Q.def.element),a=x===Q.def.element;return (S?1.5:a?.5:1)*(x===ke().element?1.25:1)},c=(x,S=0)=>{z++,ne||=x.slimeCleared,_e.drops+=x.dropsCollected;let a=S,k=0,A=0,l=Ge();for(let b of x.cleared){let m=b.piece;m.color>=0&&_e.colors.set(m.color,(_e.colors.get(m.color)??0)+1);let R=So(m.color),C=Ze(d,b.col,b.row);G(e$1,{kind:"burst",x:C.x,y:C.y,color:R?.color??"coin",n:6,size:l*.8}),me=Math.min(Te(),me+tc*(1+Ln(e$1,"meta:mana"))),!(!Y()||!R)&&(R.role==="attack"?a+=Xe()*f$1(R.element)*(1+.25*(z-1)):R.role==="heal"?k+=Ql*Math.pow(1.06,r.level-1)*(1+Ln(e$1,"meta:health")):R.role==="shield"&&(A+=ec*Math.pow(1.06,r.level-1)*(1+Ln(e$1,"meta:defense"))));}for(let b of x.fired){let m=Ze(d,b.col,b.row);G(e$1,{kind:"ring",x:m.x,y:m.y,color:"coin",size:l*2.4});}x.fired.length>0&&G(e$1,{kind:"shake",power:.4+Math.min(1,x.fired.length*.2)});for(let b of x.created)e$1.emit("special-made",{kind:b.piece.special});let h=x.cleared.length*n("pieceScore")*z+x.fired.length*30;Fe(e$1,"score",h),ae+=x.cleared.length;let _=Math.floor(ae/n("coinEvery"))-Math.floor((ae-x.cleared.length)/n("coinEvery"));_>0&&(Fe(e$1,"coins",_),e$1.emit("coin-collected",{value:_})),e$1.emit("pieces-cleared",{count:x.cleared.length,cascade:z}),Y()&&(k>0&&(Ae=Math.min(be,Ae+k),ee!==null&&G(e$1,{kind:"pop",x:e$1.need(ee,e).x,y:e$1.need(ee,e).y-l,text:`+${Math.round(k)}`,color:"accent",size:Math.round(l*.45)})),A>0&&(oe+=A),a>0&&Q&&y(a)),dt(),L();},y=x=>{if(!Q)return;Q.hp-=x,ee!==null&&ze(e$1,ee,"attack"),ze(e$1,Q.entity,"hit");let S=e$1.need(Q.entity,e);G(e$1,{kind:"pop",x:S.x,y:S.y-Ge(),text:`-${Math.round(x)}`,color:"danger",size:Math.round(Ge()*.5)}),!(Q.hp>0)&&(Re++,e$1.emit("enemy-defeated",{kind:Q.def.id}),i(),Q.def.boss&&(We++,Fe(e$1,"coins",10),e$1.emit(Mp,{kind:Q.def.id}),G(e$1,{kind:"flash",color:"coin"})),Et());},i=()=>{if(!Q)return;Qe(e$1,Q.entity,"die");let x=Q.entity;e$1.need(x,f).alpha=.6,g(()=>{e$1.isAlive(x)&&e$1.destroy(x);});},u=[],g=x=>u.push({t:.9,f:x}),T=()=>{if(ci(o,ne),ne=false,z=0,dt(),r.def.kind==="goal"){if(At())return $();if(j$1<=0)return le("out-of-moves")}else {if(!Q)return $();if(Q.in--,Q.in<=0){p="enemy",ie=.45;return}}w();},w=()=>{p="idle",Cr(o)===null&&(si(o),dt(),e$1.emit("board-shuffled",{})),L();},N=()=>{if(!Q)return w();let x=Q.def,S=r.enemyAttack*x.attack*Q.rage;Q.rage=1,ze(e$1,Q.entity,"attack");let a=Math.min(oe,S);if(oe-=a,S=(S-a)*(1-Math.min(.6,Ln(e$1,"meta:defense"))),S>0){if(Ae-=S,ee!==null){ze(e$1,ee,"hit");let A=e$1.need(ee,e);G(e$1,{kind:"pop",x:A.x,y:A.y-Ge(),text:`-${Math.round(S)}`,color:"danger",size:Math.round(Ge()*.5)});}G(e$1,{kind:"shake",power:.8}),e$1.emit("player-hit",{hp:Math.ceil(Ae)});}let k=x.skill;if(k?.kind==="sow"?di(o,k.obstacle,k.count):k?.kind==="heal"?Q.hp=Math.min(Q.max,Q.hp+Q.max*k.share):k?.kind==="rage"&&(Q.rage=k.mult),Q.in=x.enrage&&Q.hp<Q.max*x.enrage?Math.max(1,x.every-1):x.every,dt(),Ae<=0)return Ae=0,le("fell");w();},$=()=>{if(r.def.kind==="goal"){we=Math.min(j$1,12),e$1.vars.stars=Math.min(xe?1:3,Za(j$1/Math.max(1,ue),false)),Fe(e$1,"score",j$1*n("moveBonus")),p="finale",ie=.3;return}e$1.vars.stars=Math.min(xe?1:3,Za(Ae/be,true)),te("cleared");},te=x=>{if(se)return;se=true,p="over";let S=x==="cleared";S&&e$1.vars["meta:first_clear"]===true&&Fe(e$1,"coins",r.firstClearGold),S||(e$1.vars.stars=0),e$1.vars.reviving=false,L(),e$1.emit($t,{reason:x,stats:{chapter:r.level,seconds:Math.floor(fe),cleared:S,stars:Number(e$1.vars.stars??0),coins:Number(e$1.vars.coins??0),bosses:We,kills:Re,battle:Y()}});},le=x=>{if(e$1.vars.revive_ready===true&&!xe){e$1.vars.reviving=true,e$1.vars.m3_revive_reason=x,p="idle",e$1.emit(Vt,{});return}te(x);},ge=()=>{Me()&&(xe=true,e$1.vars.reviving=false,Y()?(Ae=be*oc,Q&&(Q.in=Q.def.every)):j$1+=rc,G(e$1,{kind:"flash",color:"coin"}),w());},He=x=>{let S=o.cells[x.row]?.[x.col];if(!S||S.hole)return 0;let a=r.def.kind==="goal"?r.def.goals:[],k=0;for(let l of [S.under,S.over,S.block])l&&(k+=a.some(h=>h.kind==="clear"&&h.obstacle===l.id)?6:3);let A=S.piece;if(A&&!S.block){k+=1,A.special&&(k+=3),a.some(h=>h.kind==="color"&&h.color===A.color)&&(k+=2);let l=So(A.color);Y()&&l?.role==="attack"&&(k+=f$1(l.element));}if(a.some(l=>l.kind==="drops"))for(let l=0;l<x.row;l++)o.cells[l][x.col].piece?.color===An&&(k+=2);return k},je=x=>{let S={col:Math.floor(o.cols/2),row:Math.floor(o.rows/2)},a=-1;for(let k=0;k<o.rows;k++)for(let A=0;A<o.cols;A++){if(o.cells[k][A].hole)continue;let l=bs(o,x,{col:A,row:k}).reduce((h,D)=>h+He(D),0);l>a&&(a=l,S={col:A,row:k});}return S},st=()=>{let x=Ue();if(me<x.mana||p!=="idle")return false;let S=at(),a=[];if(x.kind==="shape"){let l=S>=(x.bigAt??99)&&x.bigShape?x.bigShape:x.shape??"area:1",h=je(l);a=bs(o,l,h);let D=Ze(d,h.col,h.row);G(e$1,{kind:"ring",x:D.x,y:D.y,color:"coin",size:Ge()*4}),G(e$1,{kind:"flash",color:"coin"});}else a=gs(o,"line",Math.round((x.count??3)*S));me=0,Se=false,z=0,ee!==null&&ze(e$1,ee,"attack"),e$1.emit("skill-cast",{id:x.id}),vt(e$1,"m3-skill");let k=Y()&&Q?x.damage*Xe()*S*f$1(ke().element):0,A=ys(o,a,x.id);return c(A,k),p="falling",true},Z=x=>{if(I){let S=o.cells[I.row]?.[I.col]?.piece?.id,a=S!==void 0?v.get(S):void 0;a!==void 0&&(e$1.need(a,e).scale=1);}if(I=x,x){let S=o.cells[x.row]?.[x.col]?.piece?.id,a=S!==void 0?v.get(S):void 0;a!==void 0&&(e$1.need(a,e).scale=1.15);}},H=0,X=(x,S)=>{if(H=0,Dt(e$1),p!=="idle"||Me()||!Mo(o,x,S))return;Z(null);let a=o.cells[x.row][x.col].piece.id,k=o.cells[S.row][S.col].piece.id;O=new Map([[a,S],[k,x]]),E=[x,S],p="swapping",vt(e$1,"match3-swap");};e$1.on(j,x=>{let S=x;if(!(!Je(e$1)||Kn(e$1)||se||Me()))if(S.type==="tap"){if(Le.find(A=>Math.hypot(S.x-A.x,S.y-A.y)<=A.r)?.id==="skill"){if(me<Te())return;st()||(Se=true);return}let k=Tn(d,S.x,S.y);if(!k||p!=="idle")return;I&&Math.abs(I.col-k.col)+Math.abs(I.row-k.row)===1?X(I,k):Z(I&&I.col===k.col&&I.row===k.row?null:k);}else if(S.type==="press"){let a=Tn(d,S.x,S.y);K=a?{x:S.x,y:S.y,...a}:null;}else if(S.type==="move"&&K){let a=S.x-K.x,k=S.y-K.y;if(Math.max(Math.abs(a),Math.abs(k))<d.cell*.45)return;let A={col:K.col,row:K.row},l=Math.abs(a)>Math.abs(k)?{col:A.col+Math.sign(a),row:A.row}:{col:A.col,row:A.row+Math.sign(k)};K=null,X(A,l);}else S.type==="release"&&(K=null);}),e$1.on(Nt,()=>{B(),e$1.vars.level=r.level;}),e$1.on(zt,B),e$1.on(Gt,ge),e$1.on(Kt,()=>{Me()&&(e$1.vars.reviving=false,te(Y()?"fell":"out-of-moves"));}),e$1.on(Bt,x=>{rt("h:"),Le=[],ee!==null&&e$1.isAlive(ee)&&Qe(e$1,ee,x.reason==="cleared"?"dance":"die");}),e$1.on(k,()=>{d=Wt(),Pe();for(let[x,S]of v){let a=e$1.need(S,qn);e$1.set(S,f,lt(a.kind));}dt(),bt();});let q=x=>{let S=true,a=Math.min(1,x*14),k=Ge();for(let A of e$1.query(qn)){let l=e$1.need(A,qn),h=O?.get(l.id)??l,D=e$1.need(A,e),_=Ze(d,h.col,h.row),b=_.x-D.x,m=_.y-D.y,R=e$1.need(A,f);Math.abs(b)<.5&&Math.abs(m)<.5?(D.x=_.x,D.y=_.y,R.alpha=1):(S=false,R.alpha=D.y<d.top-k*.3?0:1,D.x+=b*a,D.y+=Math.abs(m)>k*.3?Math.sign(m)*Math.min(Math.abs(m),k*12*x):m*a);}for(let[A,l]of M){let h=v.get(A);if(h===void 0)continue;let D=e$1.need(h,e);e$1.set(l,e,{x:D.x,y:D.y,scale:1+.06*Math.sin(e$1.time*6)}),e$1.need(l,f).alpha=e$1.need(h,f).alpha??1;}return S};e$1.addSystem({id:"match3",order:0,run(x,S){for(let a of [...u])a.t-=S,a.t<=0&&(u.splice(u.indexOf(a),1),a.f());if(!Je(x)||se){q(S);return}if(fe+=S,tn(),!Me()&&q(S)){if(ie>0){ie-=S;return}if(p==="swapping"&&E){let[a,k]=E;E=null,O=null,z=0;let A=li(o,a,k);if(!A){let l=o.cells[a.row][a.col].piece.id,h=o.cells[k.row][k.col].piece.id;O=new Map([[l,k],[h,a]]),p="returning";return}r.def.kind==="goal"&&j$1--,c(A),p="falling";return}if(p==="returning"){if(O){O=null;return}p="idle";return}if(p==="falling"){let a=ms(o);if(a){c(a);return}T();return}if(p==="enemy"){N();return}if(p==="finale"){if(we>0){we--,j$1=Math.max(0,j$1-1);let k=gs(o,"line",1);k.length>0&&c(ys(o,k,"finale")),dt(),ie=.12;return}let a=ms(o);if(a){c(a);return}te("cleared");return}if(p==="idle"&&Se){st();return}if(p==="idle"){if(H+=S,(!ht(x,"match3-swap")||H>7)&&!un(x)){let a=Cr(o);a&&ft(x,"swipe",Ze(d,a[0].col,a[0].row),Ze(d,a[1].col,a[1].row),d.cell*1.1);}if(me>=Te()&&!ht(x,"m3-skill")&&!un(x)){let a=Le.find(k=>k.id==="skill");a&&ft(x,"tap",a,void 0,d.cell*1.2);}}}}}),B();}};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"}],Ie=(e,t,n,s,r=0,o=3,d)=>({board:e,chains:[...t].map(p=>({g:"garden",b:"bake",j:"jewel",p:"potion"})[p]??"garden"),orders:n,top:s,double:r,visible:o,...d?{slack:d}:{}}),xs=e=>({...e,vip:true}),Ut=(e,t)=>({...e,extra:t}),Es=[Ie("start","g",3,3,0,1,1.6),Ie("start","g",4,3,0,2,1.5),Ie("two","gb",4,3,0,2,1.45),Ie("two","gb",5,4,0,2),Ie("boxes","gb",5,4,0,3),Ie("boxes","gb",6,4,.2,3),Ie("fog","gb",6,4,.2,3),Ie("yard","gb",6,5,.2,3),Ie("fog","gb",7,5,.3,3),Ut(xs(Ie("cellar","gb",6,5,.3,3)),.92),Ut(Ie("webs","gbj",5,4,.2,3),.92),Ut(Ie("webs","gbj",6,4,.3,3),.92),Ut(Ie("mine","gbj",6,5,.2,3),1.15),Ut(Ie("workshop","gbj",6,5,.3,3),.9),Ut(Ie("mine","gbj",7,5,.3,3),1.08),Ut(Ie("yard","gj",6,5,.3,3),1.15),Ut(Ie("workshop","gbj",7,5,.4,3),.92),Ie("vault","gbj",7,5,.3,3),Ut(Ie("webs","jbg",7,6,.3,3),.92),xs(Ie("vault","gbj",7,6,.4,3)),Ut(Ie("bubbles","gbp",6,5,.2,3),1.15),Ut(Ie("bubbles","gbp",6,5,.3,3),1.12),Ut(Ie("holes","gbpj",6,5,.3,3),.92),Ut(Ie("lab","gbjp",7,5,.3,3),.92),Ie("holes","gbpj",7,5,.4,3),Ie("bubbles","pjg",7,6,.3,3),Ie("lab","gbjp",7,6,.4,3),Ie("terrace","gbjp",8,5,.4,3),Ie("holes","gbpj",8,6,.4,3),xs(Ie("terrace","gbjp",7,6,.4,3)),Ie("four","gbjp",7,5,.3,3),Ut(Ie("fortress","gbjp",7,5,.4,3),1.06),Ie("maze","gbjp",7,6,.4,3),Ie("four","gbjp",8,6,.4,3),Ut(Ie("fortress","gbjp",8,6,.5,3),1.06),Ie("palace","gbjp",8,6,.4,3),Ie("maze","gbjp",8,6,.5,3),Ie("lab","gbjp",9,6,.5,3),Ie("palace","gbjp",9,6,.5,3),Ut(xs(Ie("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 d=e.orders<=1?1:o/(e.orders-1),p=e.vip===true&&o===e.orders-1,v=2+Math.round(d*(e.top-2)),M=Math.max(2,Math.min(e.top,v-(n()<.3?1:0))),O=r[(o+Math.floor(n()*r.length))%r.length],E=[{chain:O,level:p?Math.min(e.top+1,(gn(O)?.levels??7)-1):M}];if(p||o>0&&r.length>1&&n()<e.double){let I=r[(r.indexOf(O)+1+Math.floor(n()*(r.length-1)))%r.length];E.push({chain:I,level:p?e.top:Math.max(2,M-1)});}s.push({wants:E,vip:p});}return s}function Tp(e){let t=r=>r.reduce((o,d)=>o+ks(d),0)/Math.max(1,r.length),n=gi.reduce((r,[o,d])=>r+ks(o)*d,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 d=wn(o.special);s+=d?.effect==="energy"?d.amount??0:d?.effect==="chest"?n*(d.amount??0):d?.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),d=o.reduce((M,O)=>M+O.wants.reduce((E,I)=>E+ks(I.level),0),0),p=Math.max(d*.4,d-Tp(sr[s.board]??[])*.7),v=(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(p*v),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(d=>d.length)),r={cols:s,rows:e.length,cells:[],chains:t,nextId:1,rand:n},o=d=>t[d]??null;for(let d=0;d<e.length;d++){let p=[];for(let v=0;v<s;v++){let M=bi[e[d][v]??"-"]??{kind:"free"},O={hole:M.kind==="hole",thing:null,cover:null,block:null};if(M.kind==="gen"){let E=o(M.chain);E&&(O.thing=Mi(r,"gen",E,1));}else if(M.kind==="item"){let E=o(M.chain);E&&(O.thing=Ro(r,E,M.level));}else if(M.kind==="block")O.block={id:M.obstacle,hp:M.hp};else if(M.kind==="cover"){let E=t[Math.floor(n()*t.length)]??"garden",I=Math.min(Pn(E)-1,M.levels[Math.floor(n()*M.levels.length)]??1);O.thing=Ro(r,E,I);let K=rn[M.obstacle];O.cover={id:M.obstacle,hp:1,...K?.ttl?{ttl:K.ttl}:{}};}else M.kind==="special"&&(O.thing=xc(r,M.special));p.push(O);}r.cells.push(p);}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 d=Math.hypot(o-t.col,(r-t.row)*1.05);d<s-1e-9&&(s=d,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 d={col:t.col+r,row:t.row+o};if(!kc(e,d))continue;let p=e.cells[d.row][d.col];for(let v of ["block","cover"]){let M=p[v];if(!M)continue;let O=rn[M.id];if(!O?.neighbour)continue;M.hp--;let E=M.hp<=0;E&&(p[v]=null,s+=O.coins??0),n.push({at:d,id:M.id,gone:E,revealed:E&&!!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 M=r.thing;s.thing=null,M.level++;let O=r.cover?.id;r.cover=null;let E=vc(e,n);return {kind:"merge",at:n,level:M.level,...O?{freed:O}:{},hits:E.hits,coins:E.coins}}let d=o.kind==="special"?wn(o.special):void 0,p=r.thing,v=!r.cover||!!rn[r.cover.id]?.mergeInto;if(d?.effect==="joker"&&p?.kind==="item"&&v&&p.level<Pn(p.chain)){s.thing=null,p.level++;let M=r.cover?.id;r.cover=null;let O=vc(e,n);return {kind:"joker",at:n,level:p.level,...M?{freed:M}:{},hits:O.hits,coins:O.coins}}if(d?.effect==="split"&&p?.kind==="item"&&!r.cover&&p.level>=2){s.thing=null;let M=Os(e,n);return M?(p.level--,e.cells[M.row][M.col].thing=Ro(e,p.chain,p.level),{kind:"split",at:n,level:p.level,second:M,hits:[],coins:0}):(s.thing=o,Ts(t))}return p?r.cover?Ts(t):(s.thing=p,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(),d=Math.max(1,Math.min(mi,s.level)),p=d>=3&&o<hc?3:o<(fc[d-1]??0)+n?2:1,v=Ro(e,s.chain,Math.min(p,Pn(s.chain)));return e.cells[r.row][r.col].thing=v,{at:r,thing:v,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 d=0;d<(r.amount??3);d++){let p=Os(e,t);if(!p)break;let v=e.chains[Math.floor(e.rand()*e.chains.length)]??_o[0].id,M=Ro(e,v,Math.min(Pn(v),Ap(e.rand())));e.cells[p.row][p.col].thing=M,o.push({at:p,thing:M});}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 d=0;d<e.rows;d++)for(let p=0;p<e.cols;p++){let v=e.cells[d][p];if(!Ds(o.thing,v))continue;let M=(o.thing.kind==="gen"?100:0)+o.thing.level-(v.cover?.5:0);M<r&&(r=M,s=[o.at,{col:p,row:d}]);}return s}function ir(e,t){let n=new Set,s=[],r=bn(e);for(let o of t){let d=r.find(p=>p.thing.kind==="item"&&!p.cell.cover&&!n.has(p.thing.id)&&p.thing.chain===o.chain&&p.thing.level===o.level);if(!d)return null;n.add(d.thing.id),s.push(d.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(d=>d.thing.kind==="item"&&!d.cell.cover).sort((d,p)=>d.thing.level-p.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(v=>v.thing.kind==="item"&&!v.cell.cover&&v.thing.level<Pn(v.thing.chain)&&!s.some(M=>M.col===v.at.col&&M.row===v.at.row));if(o.length===0)break;let d=v=>n.some(M=>M.chain===v.thing.chain&&M.level===v.thing.level+1);o.sort((v,M)=>Number(d(M))-Number(d(v))||v.thing.level-M.thing.level);let p=o[0];p.thing.level++,s.push(p.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=c=>nn(t,c),s=e$1.rng.stream("merge"),r=$r(1,n("difficulty")),o=_i(sr.start,["garden"],()=>s.next()),d=Q(),p=new Map,v=new Map,M=null,O=[],E=[],I=0,K=0,z=0,ne=0,ae=0,j$1=0,ue=0,fe=0,ie=false,xe=false,se=null,_e=[],Ae=()=>Nr.find(c=>c.id===e$1.vars["meta:hero"])??Nr[0],be=()=>Ss(Ae().skill),oe=()=>e$1.vars.reviving===true,me=()=>be().charge,Se=()=>Wr(e$1,"meta:luck"),Ee=()=>O.flatMap(c=>c.order.wants);function Q(){return Fn(Ce(e$1),o.cols,o.rows,{top:.3,bottom:.86,widthShare:.94})}let Re=()=>d.cell,We=new Set,we=(c,y,i,u,g=1)=>{We.add(c);let T=v.get(c);(T===void 0||!e$1.isAlive(T))&&(T=e$1.create(),e$1.set(T,Ac,{id:c}),v.set(c,T)),e$1.set(T,e,{x:y,y:i,scale:g}),e$1.set(T,f,u);},ee=()=>{for(let[c,y]of [...v])We.has(c)||(e$1.destroy(y),v.delete(c));},Le=c=>{if(c.kind==="special")return wn(c.special)?.art??"chest";let y=gn(c.chain);return c.kind==="gen"?y?.gen??"chest":`${y?.prefix??"item"}${Math.min(c.level,y?.levels??8)}`},ye=c=>{let y=Re(),i=c.kind==="gen"?.94:.92;return {shape:"sprite",art:Le(c),w:y*i,h:y*i,depth:3}},ke=()=>{let c=new Map(bn(o).map(y=>[y.thing.id,y]));for(let[y,i]of [...p])c.has(y)||(e$1.destroy(i),p.delete(y));for(let[y,i]of c){let u=p.get(y);if(u===void 0){u=e$1.create();let w=Ze(d,i.at.col,i.at.row);e$1.set(u,e,{x:w.x,y:w.y,scale:.3}),p.set(y,u);}e$1.set(u,To,{id:y,col:i.at.col,row:i.at.row});let g=ye(i.thing),T=i.cell.cover&&rn[i.cell.cover.id]?.hides;e$1.set(u,f,{...g,alpha:T?0:1,depth:M?.id===y?30:3});}Ue(),lt();},Ue=()=>{nt(e$1,Di);let c=Re();for(let y=0;y<o.rows;y++)for(let i=0;i<o.cols;i++){let u=o.cells[y][i],g=Ze(d,i,y);for(let[T,w,N]of [["b",u.block,3],["c",u.cover,5]]){if(!w)continue;let $=rn[w.id],te=$?.art[Math.min($.art.length,Math.max(1,w.hp))-1]??"mg_box",le=e$1.create();e$1.set(le,Di,{key:`${T}${i},${y}`}),e$1.set(le,e,{x:g.x,y:g.y}),e$1.set(le,f,{shape:"sprite",art:te,w:c*.98,h:c*.98,depth:N,alpha:w.id==="bubble"&&(w.ttl??99)<=3?.55+.4*Math.abs(Math.sin(e$1.time*6)):1});}}},Y=()=>{nt(e$1,Dc),Ot(e$1,"board",d.top+d.cell*o.rows*.3);let c=Re(),y=Ze(d,(o.cols-1)/2,(o.rows-1)/2),i=c*.22,u=(g,T,w)=>{let N=e$1.create();e$1.set(N,Dc,{i:0}),e$1.set(N,e,{x:g,y:T}),e$1.set(N,f,w);};u(y.x,y.y,{shape:"sprite",art:"panel",w:c*o.cols+i*2,h:c*o.rows+i*2,color:"panel",alpha:.9,depth:-10});for(let g=0;g<o.rows;g++)for(let T=0;T<o.cols;T++){if(o.cells[g][T].hole)continue;let w=Ze(d,T,g);u(w.x,w.y,{shape:"sprite",art:"cell",w:c-3,h:c-3,color:(g+T)%2?"panel":"ground",alpha:.85,depth:-9});}},Me=()=>Math.max(1,r.def.visible),Xe=c=>{let y=Ce(e$1),i=Me(),u=Math.min(y.w*.3,Re()*2.6),g=y.w/2+(c-(i-1)/2)*(u+Re()*.2),T=u*(i>2?.62:.72),w=y.h*.118+T/2,N=d.top-Re()*.18;return {x:g,y:w,w:u,h:T,feet:N}},at=(c,y,i)=>{let u=Xe(c),g=Math.max(24,(u.feet-(u.y+u.h/2))*1.05),T=i?-g:u.x,w=e$1.create();return e$1.set(w,e,{x:T,y:u.feet-g/2}),e$1.set(w,f,{shape:"actor",cast:y.vip?"boss":"helper",variant:y.vip?7:s.int(0,99),h:g,pose:i?"walk":"idle",facing:1,speed:Oi,depth:6}),e$1.set(w,zr,{slot:c,to:u.x,leaving:-1}),w},Te=c=>{for(let y=0;y<Me();y++){if(O.some(u=>u.slot===y))continue;let i=E.shift();i&&O.push({order:i,slot:y,customer:at(y,i,c)});}},Wt=(c,y)=>{for(let i of c.query(zr)){let u=c.need(i,zr),g=c.need(i,e),T=c.need(i,f);if(T.shape!=="actor")continue;if(u.leaving>=0){u.leaving+=y,u.leaving>.7&&(T.pose="walk",T.facing=1,g.x+=Oi*1.4*y);continue}let w=u.to-g.x;Math.abs(w)>1?(g.x+=Math.sign(w)*Math.min(Math.abs(w),Oi*2*y),T.pose="walk",T.facing=w>0?1:-1):T.pose==="walk"&&(g.x=u.to,T.pose="idle");}},Ge=c=>Math.max(1,Math.round(c.wants.reduce((y,i)=>y+i.level,0)*n("orderReward")*(c.vip?3:1)*(1+Wr(e$1,"meta:reward")))),qe=c=>{let y=ir(o,c.order.wants);if(!y)return false;let i=Xe(c.slot);for(let T of y){let w=Ze(d,T.col,T.row);G(e$1,{kind:"burst",x:w.x,y:w.y,color:"coin",n:8,size:Re()*.8}),Ri(o,T);}let u=Ge(c.order);Fe(e$1,"coins",u),Fe(e$1,"score",u*25),G(e$1,{kind:"burst",x:i.x,y:i.y,color:"coin",n:14,size:i.w*.8}),G(e$1,{kind:"pop",x:i.x,y:i.y-i.h*.5,text:`+${u}`,color:"coin",size:Math.round(i.h*.42)}),e$1.emit("coin-collected",{value:u}),e$1.emit("order-filled",{reward:u,vip:c.order.vip}),vt(e$1,"merge-order"),ae++;let g=e$1.get(c.customer,zr);return g&&(g.leaving=0,ze(e$1,c.customer,"cheer"),rr(e$1,c.customer,2.4)),O=O.filter(T=>T!==c),Te(true),ke(),O.length===0&&E.length===0&&dt(),true},et=(c,y,i,u,g,T)=>{let w=Math.max(8,u*.11);we(`${c}:bg`,y,i,{shape:"rect",w:u,h:w,color:"#000000",alpha:.5,radius:w/2,depth:69});let N=Math.max(1,(u-4)*Math.max(0,Math.min(1,g)));we(`${c}:fill`,y-(u-4)/2+N/2,i,{shape:"rect",w:N,h:w-4,color:T,radius:(w-4)/2,depth:69.1});},rt=()=>{let c=Ce(e$1),y=Math.min(c.w,c.h),i=Re(),u=(H,X,q,x,S="text",a=y*.045,k=70)=>we(H,X,q,{shape:"text",text:x,size:Math.round(a),color:S,bold:true,depth:k});_e=[],We.clear();let g=c.h*.085;we("h:en:i",c.w*.1,g,{shape:"sprite",art:"mg_energy",w:y*.07,h:y*.07,depth:70}),u("h:en",c.w*.1+y*.075,g,String(I),I<=3&&z===0?"danger":"text",y*.06),z>0&&u("h:free",c.w*.1+y*.17,g,`+${z}`,"secondary",y*.04);let T=O.length+E.length;we("h:ord:i",c.w*.8,g,{shape:"sprite",art:"ticket",w:y*.075,h:y*.05,color:"panel",depth:70}),u("h:ord",c.w*.8+y*.08,g,String(T),"text",y*.05);for(let H of O){let X=Xe(H.slot);ir(o,H.order.wants)!==null&&we(`h:t${H.slot}:glow`,X.x,X.y,{shape:"rect",w:X.w*1.08,h:X.h*1.14,color:"accent",alpha:.45+.3*Math.sin(e$1.time*6),radius:X.h*.2,depth:7.9}),we(`h:t${H.slot}`,X.x,X.y,{shape:"sprite",art:"ticket",w:X.w,h:X.h,color:H.order.vip?"coin":"panel",depth:8});let x=H.order.wants.length,S=Math.min(X.h*.58,X.w*.86/x);H.order.wants.forEach((a,k)=>{let A=X.x+(k-(x-1)/2)*S*1.05,l=X.y-X.h*.12,h=gn(a.chain);we(`h:t${H.slot}:${k}`,A,l,{shape:"sprite",art:`${h?.prefix??"item"}${Math.min(a.level,h?.levels??8)}`,w:S,h:S,depth:8.1}),ir(o,[a])?u(`h:t${H.slot}:${k}:ok`,A+S*.32,l+S*.32,"\u2713","accent",S*.42,8.2):u(`h:t${H.slot}:${k}:lv`,A+S*.34,l+S*.34,String(a.level),"coin",S*.3,8.2);}),we(`h:t${H.slot}:c`,X.x-X.w*.1,X.y+X.h*.3,{shape:"sprite",art:"coin",w:X.h*.19,h:X.h*.19,depth:8.1}),u(`h:t${H.slot}:cv`,X.x+X.w*.07,X.y+X.h*.3,String(Ge(H.order)),"coin",X.h*.2,8.1),_e.push({id:`order${H.slot}`,x:X.x,y:X.y,r:X.w*.5});}let w=Ee();for(let H of bn(o)){if(H.cell.cover&&rn[H.cell.cover.id]?.hides)continue;let X=p.get(H.thing.id);if(X===void 0)continue;let q=e$1.need(X,e),x=M?.id===H.thing.id?31:6;if(H.thing.kind==="gen")for(let S=0;S<H.thing.level;S++)we(`h:i${H.thing.id}:s${S}`,q.x+(S-(H.thing.level-1)/2)*i*.2,q.y+i*.38,{shape:"circle",r:i*.075,color:"coin",depth:x});else H.thing.kind==="item"&&(w.some(S=>S.chain===H.thing.chain&&S.level===H.thing.level)&&(we(`h:i${H.thing.id}:ok`,q.x+i*.3,q.y-i*.3,{shape:"circle",r:i*.12,color:"accent",depth:x}),u(`h:i${H.thing.id}:okt`,q.x+i*.3,q.y-i*.3,"\u2713","#ffffff",i*.18,x+.1)),u(`h:i${H.thing.id}:lv`,q.x+i*.3,q.y+i*.3,String(H.thing.level),"coin",i*.22,x));}let N=d.top+i*o.rows+(c.h-(d.top+i*o.rows))*.5,$=Math.min(y*.075,(c.h-(d.top+i*o.rows))*.38),te=c.w*.3,le=ne>=me();_e.push({id:"skill",x:te,y:N,r:$*1.2}),le&&we("h:skill:glow",te,N,{shape:"circle",r:$*1.28,color:"secondary",alpha:.5+.3*Math.sin(e$1.time*7),depth:68.9}),we("h:skill:bg",te,N,{shape:"circle",r:$,color:"panel",alpha:.95,depth:69}),we("h:skill:i",te,N,{shape:"sprite",art:be().art,w:$*1.4,h:$*1.4,alpha:le?1:.45,depth:69.2}),et("h:charge",te+$*2.6,N,$*2.4,ne/me(),"secondary");let ge=c.w*.88;_e.push({id:"bin",x:ge,y:N,r:$*1.1});let He=M?p.get(M.id):void 0,je=He!==void 0?e$1.need(He,e):null,st=je!==null&&Math.hypot(je.x-ge,je.y-N)<$*1.3;we("h:bin:bg",ge,N,{shape:"circle",r:$,color:st?"danger":"panel",alpha:.95,depth:69}),we("h:bin",ge,N,{shape:"sprite",art:"mg_bin",w:$*1.3,h:$*1.3,alpha:M?1:.7,depth:69.2}),(se===null||!e$1.isAlive(se))&&(se=e$1.create(),e$1.set(se,f,{shape:"actor",cast:Ae().cast,h:$*2.6,pose:"idle",facing:1,depth:20})),e$1.set(se,e,{x:c.w*.11,y:N-$*.1});let Z=e$1.need(se,f);Z.shape==="actor"&&(Z.h=$*2.6),e$1.vars.mg_buttons=_e.map(H=>`${H.id}@${Math.round(H.x)},${Math.round(H.y)}`).join(";"),ee();},lt=()=>{e$1.vars.energy=I,e$1.vars.mg_free=z,e$1.vars.mg_charge=Math.floor(ne),e$1.vars.orders_left=O.length+E.length,e$1.vars.mg_orders=O.slice().sort((c,y)=>c.slot-y.slot).map(c=>c.order.wants.map(y=>`${y.chain}:${y.level}`).join("+")).join("|"),e$1.vars.level_progress=r.orders.length?ae/r.orders.length:0;},ct=()=>{nt(e$1,To),nt(e$1,Di),nt(e$1,Ac),nt(e$1,zr),p.clear(),v.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()),d=Q(),Y(),M=null,O=[],E=[...r.orders],I=Math.max(0,r.energy+Math.round(Wr(e$1,"meta:energy"))),K=I,z=0,ne=0,ae=0,j$1=0,ue=0,fe=0,ie=false,xe=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,Te(false),ke();},dt=()=>{xe||(e$1.vars.stars=Math.min(ie?1:3,_s(I/Math.max(1,K))),Fe(e$1,"score",I*n("energyBonus")),G(e$1,{kind:"flash",color:"coin"}),ot("cleared"));},ot=c=>{if(xe)return;xe=true;let y=c==="cleared";y&&e$1.vars["meta:first_clear"]===true&&Fe(e$1,"coins",r.firstClearGold),y||(e$1.vars.stars=0),e$1.vars.reviving=false,lt(),e$1.emit($t,{reason:c,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:j$1}});},Pe=()=>{if(e$1.vars.revive_ready===true&&!ie){e$1.vars.reviving=true,e$1.emit(Vt,{});return}ot("out-of-energy");},bt=()=>{oe()&&(ie=true,e$1.vars.reviving=false,I+=Rs,Ti(o,"joker",{col:Math.floor(o.cols/2),row:Math.floor(o.rows/2)}),G(e$1,{kind:"flash",color:"coin"}),ke());},Ke=()=>{if(I>0||z>0||ne>=me()||O.some(i=>ir(o,i.order.wants))||Tc(o))return true;let c=[...Ee(),...E.flatMap(i=>i.wants)],y=bn(o);for(let i of y)if(!(!Br(o,i.at)||i.thing.kind!=="item")&&c.some(u=>u.chain===i.thing.chain&&u.level>i.thing.level)&&y.some(u=>Ds(i.thing,u.cell)))return true;return false},At=c=>{let y=Re(),i=Ze(d,c.at.col,c.at.row);if(c.kind==="merge"||c.kind==="joker"){let u=o.cells[c.at.row][c.at.col].thing,g=gn(u.chain)?.color??"coin";G(e$1,{kind:"ring",x:i.x,y:i.y,color:g,size:y*1.4}),G(e$1,{kind:"burst",x:i.x,y:i.y,color:"coin",n:8,size:y*.8});let T=p.get(u.id);T!==void 0&&(e$1.need(T,e).scale=1.35),j$1++,ne=Math.min(me(),ne+1+Wr(e$1,"meta:charge")),Fe(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)&&G(e$1,{kind:"flash",color:"coin"});for(let w of O)w.order.wants.some(N=>N.chain===u.chain&&N.level===u.level)&&ze(e$1,w.customer,"wave");}c.kind==="split"&&G(e$1,{kind:"ring",x:i.x,y:i.y,color:"secondary",size:y*1.2}),c.freed&&e$1.emit("obstacle-cleared",{kind:c.freed});for(let u of c.hits){let g=Ze(d,u.at.col,u.at.row);G(e$1,{kind:"burst",x:g.x,y:g.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});}c.coins>0&&(Fe(e$1,"coins",c.coins),e$1.emit("coin-collected",{value:c.coins}),G(e$1,{kind:"pop",x:i.x,y:i.y-y*.5,text:`+${c.coins}`,color:"coin",size:Math.round(y*.4)})),c.hits.length&&G(e$1,{kind:"shake",power:.25});},en=c=>{if(I<=0&&z<=0){let T=Ze(d,c.col,c.row);G(e$1,{kind:"pop",x:T.x,y:T.y-Re()*.5,text:"0",color:"danger",size:Math.round(Re()*.4)});return}let y=Mc(o,c,Se()),i=Ze(d,c.col,c.row);if(!y){G(e$1,{kind:"shake",power:.2}),G(e$1,{kind:"pop",x:i.x,y:i.y-Re()*.5,text:"\u2715",color:"danger",size:Math.round(Re()*.45)});return}z>0?z--:I--,vt(e$1,"merge-generate");let u=p.get(o.cells[c.row][c.col].thing.id);u!==void 0&&(e$1.need(u,e).scale=1.2),G(e$1,{kind:"burst",x:i.x,y:i.y,color:gn(y.thing.chain)?.color??"accent",n:6,size:Re()*.7}),e$1.emit("item-spawned",{level:y.thing.level,chain:y.thing.chain}),ke();let g=p.get(y.thing.id);g!==void 0&&e$1.set(g,e,{x:i.x,y:i.y,scale:.4});for(let T of y.burst){let w=Ze(d,T.col,T.row);G(e$1,{kind:"burst",x:w.x,y:w.y,color:"#ffffff",n:10,size:Re()});}},Rt=c=>{let y=_c(o,c);if(!y)return;let i=Ze(d,c.col,c.row);G(e$1,{kind:"ring",x:i.x,y:i.y,color:"coin",size:Re()*1.6}),y.energy>0&&(I+=y.energy,G(e$1,{kind:"pop",x:i.x,y:i.y-Re()*.5,text:`+${y.energy}`,color:"coin",size:Math.round(Re()*.45)})),ke();for(let u of y.spawned){let g=p.get(u.thing.id);g!==void 0&&e$1.set(g,e,{x:i.x,y:i.y,scale:.4});}},tn=()=>{let c=be();if(ne<c.charge)return false;let y=1+Wr(e$1,"meta:skill"),i=Math.max(1,Math.round(c.count*y));if(ne=0,se!==null&&ze(e$1,se,"cheer"),G(e$1,{kind:"flash",color:"secondary"}),c.effect==="upgrade")for(let u of Oc(o,i,[...Ee(),...E.slice(0,2).flatMap(g=>g.wants)])){let g=Ze(d,u.col,u.row);G(e$1,{kind:"ring",x:g.x,y:g.y,color:"secondary",size:Re()*1.4});}else if(c.effect==="free")z+=i;else for(let u=0;u<i;u++)Ti(o,"joker",{col:Math.floor(o.cols/2),row:Math.floor(o.rows/2)});return e$1.emit("skill-cast",{id:c.id}),vt(e$1,"merge-skill"),ke(),true},Et=(c,y)=>_e.find(i=>Math.hypot(c-i.x,y-i.y)<=i.r);e$1.on(j,c=>{let y=c;if(!(!Je(e$1)||Kn(e$1)||xe||oe())){if(y.type==="press"){Dt(e$1),fe=0;let i=Tn(d,y.x,y.y);if(!i||!Br(o,i))return;let u=o.cells[i.row][i.col].thing.id,g=p.get(u);if(g===void 0)return;let T=e$1.need(g,e);M={id:u,from:i,dx:T.x-y.x,dy:T.y-y.y,x0:y.x,y0:y.y},e$1.need(g,f).depth=30;}else if(y.type==="move"&&M){let i=p.get(M.id);if(i===void 0)return;let u=e$1.need(i,e);u.x=y.x+M.dx,u.y=y.y+M.dy,u.scale=1.12;}else if(y.type==="release"&&M){let i=M;M=null;let u=p.get(i.id);if(u!==void 0&&(e$1.need(u,f).depth=3),Math.hypot(y.x-i.x0,y.y-i.y0)<Re()*.3)return;let g=Et(y.x,y.y),T=o.cells[i.from.row][i.from.col].thing;if(g?.id==="bin"&&T&&T.kind!=="gen"){Ri(o,i.from),vt(e$1,"merge-bin"),ke();return}let w=g?.id.startsWith("order")?O.find(te=>`order${te.slot}`===g.id):void 0;if(w&&T?.kind==="item"&&w.order.wants.some(te=>te.chain===T.chain&&te.level===T.level)&&qe(w))return;let N=Tn(d,y.x,y.y);if(!N)return;let $=Ec(o,i.from,N);$.kind!=="none"&&At($),ke();}else if(y.type==="tap"){fe=0;let i=Et(y.x,y.y);if(i?.id==="skill"){tn();return}if(i?.id.startsWith("order")){let T=O.find(w=>`order${w.slot}`===i.id);T&&qe(T);return}let u=Tn(d,y.x,y.y),g=u?o.cells[u.row][u.col].thing:null;if(!u||!g||!Br(o,u))return;if(g.kind==="gen")en(u);else if(g.kind==="special")Rt(u);else {let T=O.find(w=>w.order.wants.some(N=>N.chain===g.chain&&N.level===g.level)&&ir(o,w.order.wants));T&&qe(T);}}}}),e$1.on(Nt,()=>{ct(),e$1.vars.level=r.level;}),e$1.on(zt,ct),e$1.on(Gt,bt),e$1.on(Kt,()=>{oe()&&(e$1.vars.reviving=false,ot("out-of-energy"));}),e$1.on(Bt,c=>{We.clear(),ee(),_e=[],se!==null&&e$1.isAlive(se)&&Qe(e$1,se,c.reason==="cleared"?"dance":"idle");}),e$1.on(k,()=>{d=Q(),Y();for(let c of O){let y=Xe(c.slot),i=e$1.get(c.customer,zr);i&&(i.to=y.x);let u=e$1.get(c.customer,e),g=Math.max(24,(y.feet-(y.y+y.h/2))*1.05);u&&e$1.set(c.customer,e,{x:y.x,y:y.feet-g/2});let T=e$1.get(c.customer,f);T?.shape==="actor"&&(T.h=g);}ke();});let L=c=>{let y=Math.min(1,c*16);for(let[i,u]of p){if(M?.id===i)continue;let g=e$1.get(u,To);if(!g)continue;let T=e$1.need(u,e),w=Ze(d,g.col,g.row);T.x+=(w.x-T.x)*y,T.y+=(w.y-T.y)*y;let N=T.scale??1;T.scale=N+(1-N)*Math.min(1,c*10);}},B=c=>{let y=O.find(u=>ir(o,u.order.wants));if(y&&(!ht(c,"merge-order")||fe>6)){let u=Xe(y.slot);return ft(c,"tap",{x:u.x,y:u.y},void 0,Re()*1.1)}let i=Rc(o,{gens:false});if(i&&(!ht(c,"merge-merge")||fe>6))return ft(c,"swipe",Ze(d,i[0].col,i[0].row),Ze(d,i[1].col,i[1].row),Re()*1.1);if(ne>=me()&&!ht(c,"merge-skill")){let u=_e.find(g=>g.id==="skill");if(u)return ft(c,"tap",u,void 0,Re()*1.1)}if(!ht(c,"merge-generate")||fe>6){let u=bn(o).find(g=>g.thing.kind==="gen"&&!g.cell.cover);u&&(I>0||z>0)&&ft(c,"tap",Ze(d,u.at.col,u.at.row),void 0,Re()*1.1);}},f$1=0;e$1.addSystem({id:"merge",order:0,run(c,y){Wt(c,y),L(y),!(!Je(c)||xe)&&(ue+=y,fe+=y,rt(),++f$1%20===0&&o.cells.some(i=>i.some(u=>u.cover?.ttl!==void 0&&u.cover.ttl<=3))&&Ue(),!(oe()||M)&&(un(c)||B(c),Ke()||Pe()));}}),ct();}};var Pt=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,d=Object.keys(Ls).filter(v=>Ls[v]<=n),p=Object.keys(Ls).find(v=>Ls[v]===n)??null;return {level:n,world:s,index:r,boss:o,features:d,fresh:p,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",qt=b("platformer.body"),it=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=L=>nn(t,L),s=_r(e$1),r=Hr(1,n("difficulty")),o=[],d=0,p=null,v=0,M={x:2,y:8},O=3,E=3,I=0,K=false,z=false,ne=0,ae=0,j$1=0,ue=false,fe=false,ie=[],xe=[false,false,false],se=new Map,_e=new Map,Ae=()=>Vr.find(L=>L.id===e$1.vars["meta:hero"])??Vr[0],be=()=>e$1.vars.reviving===true,oe=()=>{let L=Number(e$1.vars.view_w??720),B=Number(e$1.vars.view_h??1280);return Math.min(L/8,B*.66/10)},me=()=>Number(e$1.vars.view_h??1280)*.86-10*oe(),Se=()=>Number(e$1.vars.view_w??720)/oe(),Ee=(L,B)=>{if(B<0)return ".";if(L<0||L>=d)return "#";if(B>=10)return ".";let f=o[B]?.[L]??".";return f==="_"&&(se.get(`${L},${B}`)??0)>.5?".":f},Q=L=>L==="#",Re=L=>L==="="||L==="_"||L==="^",We=()=>{for(let w of e$1.query(it))e$1.destroy(w);for(let w of e$1.query(Oo))e$1.destroy(w);se.clear(),r=Hr(jn(e$1,"meta:chapter")||1,n("difficulty"));let L=e$1.rng.stream(`platformer-level-${r.level}`),B=ws.filter(w=>w.needs.every(N=>r.features.includes(N))),f=[],c=r.fresh!==null?B.find(w=>w.needs.includes(r.fresh)):void 0;for(c&&f.push(c);f.length<r.rooms;)f.push(L.pick(B));let y=Math.ceil(f.length/2),i=[wc,...f.slice(0,y),Pc,...f.slice(y),r.boss?Ic:Cc];o=Array.from({length:10},(w,N)=>i.map($=>$.rows[N]??"").join("")),d=o[0].length;let u=[];for(let w=0;w<10;w++)for(let N=0;N<d;N++)o[w][N]==="*"&&u.push({c:N,r:w});let g=u.length<=3?u:[u[0],u[Math.floor(u.length/2)],u[u.length-1]];for(let w=g.length;w<3;w++)g.push({c:Math.floor(d*(w+1)/4),r:5});let T=0;for(let w=0;w<10;w++)for(let N=0;N<d;N++){let $=o[w][N],te={x:N+.5,y:w+1};$==="P"?M={...te}:$==="o"?Le("coin",te.x,w+.85,.5,.5):$==="H"&&T++<1?Le("heart",te.x,w+.9,.6,.6):$==="K"?Le("key",te.x,w+.9,.6,.6):$==="B"?Le("chest",te.x,te.y,1,.8):$==="T"?Le("spring",te.x,te.y,1,.5):$==="M"?Le("mover",te.x+.5,w+.4,2,.4).baseX=te.x+.5:$==="C"?Le("checkpoint",te.x,te.y,.6,1.6):$==="E"?Le("flag",te.x,te.y,.8,2.6):$==="W"?Le("walker",te.x,te.y,.8,1):$==="S"?Le("spiky",te.x,te.y,.8,1):$==="J"?Le("hopper",te.x,te.y,.8,1):$==="F"?Le("flyer",te.x,te.y,.9,.8):$==="G"&&Le("gunner",te.x,te.y,.8,1.1),/[PoHKBTMCEWSJFG*]/.test($)&&(o[w]=we(o[w],N,"."));}if(g.forEach((w,N)=>Le("star",w.c+.5,w.r+.95,.85,.85).tag=String(N)),r.boss){let w=Le("boss",d-5,8,2.2,2.4);w.hp=r.bossHp,w.tag="walk",w.t=2;}ye();},we=(L,B,f)=>L.slice(0,B)+f+L.slice(B+1),ee=(L,B,f,c)=>{switch(L){case "walker":return {shape:"actor",cast:"foe",h:f*c*1.35,pose:"walk",depth:8};case "spiky":return {shape:"actor",cast:"foe2",h:f*c*1.4,pose:"walk",depth:8};case "hopper":return {shape:"actor",cast:"foe3",h:f*c*1.35,pose:"idle",depth:8};case "flyer":return {shape:"actor",cast:"foe5",h:f*c*1.4,pose:"air",depth:8};case "gunner":return {shape:"actor",cast:"foe4",h:f*c*1.3,pose:"idle",depth:8};case "boss":return {shape:"actor",cast:"boss",h:f*c*1.2,pose:"walk",depth:8};case "bullet":return {shape:"sprite",art:"shot",color:"danger",w:B*c,h:f*c,depth:9};case "wave":return {shape:"sprite",art:"burst",color:"danger",w:B*c,h:f*c,depth:9};case "coin":return {shape:"sprite",art:"coin",w:B*c,h:f*c,depth:7};case "star":return {shape:"sprite",art:"bigstar",w:B*c,h:f*c,depth:7};case "heart":return {shape:"sprite",art:"heart",w:B*c,h:f*c,depth:7};case "key":return {shape:"sprite",art:"key",w:B*c,h:f*c,depth:7};case "chest":return {shape:"sprite",art:"chest",w:B*c,h:f*c*1.1,depth:6};case "spring":return {shape:"sprite",art:"spring",w:B*c,h:f*c*1.4,depth:6};case "mover":return {shape:"tile",art:"platform",w:B*c,h:f*c,unit:c,depth:5};case "checkpoint":return {shape:"sprite",art:"flag",color:"muted",w:B*c*1.6,h:f*c,depth:5};case "flag":return {shape:"sprite",art:"flag",w:B*c*1.4,h:f*c,depth:5}}};function Le(L,B,f$1,c,y){let i=e$1.create(),u={kind:L,vx:0,vy:0,dir:-1,t:0,baseX:B,baseY:f$1,hp:1,tag:"",safe:0};return e$1.set(i,it,u),e$1.set(i,qt,{x:B,y:f$1,w:c,h:y}),e$1.set(i,e,{x:0,y:0}),e$1.set(i,f,ee(L,c,y,oe())),e$1.need(i,it)}function ye(){for(let B of e$1.query(Oo))e$1.destroy(B);let L=(Number(e$1.vars.view_h??1280)-(me()+10*oe()))/oe()+.5;for(let B=0;B<10;B++){let f=0;for(;f<d;){let c=o[B][f];if(c==="."||c==="_"){c==="_"&&ke("_",f,B,1,.45),f++;continue}let y=c==="#"&&Ee(f,B-1)!=="#",i=f;for(;i<d&&o[B][i]===c&&(c!=="#"||Ee(i,B-1)!=="#"===y);)i++;if(c==="#"&&y){let u=0;for(;B+u<10&&o[B+u][f]==="#";)u++;ke("#",f,B,i-f,u+(B+u>=10?L:0));}else c!=="#"&&ke(c,f,B,i-f,c==="="?.45:.7);f=i;}}}function ke(L,B,f$1,c,y){let i=oe(),u=e$1.create();e$1.set(u,Oo,{char:L}),e$1.set(u,qt,{x:B+c/2,y:L==="^"?f$1+1:f$1+y,w:c,h:y}),e$1.set(u,e,{x:0,y:0});let g=L==="^"?{shape:"tile",art:"spike",w:c*i,h:y*i,unit:i,depth:4}:L==="#"?{shape:"tile",art:"ground",w:c*i,h:y*i,unit:i*1.2,depth:3}:{shape:"tile",art:"platform",w:c*i,h:y*i,unit:i,depth:3,...L==="_"?{color:"muted",alpha:.85}:{}};e$1.set(u,f,g),L==="_"&&e$1.set(u,it,{kind:"mover",vx:0,vy:0,dir:0,t:0,baseX:B,baseY:f$1,hp:0,tag:"crumble",safe:0});}let Ue=()=>{(p===null||!e$1.isAlive(p))&&(p=e$1.create(),e$1.set(p,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(p,qt,{x:M.x,y:M.y,w:Np,h:Bc}),e$1.set(p,e,{x:0,y:0})),e$1.set(p,f,{shape:"actor",cast:Ae().cast,h:Bc*oe()*1.25,pose:"idle",depth:10});},Y=()=>Math.sqrt(2*cr*Cp*(1+jn(e$1,"meta:jump"))*(Ae().perk==="jump"?1.15:1)),Me=()=>{if(p===null)return;let L=e$1.need(p,qt),B=e$1.need(p,cn);L.x=M.x,L.y=M.y,B.vx=0,B.vy=0;for(let f of e$1.query(it))(e$1.need(f,it).kind==="bullet"||e$1.need(f,it).kind==="wave")&&e$1.destroy(f);},Xe=()=>{en(),We(),E=n("lives")+jn(e$1,"meta:hearts")+(Ae().perk==="heart"?1:0),O=E,I=0,K=false,z=false,ne=0,ae=0,j$1=0,ue=false,fe=!r.boss,xe.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,v=0,Ue(),Me(),p!==null&&(e$1.need(p,cn).facing=1,Qe(e$1,p,"idle")),r.boss&&e$1.emit(Lp,{}),bt(e$1);},at=()=>{!Je(e$1)||be()||p===null||(e$1.need(p,cn).buffer=.13);},Te=()=>{if(p===null)return;let L=e$1.need(p,cn);L.vy<0&&(L.vy*=.5);},Wt=()=>{if(!Je(e$1)||be()||p===null||!ie.includes("dash"))return;let L=e$1.need(p,cn);L.dashCd>0||(L.dash=.2,L.dashCd=.8,L.vy=0,ze(e$1,p,"attack"));},Ge=()=>{if(!Je(e$1)||be()||p===null)return;let L=e$1.need(p,cn);L.swingCd>0||(L.swing=.16,L.swingCd=.32,ze(e$1,p,"attack"));};e$1.on(j,L=>{let B=L;e$1.vars.started_tick!==e$1.tick&&(B.type==="key"&&(B.key==="up"||B.key==="action")?at():B.type==="key-up"&&(B.key==="up"||B.key==="action")?Te():B.type==="key"&&B.key==="down"?Wt():B.type==="tap"?Ge():B.type==="swipe"&&B.dir==="up"&&at());});let qe=(L,B)=>{if(!Je(L)||K)return;K=true;let f=B==="cleared",c=xe.filter(Boolean).length;L.vars.stars=c,f&&L.vars["meta:first_clear"]===true&&Fe(L,"coins",r.firstClearGold),L.vars.score=j$1*n("coinScore")+c*n("starScore")+(f?n("clearBonus"):0),L.vars.reviving=false,f&&L.emit(Ni,{level:r.level}),L.emit($t,{reason:B,stats:{chapter:r.level,seconds:Math.floor(ne),cleared:f,stars:f?c:0,coins:j$1,bosses:r.boss&&fe?1:0}});},et=L=>{if(L.vars.revive_ready===true&&!z){L.vars.reviving=true,L.emit(Vt,{});return}qe(L,"fell");},rt=L=>{be()&&(z=true,L.vars.reviving=false,O=Math.max(2,Math.ceil(E/2)),L.vars.lives=O,I=2.5,Me(),p!==null&&Qe(L,p,"idle"),G(L,{kind:"flash",color:"coin"}));},lt=(L,B)=>{if(p===null||I>0||K)return;let f=L.need(p,cn);f.dash>0||(O--,L.vars.lives=O,L.emit("player-hit",{lives:O}),I=n("graceTime")+jn(L,"meta:grace"),f.vy=-Y()*.55,f.vx=(B===null?-f.facing:Math.sign(L.need(p,qt).x-B)||-f.facing)*5,ze(L,p,"hit"),G(L,{kind:"shake",power:1.2}),G(L,{kind:"flash",color:"danger"}),O<=0&&et(L));},ct=(L,B,f)=>{let c=L.need(B,it),y=L.need(B,qt),i=oe();G(L,{kind:"burst",x:ot(y.x),y:Pe(y.y-y.h/2),color:"danger",n:12,size:i*.9}),L.emit("enemy-defeated",{kind:c.kind,by:f}),Fe(L,"score",50),L.destroy(B);},dt=(L,B)=>{let f=L.need(B,qt);ae+=1+jn(L,"meta:greed");let c=Math.floor(ae);ae-=c,c>0&&Fe(L,"coins",c),j$1++,L.emit("coin-collected",{value:1}),G(L,{kind:"burst",x:ot(f.x),y:Pe(f.y-f.h/2),color:"coin",n:6,size:oe()*.6}),L.destroy(B);},ot=L=>L*oe()-v*oe(),Pe=L=>me()+L*oe();function bt(L){oe();for(let f$1 of L.query(qt)){let c=L.need(f$1,qt),y=L.get(f$1,e);if(!y)continue;y.x=ot(c.x),y.y=Pe(c.y-c.h/2);let i=L.get(f$1,f);if(i&&i.shape==="actor"&&L.has(f$1,it)){let u=L.need(f$1,it);i.facing=u.dir>=0?1:-1,i.alpha=u.safe>0&&Math.floor(L.time*12)%2===0?.35:1,y.y=Pe(c.y)-i.h/2;}if(i&&i.shape==="actor"&&L.has(f$1,cn)&&(y.y=Pe(c.y)-i.h/2),i&&L.has(f$1,Oo)&&L.need(f$1,Oo).char==="_"){let u=se.get(`${Math.floor(c.x)},${Math.round(c.y-c.h)}`)??0;i.alpha=u>.5?0:u>0?.5+.5*Math.abs(Math.sin(L.time*30)):.85;}}}let Ke=(L,B,f$1,c)=>{let y=_e.get(L);(y===void 0||!e$1.isAlive(y))&&(y=e$1.create(),e$1.set(y,$c,{id:L}),_e.set(L,y)),e$1.set(y,e,{x:B,y:f$1}),e$1.set(y,f,c);},At=L=>{let B=_e.get(L);B!==void 0&&e$1.destroy(B),_e.delete(L);};function en(){for(let L of _e.values())e$1.destroy(L);_e.clear(),nt(e$1,$c);}let Rt=L=>{let B=Number(L.vars.view_w??720),f=Number(L.vars.view_h??1280),c=Math.min(B,f),y=f*.085;Ke("lvl",B*.08,y,{shape:"text",text:`${r.world}-${r.index}`,size:Math.round(c*.042),color:"text",bold:true,depth:42});let i=c*.05;for(let w=0;w<E;w++)Ke(`h${w}`,B*.07+w*i*1.1,y+c*.065,{shape:"sprite",art:"heart",w:i,h:i,alpha:w<O?1:.25,depth:42});for(let w=E;w<12;w++)At(`h${w}`);let u=c*.06;for(let w=0;w<3;w++)Ke(`s${w}`,B/2+(w-1)*u*1.15,y,{shape:"sprite",art:"bigstar",w:u,h:u,alpha:xe[w]?1:.25,depth:42});let g=c*.045,T=String(L.vars.coins??0);if(Ke("coin:i",B*.92-T.length*g*.6-g*.7,y,{shape:"sprite",art:"coin",w:g,h:g,depth:42}),Ke("coin",B*.92-T.length*g*.6/2,y,{shape:"text",text:T,size:Math.round(g),color:"text",bold:true,depth:42}),ue?Ke("key",B*.92-g*.3,y+c*.065,{shape:"sprite",art:"key",w:g,h:g,depth:42}):At("key"),r.boss){let w=L.query(it).find(ge=>L.need(ge,it).kind==="boss"),N=w!==void 0?L.need(w,it).hp/r.bossHp:0,$=B*.5,te=Math.max(10,c*.022);Ke("boss:bg",B/2,y+c*.075,{shape:"rect",w:$,h:te,color:"#000000",alpha:.45,radius:te/2,depth:41});let le=Math.max(0,($-4)*Math.round(N*100)/100);le<1?At("boss:fill"):Ke("boss:fill",B/2-($-4)/2+le/2,y+c*.075,{shape:"rect",w:le,h:te-4,color:"danger",radius:(te-4)/2,depth:41.1});}};e$1.on(Nt,()=>{Xe(),e$1.vars.level=r.level;}),e$1.on(zt,Xe),e$1.on(Gt,()=>rt(e$1)),e$1.on(Kt,()=>{be()&&(e$1.vars.reviving=false,qe(e$1,"fell"));}),e$1.on(Bt,L=>{p!==null&&e$1.isAlive(p)&&Qe(e$1,p,L.reason==="cleared"?"dance":"die"),en();}),e$1.on(k,()=>{Ot(e$1,"side",me()+8*oe()+2);let L=oe();for(let B of e$1.query(it)){let f$1=e$1.need(B,it);if(f$1.tag==="crumble")continue;let c=e$1.need(B,qt);e$1.set(B,f,ee(f$1.kind,c.w,c.h,L));}ye(),Ue(),bt(e$1);}),e$1.addSystem({id:"platformer",order:0,run(L,B){if(!Je(L)||p===null||K||be())return;ne+=B,I>0&&(I=Math.max(0,I-B));let f$1=L.need(p,qt),c=L.need(p,cn),y=r.pace;for(let[q,x]of [...se]){let S=x+B;S>3.5?se.delete(q):se.set(q,S);}let i=s.axis().x;if(i!==0&&(c.facing=i),c.dash>0)c.dash-=B,c.vx=c.facing*15,c.vy=0;else {let q=i*Pp,x=c.grounded?60:32;c.vx+=Math.max(-x*B,Math.min(x*B,q-c.vx)),c.vy+=cr*B,c.vy>22&&(c.vy=22);}if(c.dashCd>0&&(c.dashCd-=B),c.swingCd>0&&(c.swingCd-=B),c.swing>0){c.swing-=B;let q={l:c.facing>0?f$1.x:f$1.x-1.4,r:c.facing>0?f$1.x+1.4:f$1.x,t:f$1.y-f$1.h-.2,b:f$1.y};for(let x of L.query(it)){if(!L.isAlive(x)||!L.has(x,it))continue;let S=L.need(x,it);if(!["walker","spiky","hopper","flyer","gunner","boss","bullet"].includes(S.kind))continue;let a=L.need(x,qt);a.x+a.w/2<q.l||a.x-a.w/2>q.r||a.y-a.h>q.b||a.y<q.t||(S.kind==="bullet"?(G(L,{kind:"burst",x:ot(a.x),y:Pe(a.y-a.h/2),color:"text",n:6,size:oe()*.5}),L.destroy(x)):S.kind==="boss"?tn(L,x,"sword"):ct(L,x,"sword"));}}if(c.coyote=c.grounded?.1:Math.max(0,c.coyote-B),c.buffer>0){c.buffer-=B;let q=ie.includes("double")&&c.jumps<2;c.coyote>0||c.grounded?(c.vy=-Y(),c.jumps=1,c.buffer=0,c.grounded=false,c.coyote=0):c.wall!==0&&ie.includes("wall")?(c.vy=-Y()*.95,c.vx=-c.wall*7,c.facing=-c.wall,c.jumps=1,c.buffer=0):q&&c.jumps>=1&&(c.vy=-Y()*.9,c.jumps=2,c.buffer=0,G(L,{kind:"ring",x:ot(f$1.x),y:Pe(f$1.y),color:"text",size:oe()*1.2})),c.buffer===0&&ze(L,p,"jump");}let u=f$1.w/2,g=f$1.x+c.vx*B;c.wall=0;let T=q=>{let x=[];for(let S=Math.floor(q-f$1.h+.05);S<=Math.floor(q-.05);S++)x.push(S);return x};if(c.vx>0){let q=Math.floor(g+u);T(f$1.y).some(x=>Q(Ee(q,x)))&&(g=q-u-.001,c.grounded||(c.wall=1),c.vx=0);}else if(c.vx<0){let q=Math.floor(g-u);T(f$1.y).some(x=>Q(Ee(q,x)))&&(g=q+1+u+.001,c.grounded||(c.wall=-1),c.vx=0);}c.wall===0&&!c.grounded&&i!==0&&T(f$1.y).some(q=>Q(Ee(Math.floor(g+i*(u+.05)),q)))&&(c.wall=i),f$1.x=Math.max(u,Math.min(d-u,g));let w=f$1.y,N=f$1.y+c.vy*B,$=c.grounded;c.grounded=false;let te=[Math.floor(f$1.x-u+.05),Math.floor(f$1.x+u-.05)];if(c.vy>=0){let q=Math.floor(N);for(let x of te){let S=Ee(x,q),a=q;if((Q(S)||Re(S)&&w<=a+.05)&&N>=a){N=a,c.vy=0,c.grounded=true,c.jumps=0,S==="_"&&!se.has(`${x},${q}`)&&se.set(`${x},${q}`,.001),S==="^"&&(lt(L,null),c.vy=-Y()*.7,c.grounded=false);break}}}else {let q=Math.floor(N-f$1.h);te.some(x=>Q(Ee(x,q)))&&(N=q+1+f$1.h,c.vy=0);}f$1.y=N,!$&&c.grounded&&ze(L,p,"jump");for(let q of L.query(it)){let x=L.need(q,it);if(x.kind!=="mover"||x.tag==="crumble")continue;let S=L.need(q,qt),a=S.x;x.t+=B,S.x=x.baseX+Math.sin(x.t*.9)*2.2;let k=S.y-S.h;c.vy>=0&&Math.abs(f$1.x-S.x)<S.w/2+u*.6&&w<=k+.1&&f$1.y>=k-.05&&(f$1.y=k,c.vy=0,c.grounded=true,c.jumps=0,f$1.x+=S.x-a);}if(f$1.y>12&&(lt(L,null),I=Math.max(I,1),!be()&&!K&&Me(),K||be()))return;let le={l:f$1.x-u,r:f$1.x+u,t:f$1.y-f$1.h,b:f$1.y},ge=q=>le.r>q.x-q.w/2&&le.l<q.x+q.w/2&&le.b>q.y-q.h&&le.t<q.y,He=1.2*(1+jn(L,"meta:magnet")),je=f$1.x;for(let q of L.query(it)){if(!L.isAlive(q)||!L.has(q,it))continue;let x=L.need(q,it),S=L.need(q,qt);switch(x.safe>0&&(x.safe-=B),x.kind){case "walker":case "spiky":{x.vx=x.dir*1.6*y;let a=S.x+x.dir*(S.w/2+.05)+x.vx*B,k=Q(Ee(Math.floor(a),Math.floor(S.y-.5))),A=Ee(Math.floor(a),Math.floor(S.y));k||!(Q(A)||Re(A))?x.dir=-x.dir:S.x+=x.vx*B;break}case "hopper":{x.t+=B,x.vy+=cr*.6*B,S.y+=x.vy*B,S.y>=x.baseY&&(S.y=x.baseY,x.vy=0,x.t>1.5/y&&(x.t=0,x.vy=-Math.sqrt(2*cr*.6*2.4))),x.dir=je<S.x?-1:1;break}case "flyer":x.t+=B*y,S.x=x.baseX+Math.sin(x.t*.9)*3,S.y=x.baseY+Math.sin(x.t*1.8)*.9,x.dir=Math.cos(x.t*.9)>=0?1:-1;break;case "gunner":{if(x.dir=je<S.x?-1:1,x.t+=B,x.t>2.2/y&&Math.abs(je-S.x)<9){x.t=0;let a=Le("bullet",S.x+x.dir*.6,S.y-.45,.45,.3);a.vx=x.dir*6*y,a.dir=x.dir,ze(L,q,"attack");}break}case "bullet":case "wave":if(S.x+=x.vx*B,x.t+=B,x.t>(x.kind==="wave"?2.2:3.5)||Q(Ee(Math.floor(S.x),Math.floor(S.y-.1)))){L.destroy(q);continue}break;case "boss":Et(L,q,x,S,je,B);break;case "coin":Math.hypot(S.x-f$1.x,S.y-(f$1.y-f$1.h/2))<He&&He>1.21&&(S.x+=(f$1.x-S.x)*Math.min(1,B*10),S.y+=(f$1.y-f$1.h/2-S.y)*Math.min(1,B*10));break;}if(!(!L.isAlive(q)||!ge(S))){switch(x.kind){case "coin":dt(L,q);break;case "star":{let a=Number(x.tag);xe[a]=true,L.vars.stars=xe.filter(Boolean).length,L.emit("star-collected",{index:a}),G(L,{kind:"ring",x:ot(S.x),y:Pe(S.y-S.h/2),color:"coin",size:oe()*2.4}),G(L,{kind:"flash",color:"coin"}),L.destroy(q);break}case "heart":O=Math.min(E,O+1),L.vars.lives=O,G(L,{kind:"ring",x:ot(S.x),y:Pe(S.y-S.h/2),color:"danger",size:oe()*1.6}),L.destroy(q);break;case "key":ue=true,G(L,{kind:"ring",x:ot(S.x),y:Pe(S.y-S.h/2),color:"coin",size:oe()*1.6}),L.destroy(q);break;case "chest":if(ue&&x.tag!=="open"){x.tag="open",ue=false;for(let k=0;k<15;k++)ae+=1+jn(L,"meta:greed"),j$1++;let a=Math.floor(ae);ae-=a,Fe(L,"coins",a),G(L,{kind:"burst",x:ot(S.x),y:Pe(S.y-S.h/2),color:"coin",n:24,size:oe()*1.4}),G(L,{kind:"pop",x:ot(S.x),y:Pe(S.y-S.h*1.4),text:"+15",color:"coin",size:Math.round(oe()*.5)});}break;case "spring":c.vy>0&&f$1.y-(S.y-S.h)<.5&&(c.vy=-Math.sqrt(2*cr*Ip),c.jumps=1,G(L,{kind:"ring",x:ot(S.x),y:Pe(S.y-S.h),color:"accent",size:oe()*1.4}));break;case "checkpoint":if(x.tag!=="on"){x.tag="on",M={x:S.x,y:S.y};let a=L.need(q,f);a.shape==="sprite"&&(a.color="accent"),L.emit("checkpoint",{}),G(L,{kind:"ring",x:ot(S.x),y:Pe(S.y-S.h/2),color:"accent",size:oe()*2});}break;case "flag":if(fe){qe(L,"cleared");return}break;case "walker":case "hopper":case "flyer":case "gunner":case "spiky":case "boss":{let a=c.vy>0&&f$1.y-(S.y-S.h)<.55&&x.kind!=="spiky";c.dash>0&&x.kind!=="boss"?ct(L,q,"dash"):a?(c.vy=-Y()*.65,c.jumps=1,x.kind==="boss"?tn(L,q,"stomp"):ct(L,q,"stomp")):lt(L,S.x);break}case "bullet":case "wave":lt(L,S.x),L.destroy(q);break;}if(K||be())return}}let st=Se(),Z=Math.max(0,Math.min(Math.max(0,d-st),f$1.x-st*.4+c.facing*st*.08)),H=v;v+=(Z-v)*Math.min(1,B*6),mo(L,(v-H)*oe()),L.vars.level_progress=Math.min(1,f$1.x/Math.max(1,d));let X=L.need(p,f);X.shape==="actor"&&(X.facing=c.facing>=0?1:-1,X.pose=c.grounded?Math.abs(c.vx)>.5?"run":"idle":"air",X.speed=Math.abs(c.vx)*oe(),X.alpha=I>0&&Math.floor(L.time*12)%2===0?.35:1),bt(L),Rt(L);}});function tn(L,B,f){let c=L.need(B,it);c.safe>0||(c.hp--,c.safe=1,ze(L,B,"hit"),G(L,{kind:"shake",power:1}),c.hp<=0&&(fe=true,L.emit(wp,{}),ct(L,B,f),Le("flag",d-2,8,.8,2.6)));}function Et(L,B,f,c,y,i){if(f.t-=i,f.vy+=cr*i,c.y=Math.min(f.baseY,c.y+f.vy*i),c.y>=f.baseY){if(f.tag==="slam-air"){f.tag="walk",f.t=1.6,G(L,{kind:"shake",power:1.4});for(let u of [-1,1]){let g=Le("wave",c.x+u*1.2,f.baseY,.9,.6);g.vx=u*8*r.pace;}}f.vy=0;}if(f.tag==="walk"){if(f.dir=y<c.x?-1:1,c.x+=f.dir*1.4*r.pace*i,f.t<=0){let u=Math.floor(L.rng.next()*3);if(u===0)f.tag="charge",f.t=1.1,f.vx=f.dir*9*r.pace,Qe(L,B,"run");else if(u===1)f.tag="slam-air",f.vy=-Math.sqrt(2*cr*4),ze(L,B,"jump");else {f.tag="walk",f.t=2.4;for(let g of [d-15,d-3])Le("walker",g,f.baseY,.8,1).dir=g<c.x?1:-1;ze(L,B,"cheer");}}}else f.tag==="charge"&&(c.x+=f.vx*i,(f.t<=0||Q(Ee(Math.floor(c.x+Math.sign(f.vx)*1.2),Math.floor(f.baseY-1))))&&(f.tag="walk",f.t=1.8,Qe(L,B,"walk")));c.x=Math.max(d-17.5,Math.min(d-1.2,c.x));}Ot(e$1,"side",me()+8*oe()+2),Xe();}};var Zt=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"),Ne=b("survivors.foe"),fr=b("survivors.shot"),Nn=b("survivors.bullet"),jt=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,d]=s.split(":");r==="w"&&o&&o in vn?t[o]=Number(d):r==="p"&&o&&o in Gr&&(n[o]=Number(d));}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),d=null,p=null,v=0,M={},O={},E={},I=0,K=0,z=0,ne=1,ae=0,j$1=0,ue=[],fe="level",ie=0,xe=0,se=0,_e=false,Ae=0,be=0,oe=300,me=Kr(1,300),Se=false,Ee=null,Q=0,Re=0,We=0,we=0,ee=null,Le=0,ye=0,ke=false,Ue=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},Me=()=>Math.min(Ce(e$1).w,Ce(e$1).h),Xe=()=>Me()/720,at=()=>Me()*.07,Te=()=>{let a=Ce(e$1);return {x:a.w/2,y:a.h/2}},Wt=()=>{let a=A=>O[A]??0,k=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")*Xe()*(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=Me()*.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>k&&(Y.hp+=Y.maxHp-k),Y.hp=Math.min(Y.hp,Y.maxHp),e$1.vars.survivors_build=Ki({weapons:M,passives:O});},Ge=a=>Math.ceil(o("xpFirst")*Math.pow(a,o("xpGrowth"))),qe=()=>Fr.find(a=>a.id===e$1.vars["meta:hero"])??Fr[0],et=()=>{let a=Te(),k=at();(d===null||!e$1.isAlive(d))&&(d=e$1.create(),e$1.set(d,Hs,{size:k})),e$1.need(d,Hs).size=k,e$1.set(d,e,{x:a.x,y:a.y}),e$1.set(d,f,{shape:"actor",cast:qe().cast,h:k*2.3,feet:k*.6,pose:"idle",depth:Ht(e$1,a.y)});},rt=(a,k,A,l)=>{let h=Ue.get(a);(h===void 0||!e$1.isAlive(h))&&(h=e$1.create(),e$1.set(h,Gc,{id:a}),Ue.set(a,h)),e$1.set(h,e,{x:k,y:A}),e$1.set(h,f,l);},lt=a=>{let k=Ue.get(a);k!==void 0&&e$1.destroy(k),Ue.delete(a);},ct=()=>{for(let a of Ue.values())e$1.destroy(a);Ue.clear(),nt(e$1,Gc);},dt=(a,k,A,l,h,D,_,b=41)=>{let m=Math.max(0,Math.min(1,Math.round(D*100)/100));rt(`${a}:bg`,k,A,{shape:"rect",w:l,h,color:"#000000",alpha:.45,radius:h/2,depth:b});let R=Math.max(0,(l-4)*m);R<1?lt(`${a}:fill`):rt(`${a}:fill`,k-(l-4)/2+R/2,A,{shape:"rect",w:R,h:h-4,color:_,radius:(h-4)/2,depth:b+.01});},ot=a=>{let k=Ce(a),A=Me(),l=k.h*.085,h=k.w*.9,D=Math.max(10,A*.026);dt("xp",k.w/2,l,h,D,z/Ge(ne),"accent"),rt("lv",k.w/2+h/2-A*.04,l+D*1.6,{shape:"text",text:`Lv ${ne}`,size:Math.round(A*.032),color:"text",bold:true,depth:42});let _=l+A*.075;if(Ee!==null&&a.isAlive(Ee)&&a.has(Ee,Ne)){let U=a.need(Ee,Ne);dt("boss",k.w/2,_,k.w*.62,Math.max(14,A*.034),U.hp/U.maxHp,"danger"),rt("time",k.w/2,_-A*.05,{shape:"text",text:U.kind==="boss"?"BOSS":"MINI BOSS",size:Math.round(A*.036),color:"danger",bold:true,depth:42}),a.vars.boss_hp=U.hp/U.maxHp;}else lt("boss:bg"),lt("boss:fill"),rt("time",k.w/2,_,{shape:"text",text:Zo(Number(a.vars.time_left??0)),size:Math.round(A*.05),color:"text",bold:true,depth:42}),a.vars.boss_hp=0;let b=Math.round(A*.036);rt("kills:i",k.w*.06,_,{shape:"sprite",art:"skull",w:b*1.1,h:b*1.1,color:"text",depth:42}),rt("kills",k.w*.06+b*.75+String(xe).length*b*.28,_,{shape:"text",text:String(xe),size:b,color:"text",bold:true,depth:42});let m=A*.05,R=0,C=new Set,P=(U,de,ce,he,pe,Be)=>{C.add(U),rt(`b:${U}`,pe,Be,{shape:"sprite",art:de,w:m,h:m,color:ce,alpha:.95,depth:41}),rt(`b:${U}:l`,pe+m*.38,Be+m*.36,{shape:"text",text:he>=5?"\u2605":String(he),size:Math.round(m*.42),color:he>=5?"coin":"text",bold:true,depth:42});};for(let[U,de]of Object.entries(M)){let ce=vn[U];P(U,ce.art,ce.color,de??1,k.w*.06+R*m*1.12,_+A*.075),R++;}R=0;for(let[U,de]of Object.entries(O)){let ce=Gr[U];P(U,ce.art,ce.color,de??1,k.w*.06+R*m*.95,_+A*.075+m*1.1),R++;}for(let U of [...Ue.keys()])if(U.startsWith("b:")){let de=U.slice(2).replace(/:l$/,"");C.has(de)||lt(U);}let W=at(),J=Te();dt("hp",J.x,J.y+W*1.05,W*1.7,Math.max(7,A*.013),Y.hp/Y.maxHp,Y.hp/Y.maxHp>.35?"accent":"danger",40);},Pe=(a=-1)=>{let k=Ce(e$1),A=Me()*.08,l=a>=0?a:s.int(0,3);return {x:l===0?-A:l===1?k.w+A:s.range(-A,k.w+A),y:l===2?-A:l===3?k.h+A:s.range(-A,k.h+A)}},bt=()=>o("foeHp")*me.hp*(1+o("foeHpGrowth")*(be/60)),Ke=(a,k,A=false)=>{let l=Cn[a],h=a==="boss"||a==="miniboss",D=Me()*l.size*(A?1.3:1),_=bt()*l.hp*(A?8:1),b=Mt(e$1,k.x,k.y,{shape:"actor",cast:l.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:Ht(e$1,k.y)},{type:Ne,data:{kind:a,hp:_,maxHp:_,speed:l.speed*Xe()*o("foeSpeed")*(1+Math.min(.5,be/600)),size:D,damage:l.damage*me.damage*o("foeDamage")*(A?1.4:1),xp:l.xp*(A?5:1),elite:A,t:s.range(0,1.5),phase:"walk",vx:0,vy:0,hurtAt:{},next:0}});return (A||h)&&Mt(e$1,k.x,k.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:b}}),b},At=()=>{let a=be/60+me.headStart,k=pn(n,"foes",zc),A=k.filter(_=>Cn[_].from<=a),l=A.length>0?A:[k.reduce((_,b)=>Cn[_].from<=Cn[b].from?_:b)],h=0;for(let _ of l)h+=Cn[_].weight;let D=s.range(0,h);for(let _ of l)if(D-=Cn[_].weight,D<=0)return _;return l[0]??"grunt"},en=()=>e$1.query(Ne).length,Rt=(a,k)=>{let A=be/60+me.headStart,l=o("spawnRate")*(1+o("spawnGrowth")*A);for(Le>0&&(Le-=k,l*=.25),Se&&(l*=.45),ee&&(ee.left-=k,l*=2.6),Ae+=k*l;Ae>=1;)Ae-=1,!(en()>=o("maxFoes"))&&Ke(At(),Pe(ee?ee.side:-1));if(ee&&ee.left<=0&&(ee=null),!Se){if(be>=We){We=be+s.range(26,36);let h=we++%3;if(h===0){let D=Te(),_=12+Math.min(12,Math.floor(A*2)),b=Me()*.62;for(let m=0;m<_;m++){let R=m/_*Math.PI*2;Ke(A>3?"grunt":"swarm",{x:D.x+Math.cos(R)*b,y:D.y+Math.sin(R)*b*1.25});}G(a,{kind:"flash",color:"danger"});}else h===1?ee={left:4,side:s.int(0,3)}:Le=5;}if(o("eliteEvery")>0&&be>=Re){Re=be+o("eliteEvery");let h=At();Ke(h==="swarm"?"grunt":h,Pe(),true);}o("minibossEvery")>0&&be>=Q&&oe-be>30&&(Q=be+o("minibossEvery"),(Ee===null||!a.isAlive(Ee))&&(Ee=Ke("miniboss",Pe()),a.emit(Vs,{kind:"miniboss"}),G(a,{kind:"shake",power:1.2})));}},tn=a=>{Se=true,a.vars.time_left=0;let k=Te();for(let A of a.query(Ne)){let l=a.get(A,Ne);if(!l||l.kind==="miniboss")continue;let h=a.need(A,e);Math.hypot(h.x-k.x,h.y-k.y)<Me()*.3&&L(a,A,null,false);}Ee=Ke("boss",{x:k.x,y:k.y-Ce(a).h*.42}),G(a,{kind:"shake",power:2}),G(a,{kind:"flash",color:"danger"}),a.emit(Vs,{kind:"boss"});},Et=(a,k,A,l=1)=>{let h=at(),D=a==="xp"?{shape:"sprite",art:"crystal",w:h*(l>=25?.62:l>=5?.5:.38),h:h*(l>=25?.62:l>=5?.5:.38),color:l>=25?"secondary":l>=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};Mt(e$1,k,A,D,{type:jt,data:{kind:a,value:l,pulled:false}});},L=(a,k,A,l=true)=>{let h=a.get(k,Ne);if(!h)return;let D=a.need(k,e),_=D.x,b=D.y;a.remove(k,Ne);for(let C of a.query(Ur))a.need(C,Ur).of===k&&a.destroy(C);Qe(a,k,"die");let m=a.need(k,f);if(m.shape==="actor"&&(m.depth=Ht(a,b)-.2),rr(a,k,1.4),G(a,{kind:"burst",x:_,y:b,color:"danger",n:h.elite||h.kind==="boss"?22:8,size:h.size*1.4}),!l)return;xe+=1,a.vars.kills=xe,a.emit("enemy-defeated",{kind:h.kind,elite:h.elite,by:A});let R=at();if(h.xp>0&&Et("xp",_,b+h.size*.4,h.xp),s.chance(Math.min(.95,o("coinRate")*Y.luck))&&Et("coin",_+R*.3,b+h.size*.4),s.chance(.012*Y.luck)&&Et("food",_-R*.3,b),s.chance(.004)&&!a.query(jt).some(C=>a.need(C,jt).kind==="magnet")&&Et("magnet",_,b-R*.3),s.chance(.004)&&Et("bomb",_,b-R*.3),h.elite||h.kind==="miniboss"){Et("chest",_,b);for(let C=0;C<3;C++)Et("coin",_+s.range(-R,R),b+s.range(-R,R));}if(h.kind==="bomber"){let C=Me()*.11*Y.area;G(a,{kind:"ring",x:_,y:b,color:"piece6",size:C*2});for(let P of a.query(Ne)){let W=a.need(P,e);Math.hypot(W.x-_,W.y-b)<C&&B(a,P,bt()*2.5,"blast");}}if((h.kind==="miniboss"||h.kind==="boss")&&(se+=1,a.vars.bosses=se,k===Ee&&(Ee=null),a.emit(Gi,{kind:h.kind}),G(a,{kind:"shake",power:2}),h.kind==="boss")){for(let C of a.query(Ne))L(a,C,null,false);u(a,"cleared");}},B=(a,k,A,l)=>{if(!a.has(k,Ne))return;let h=a.need(k,Ne);if(h.hp-=A,(h.elite||h.kind==="boss"||h.kind==="miniboss")&&ye>0){ye-=1;let D=a.need(k,e);G(a,{kind:"pop",x:D.x+s.range(-10,10),y:D.y-h.size,text:String(Math.round(A)),color:"text",size:Math.round(Me()*.03)});}h.hp<=0?L(a,k,l):h.kind!=="boss"&&h.kind!=="miniboss"&&ze(a,k,"hit");},f$1=(a,k,A,l,h)=>{let D=a.get(k,Ne);if(!D||D.kind==="boss"||D.kind==="miniboss"||D.phase==="dash")return;let _=a.need(k,e),b=_.x-A,m=_.y-l,R=Math.hypot(b,m)||1;_.x+=b/R*h,_.y+=m/R*h;},c=(a,k)=>{if(ie>0||d===null)return;let A=Math.max(1,k-Y.armor);Y.hp-=A,ie=o("graceTime"),a.vars.hp=Math.max(0,Math.ceil(Y.hp)),a.emit("player-hit",{hp:a.vars.hp}),ze(a,d,"hit"),G(a,{kind:"flash",color:"danger"}),G(a,{kind:"shake",power:.8});let l=Te();G(a,{kind:"pop",x:l.x,y:l.y-at()*1.4,text:`-${Math.round(A)}`,color:"danger",size:Math.round(Me()*.034)}),Y.hp<=0&&y(a);},y=a=>{if(a.vars.revive_ready===true&&!_e){a.vars.reviving=true,Dt(a),p=null,a.emit(Vt,{});return}u(a,"died");},i=a=>{if(a.vars.reviving!==true)return;_e=true,a.vars.reviving=false,Y.hp=Y.maxHp,a.vars.hp=Math.ceil(Y.hp),ie=2.5;let k=Te();for(let A of a.query(Ne)){let l=a.need(A,e);if(Math.hypot(l.x-k.x,l.y-k.y)<Me()*.4){let h=a.get(A,Ne);if(!h)continue;h.kind==="boss"||h.kind==="miniboss"?f$1(a,A,k.x,k.y,Me()*.2):L(a,A,"revive");}}for(let A of a.query(Nn))a.destroy(A);G(a,{kind:"ring",x:k.x,y:k.y,color:"coin",size:Me()*.8}),G(a,{kind:"flash",color:"coin"}),d!==null&&Qe(a,d,"idle");},u=(a,k)=>{if(!Je(a)||ke)return;ke=true;let A=Math.floor(be);k==="cleared"&&a.vars["meta:first_clear"]===true&&Fe(a,"coins",me.firstClearGold),a.vars.score=xe*o("killScore")+A*5+se*o("bossScore")+(k==="cleared"?o("clearBonus")*me.chapter:0),a.vars.choosing=false,a.vars.reviving=false,a.emit($t,{reason:k,stats:{kills:xe,seconds:A,bosses:se,chapter:me.chapter,level:ne,cleared:k==="cleared"}});},g=pn(n,"weapons",dr),T=()=>{let a=[],k=Object.keys(M).length,A=Object.keys(O).length;for(let h of dr){let D=M[h];D!==void 0&&D<5?a.push({o:{kind:"weapon",id:h,level:D+1},weight:3}):D===void 0&&k<6&&g.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&&A<6&&a.push({o:{kind:"passive",id:h,level:1},weight:1.2});}let l=[];for(;l.length<3&&a.length>0;){let h=0;for(let b of a)h+=b.weight;let D=s.range(0,h),_=0;for(;_<a.length-1&&(D-=a[_].weight,!(D<=0));_++);l.push(a[_].o),a.splice(_,1);}return l.length<3&&l.push({kind:"heal",id:"heal",level:1}),l.length<3&&l.push({kind:"gold",id:"gold",level:1}),l},w=(a,k)=>{ue=T(),fe=k,a.vars.choosing=true,a.vars.survivors_offer=Fi(ue),Dt(a),p=null,nt(a,Yn);let A=Te();G(a,{kind:"ring",x:A.x,y:A.y,color:k==="chest"?"coin":"accent",size:Me()*.5}),a.emit(zi,{level:ne,source:k,options:ue,build:{weapons:{...M},passives:{...O}}});},N=a=>{a.vars.choosing===true||!Je(a)||(ae>0?(ae-=1,w(a,"level")):j$1>0&&(j$1-=1,w(a,"chest")));},$=(a,k)=>{k.kind==="weapon"?(M[k.id]=k.level,E[k.id]=0):k.kind==="passive"?O[k.id]=k.level:k.kind==="heal"?Y.hp=Math.min(Y.maxHp,Y.hp+Y.maxHp*.3):k.kind==="gold"&&Fe(a,"coins",10),Wt(),a.vars.hp=Math.ceil(Y.hp),le(a);},te=(a,k)=>{if(a.vars.choosing!==true)return;let A=ue[k];A&&($(a,A),ue=[],a.vars.choosing=false,a.vars.survivors_offer="",a.emit(Wi,{kind:A.kind,id:A.id,level:A.level,source:fe}),N(a));},le=a=>{let k=Te(),A=Me(),l=M.blades,h=l?vn.blades.count[l-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(W=>a.isAlive(W)&&a.need(W,Xn).index===P)||Mt(a,k.x,k.y,{shape:"sprite",art:"blade",w:A*.075,h:A*.075,color:"primary",depth:31},{type:Xn,data:{index:P}});for(let P of a.query(Xn)){let W=a.need(P,f);W.shape==="sprite"&&(W.w=W.h=A*(l===5?.095:.075)*Math.sqrt(Y.area));}let _=M.aura,b=a.query(pr);if(_){let P=A*vn.aura.reach[_-1]*Y.area;b.length===0&&Mt(a,k.x,k.y,{shape:"sprite",art:"aura_field",w:P*2,h:P*2,color:_===5?"coin":"secondary",alpha:.9,depth:1.5},{type:pr,data:{r:P}});for(let W of a.query(pr)){a.need(W,pr).r=P;let J=a.need(W,f);J.shape==="sprite"&&(J.w=J.h=P*2,J.color=_===5?"coin":"secondary");}}else for(let P of b)a.destroy(P);let m=M.drone,R=m?vn.drone.count[m-1]:0,C=a.query(ur);for(let P of C)a.need(P,ur).index>=R&&a.destroy(P);for(let P=0;P<R;P++)C.some(W=>a.isAlive(W)&&a.need(W,ur).index===P)||Mt(a,k.x,k.y,{shape:"sprite",art:"drone",w:A*.06,h:A*.06,color:"piece6",depth:33},{type:ur,data:{index:P,cd:.3*P}});},ge=(a,k,A,l,h)=>{let D=null,_=l;for(let b of a.query(Ne)){if(h&&h.includes(b))continue;let m=a.need(b,e),R=Math.hypot(m.x-k,m.y-A);R<_&&(_=R,D=b);}return D},He=(a,k,A,l,h,D,_,b,m=1)=>{let R=at()*m,C=o("shotSpeed")*Xe(),P=Mt(a,k,A,{shape:"sprite",art:"shot",w:R*.95,h:R*.48,color:b,depth:30},{type:fr,data:{vx:Math.cos(l)*C,vy:Math.sin(l)*C,life:1.4,damage:h,pierce:D,hit:[],by:_}});a.need(P,e).rotation=l;},je=(a,k,A)=>{if(d===null)return;let l=Te(),h=Me(),D=at();for(let _ of dr){let b=M[_];if(b===void 0)continue;let m=vn[_],R=b-1,C=m.damage[R]*Y.might;if(E[_]=(E[_]??0)-k,_==="blaster"&&E[_]<=0){let P=ge(a,l.x,l.y,h*.75);if(P===null){E[_]=0;continue}E[_]=m.cooldown[R]*Y.haste;let W=a.need(P,e),J=Math.atan2(W.y-(l.y-D*.3),W.x-l.x),U=m.count[R];for(let ce=0;ce<U;ce++)He(a,l.x,l.y-D*.3,J+(ce-(U-1)/2)*.16,C,m.pierce[R],"blaster",b===5?"piece6":"coin",b===5?1.25:1);ze(a,d,"attack");let de=a.need(d,f);de.shape==="actor"&&(de.actRate=1/Math.max(.2,m.cooldown[R]*Y.haste),A||(de.facing=W.x>=l.x?1:-1));}else if(_==="blades"){let P=h*m.reach[R]*Y.area,W=3+.35*b;I+=W*k;let J=a.query(Xn),U=J.length||1;for(let de of J){let ce=a.need(de,Xn),he=I+ce.index/U*Math.PI*2,pe=a.need(de,e);pe.x=l.x+Math.cos(he)*P,pe.y=l.y-D*.2+Math.sin(he)*P,pe.rotation=I*2.2;let Be=h*.04*Math.sqrt(Y.area);for(let Ye of a.query(Ne)){let pt=a.get(Ye,Ne);if(!pt)continue;let Lt=a.need(Ye,e);Math.hypot(Lt.x-pe.x,Lt.y-pe.y)>Be+pt.size*.55||a.time-(pt.hurtAt.blades??-9)<m.cooldown[R]||(pt.hurtAt.blades=a.time,B(a,Ye,C,"blades"),f$1(a,Ye,l.x,l.y,h*.012));}}}else if(_==="aura"){let P=a.query(pr)[0];if(P===void 0)continue;let W=a.need(P,e);if(W.x=l.x,W.y=l.y+D*.3,a.need(P,e).rotation=a.time*.6,E[_]>0)continue;E[_]=m.cooldown[R];let J=a.need(P,pr).r;for(let U of a.query(Ne)){let de=a.need(U,e),ce=a.get(U,Ne);!ce||Math.hypot(de.x-l.x,de.y-l.y)>J+ce.size*.3||(B(a,U,C,"aura"),f$1(a,U,l.x,l.y,h*.008));}}else if(_==="boomerang"&&E[_]<=0){let P=ge(a,l.x,l.y,h*.8);if(P===null){E[_]=0;continue}E[_]=m.cooldown[R]*Y.haste;let W=a.need(P,e),J=Math.atan2(W.y-l.y,W.x-l.x),U=m.count[R];for(let de=0;de<U;de++){let ce=J+de*Math.PI*2/U,he=h*(b===5?.085:.065);Mt(a,l.x,l.y,{shape:"sprite",art:"boomerang",w:he,h:he,color:"accent",depth:32},{type:Do,data:{dx:Math.cos(ce),dy:Math.sin(ce),dist:0,range:h*m.reach[R]*Y.area,back:false,damage:C,hit:[]}});}}else if(_==="lightning"&&E[_]<=0){let P=ge(a,l.x,l.y,h*.55);if(P===null){E[_]=0;continue}E[_]=m.cooldown[R]*Y.haste;let W=[],J={x:l.x,y:l.y-D},U=P;for(let de=0;de<m.count[R]&&U!==null;de++){let ce=a.get(U,Ne);if(!ce)break;let he=a.need(U,e),pe={x:he.x,y:he.y-ce.size*.4};st(a,J,pe,b===5?"coin":"primary"),W.push(U);let Be=ge(a,he.x,he.y,h*m.reach[R]*Y.area,W);B(a,U,C,"lightning"),J=pe,U=Be;}}else if(_==="drone"){K+=1.8*k;let P=a.query(ur),W=P.length||1,J=h*m.reach[R];for(let U of P){let de=a.need(U,ur),ce=K+de.index/W*Math.PI*2,he=a.need(U,e);if(he.x=l.x+Math.cos(ce)*J,he.y=l.y-D*1.1+Math.sin(ce)*J*.5,de.cd-=k,de.cd>0)continue;let pe=ge(a,he.x,he.y,h*.6);if(pe===null){de.cd=0;continue}de.cd=m.cooldown[R]*Y.haste;let Be=a.need(pe,e);He(a,he.x,he.y,Math.atan2(Be.y-he.y,Be.x-he.x),C,b===5?2:1,"drone","piece6",.7);}}}},st=(a,k,A,l)=>{let h=Math.hypot(A.x-k.x,A.y-k.y),D=Mt(a,(k.x+A.x)/2,(k.y+A.y)/2,{shape:"sprite",art:"zap",w:Math.max(8,h),h:Me()*.035,color:l,depth:34},{type:Ao,data:{life:.16}});a.need(D,e).rotation=Math.atan2(A.y-k.y,A.x-k.x);},Z=(a,k)=>{let A=Te(),l=at(),h=Me(),D=Ce(a),_=Math.hypot(D.w,D.h)*.75,b=a.query(Ne);for(let R of b){let C=a.get(R,Ne);if(!C)continue;let P=a.need(R,e),W=A.x-P.x,J=A.y-P.y,U=Math.hypot(W,J)||1;W/=U,J/=U;let de=C.kind==="boss"||C.kind==="miniboss";if(U>(de?_*1.3:_)){let Ye=Pe();P.x=Ye.x,P.y=Ye.y;continue}C.t-=k;let ce=C.speed,he=W,pe=J;if(C.kind==="archer"){let Ye=h*.3;if(U<Ye?ce*=-0.6:U<Ye*1.4&&(ce=0),C.t<=0&&U<h*.6){C.t=2.4,ze(a,R,"attack");let pt=260*Xe();Mt(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:W*pt,vy:J*pt,life:3,damage:C.damage}});}}else (C.kind==="charger"||C.kind==="miniboss"||C.kind==="boss")&&(C.phase==="walk"&&C.t<=0&&U<h*(de?.6:.38)?C.kind!=="boss"||C.next%3===0?(C.phase="wind",C.t=de?.7:.55,ze(a,R,"surprised"),G(a,{kind:"ring",x:P.x,y:P.y,color:"danger",size:C.size*2.2})):H(a,R,C):C.phase==="wind"?(ce=0,C.t<=0&&(C.phase="dash",C.t=de?.6:.45,C.vx=W,C.vy=J)):C.phase==="dash"&&(ce=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*ce*k,P.y+=pe*ce*k;let Be=a.need(R,f);if(Be.shape==="actor"&&(Math.abs(A.x-P.x)>C.size*.4&&(Be.facing=A.x>=P.x?1:-1),Be.depth=Ht(a,P.y),Be.speed=Math.abs(ce),Be.pose=ce===0?"idle":C.kind==="brute"||de?"walk":"run"),U<(C.size+l)/2){if(C.kind==="bomber"){G(a,{kind:"ring",x:P.x,y:P.y,color:"piece6",size:h*.22}),c(a,C.damage),L(a,R,null,false);continue}if(ie<=0&&(ze(a,R,"attack"),c(a,C.damage),ke||Ws(a)))return}}let m=a.query(Ne);for(let R=0;R<m.length;R++){let C=a.need(m[R],Ne),P=a.need(m[R],e);for(let W=R+1;W<m.length;W++){let J=a.need(m[W],Ne),U=a.need(m[W],e),de=(C.size+J.size)*.42,ce=U.x-P.x,he=U.y-P.y,pe=ce*ce+he*he;if(pe>=de*de||pe===0)continue;let Be=Math.sqrt(pe),Ye=(de-Be)*.5,pt=ce/Be*Ye,Lt=he/Be*Ye,_n=C.kind==="boss"||C.kind==="miniboss",yn=J.kind==="boss"||J.kind==="miniboss";_n||(P.x-=pt,P.y-=Lt),yn||(U.x+=pt,U.y+=Lt);}}for(let R of a.query(Ur)){let C=a.need(R,Ur).of;if(!a.isAlive(C)||!a.has(C,Ne)){a.destroy(R);continue}let P=a.need(C,e),W=a.need(R,e);W.x=P.x,W.y=P.y+a.need(C,Ne).size*.55;let J=a.need(R,f);J.shape==="sprite"&&(J.alpha=.6+.3*Math.sin(a.time*6));}},H=(a,k,A)=>{let l=a.need(k,e),h=Me(),D=A.next%3;if(A.next+=1,A.t=A.hp<A.maxHp/2?1.4:2.2,D===1){let _=A.hp<A.maxHp/2?18:12,b=220*Xe();for(let m=0;m<_;m++){let R=m/_*Math.PI*2+a.time;Mt(a,l.x,l.y-A.size*.4,{shape:"sprite",art:"orb",w:h*.035,h:h*.035,color:"danger",depth:29},{type:Nn,data:{vx:Math.cos(R)*b,vy:Math.sin(R)*b,life:3.5,damage:A.damage*.6}});}ze(a,k,"attack"),G(a,{kind:"ring",x:l.x,y:l.y,color:"danger",size:A.size*3});}else {for(let _=0;_<6;_++){let b=_/6*Math.PI*2;Ke("swarm",{x:l.x+Math.cos(b)*A.size*1.6,y:l.y+Math.sin(b)*A.size*1.6});}ze(a,k,"cheer");}},X=(a,k)=>{let A=Ce(a),l=Te(),h=at(),D=Me()*.2;for(let b of a.query(fr)){let m=a.need(b,fr),R=a.need(b,e);if(R.x+=m.vx*k,R.y+=m.vy*k,m.life-=k,m.life<=0||R.x<-D||R.y<-D||R.x>A.w+D||R.y>A.h+D){a.destroy(b);continue}for(let C of a.query(Ne)){if(m.hit.includes(C))continue;let P=a.get(C,Ne);if(!P)continue;let W=a.need(C,e);if(!(Math.abs(W.x-R.x)>P.size/2+4||Math.abs(W.y-(R.y+P.size*.2))>P.size*.9+4)&&(m.hit.push(C),G(a,{kind:"burst",x:R.x,y:R.y,color:"coin",n:4,size:h*.5}),f$1(a,C,l.x,l.y,Me()*.01),B(a,C,m.damage,m.by),m.hit.length>=m.pierce)){a.destroy(b);break}}}for(let b of a.query(Nn)){let m=a.need(b,Nn),R=a.need(b,e);if(R.x+=m.vx*k,R.y+=m.vy*k,m.life-=k,m.life<=0){a.destroy(b);continue}if(Math.hypot(R.x-l.x,R.y-(l.y-h*.3))<h*.55&&(a.destroy(b),c(a,m.damage),ke||Ws(a)))return}let _=Me()*1.5;for(let b of a.query(Do)){let m=a.need(b,Do),R=a.need(b,e);if(R.rotation=(R.rotation??0)+k*14,m.back){let P=l.x-R.x,W=l.y-R.y,J=Math.hypot(P,W)||1;if(J<h*.5){a.destroy(b);continue}R.x+=P/J*_*k,R.y+=W/J*_*k;}else {let P=_*k*Math.max(.35,1-m.dist/m.range);R.x+=m.dx*P,R.y+=m.dy*P,m.dist+=P,m.dist>=m.range*.98&&(m.back=true,m.hit=[]);}let C=a.need(b,f).w*.5;for(let P of a.query(Ne)){if(m.hit.includes(P))continue;let W=a.get(P,Ne);if(!W)continue;let J=a.need(P,e);Math.hypot(J.x-R.x,J.y-R.y)>C+W.size*.5||(m.hit.push(P),f$1(a,P,R.x,R.y,Me()*.015),B(a,P,m.damage,"boomerang"));}}for(let b of a.query(Ao)){let m=a.need(b,Ao);m.life-=k;let R=a.need(b,f);R.shape==="sprite"&&(R.alpha=Math.max(0,m.life/.16)),m.life<=0&&a.destroy(b);}},q=(a,k)=>{let A=Te(),l=at(),D=a.query(jt).filter(_=>a.need(_,jt).kind==="xp");if(D.length>90){let _=D.map(P=>({e:P,d:Math.hypot(a.need(P,e).x-A.x,a.need(P,e).y-A.y)})).sort((P,W)=>W.d-P.d).slice(0,30),b=0,m=a.need(_[0].e,e),R=m.x,C=m.y;for(let P of _)b+=a.need(P.e,jt).value,a.destroy(P.e);Et("xp",R,C,Math.max(25,b));}for(let _ of a.query(jt)){let b=a.need(_,jt),m=a.need(_,e),R=Math.hypot(A.x-m.x,A.y-m.y);if(R<Y.magnet||b.pulled){b.pulled=true;let C=Me()*(b.kind==="xp"&&R>Y.magnet?2.4:1.4),P=Math.min(1,k*C/Math.max(1,R));m.x+=(A.x-m.x)*P,m.y+=(A.y-m.y)*P;}if(!(R>l*.6))if(a.destroy(_),b.kind==="coin")Fe(a,"coins",b.value),a.emit("coin-collected",{value:b.value}),G(a,{kind:"pop",x:A.x,y:A.y-l*1.6,text:`+${b.value}`,size:Math.round(l*.45)});else if(b.kind==="xp"){for(z+=b.value*Y.growth;z>=Ge(ne);)z-=Ge(ne),ne+=1,ae+=1;a.vars.xp_level=ne;}else if(b.kind==="food")Y.hp=Math.min(Y.maxHp,Y.hp+Y.maxHp*.25),a.vars.hp=Math.ceil(Y.hp),G(a,{kind:"ring",x:A.x,y:A.y,color:"accent",size:l*3});else if(b.kind==="magnet"){for(let C of a.query(jt))(a.need(C,jt).kind==="xp"||a.need(C,jt).kind==="coin")&&(a.need(C,jt).pulled=true);G(a,{kind:"ring",x:A.x,y:A.y,color:"coin",size:Me()*1.2});}else if(b.kind==="bomb"){let C=Ce(a);G(a,{kind:"flash",color:"#ffffff"}),G(a,{kind:"shake",power:2});for(let P of a.query(Ne)){let W=a.need(P,e);if(W.x<0||W.y<0||W.x>C.w||W.y>C.h)continue;let J=a.get(P,Ne);J&&B(a,P,J.kind==="boss"||J.kind==="miniboss"?J.maxHp*.1:J.hp+1,"bomb");}}else b.kind==="chest"&&(j$1+=1,G(a,{kind:"burst",x:A.x,y:A.y,color:"coin",n:20,size:l*2}));}N(a);},x=()=>{for(let k of [Ne,fr,Nn,jt,Xn,pr,ur,Do,Ao,Ur,Yn])nt(e$1,k);nt(e$1,Er),ct(),Ot(e$1,"top",void 0,{pan:true}),e$1.vars.field_x=0,e$1.vars.field_y=0,p=null,v=0,me=Kr(In(e$1,"meta:chapter")||1,o("duration")),oe=me.duration;let a=qe();M={[a.weapon]:1},O=a.passive?{[a.passive]:1}:{};for(let k of dr)E[k]=.4;z=0,ne=1,ae=0,j$1=0,ue=[],ie=0,xe=0,se=0,_e=false,ke=false,Ae=0,be=0,Se=false,Ee=null,Q=o("minibossEvery")>0?o("minibossEvery"):1/0,Re=o("eliteEvery")>0?o("eliteEvery")*.8:1/0,We=22,we=0,ee=null,Le=0,Y.maxHp=0,Y.hp=0,Wt(),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=me.chapter,e$1.vars.choosing=false,e$1.vars.reviving=false,e$1.vars.boss_hp=0,e$1.vars.survivors_offer="",et(),le(e$1);};e$1.on(j,a=>{let k=a,A=e$1.vars.choosing===true||e$1.vars.reviving===true;k.type==="press"&&Je(e$1)&&!A?p={x:k.x,y:k.y}:k.type==="release"&&(p=null),k.type==="key"&&e$1.vars.choosing===true&&(k.key==="left"||k.key==="action"||k.key==="right")&&te(e$1,k.key==="left"?0:k.key==="action"?1:2);}),e$1.on(Hi,a=>te(e$1,Number(a.index??-1))),e$1.on(Vi,()=>{e$1.vars.choosing===true&&(e$1.vars.choosing=false,w(e$1,fe));}),e$1.on(Gt,()=>i(e$1)),e$1.on(Kt,()=>{e$1.vars.reviving===true&&(e$1.vars.reviving=false,u(e$1,"died"));}),e$1.on(Nt,x),e$1.on(zt,x),e$1.on(Bt,a=>{for(let k of e$1.query(Ne))Qe(e$1,k,"idle");d!==null&&e$1.isAlive(d)&&Qe(e$1,d,a.reason==="cleared"?"dance":"die"),ct(),nt(e$1,Yn);}),e$1.on(k,()=>{Ot(e$1,"top",void 0,{pan:true}),et(),Je(e$1)&&le(e$1);});let S=(a,k)=>{let A=p!==null&&r.pointer.down&&a.vars.choosing!==true,l=a.query(Yn);if(!A||p===null){for(let m of l)a.destroy(m);return}l.length===0&&(Mt(a,p.x,p.y,{shape:"circle",r:k,color:"#ffffff",alpha:.16,depth:70},{type:Yn,data:{part:0}}),Mt(a,p.x,p.y,{shape:"circle",r:k*.42,color:"#ffffff",alpha:.55,depth:71},{type:Yn,data:{part:1}}));let h=r.pointer.x-p.x,D=r.pointer.y-p.y,_=Math.hypot(h,D)||1,b=Math.min(1,k/_);for(let m of a.query(Yn)){let R=a.need(m,e);a.need(m,Yn).part===0?(R.x=p.x,R.y=p.y):(R.x=p.x+h*b,R.y=p.y+D*b);}};e$1.addSystem({id:"survivors",order:0,run(a,k){if(!Je(a)||d===null||ke)return;let A=a.vars.choosing===true||a.vars.reviving===true;for(let J of [d,...a.query(Ne)]){let U=a.get(J,f);U?.shape==="actor"&&(U.paused=A);}if(A)return;ye=Math.min(12,ye+k*10);let l=Ce(a);if(be+=k,!Se){let J=Math.max(0,oe-be);a.vars.time_left=J,J<=0&&tn(a);}ie>0&&(ie=Math.max(0,ie-k)),Y.regen>0&&Y.hp<Y.maxHp&&(Y.hp=Math.min(Y.maxHp,Y.hp+Y.regen*k),a.vars.hp=Math.ceil(Y.hp)),a.vars.hp_max=Y.maxHp;let h=Te(),D=Me()*.11,_=r.axis(),b=_.x,m=_.y,R=b!==0||m!==0?1:0;if(R===0&&p&&r.pointer.down){b=r.pointer.x-p.x,m=r.pointer.y-p.y;let J=Math.hypot(b,m);R=J<D*.18?0:Math.min(1,J/D);}S(a,D);let C=Math.hypot(b,m),P=C>0&&R>0;if(P){let J=b/C*Y.speed*R*k,U=m/C*Y.speed*R*k;for(let de of [...a.query(Ne),...a.query(fr),...a.query(Nn),...a.query(jt),...a.query(Er),...a.query(Do),...a.query(Ao)]){let ce=a.need(de,e);ce.x-=J,ce.y-=U;}ql(a,J,U),Fe(a,"field_x",J),Fe(a,"field_y",U),v+=k,v>.6&&vt(a,"survivors-move");}!ht(a,"survivors-move")&&!un(a)&&ft(a,"circle",{x:l.w/2,y:l.h*.8},{x:D*.6,y:0});let W=a.need(d,f);W.alpha=ie>0&&Math.floor(a.time*12)%2===0?.4:1,W.shape==="actor"&&(W.pose=P?"run":"idle",W.speed=Y.speed*Math.max(.3,R),P&&Math.abs(b)>C*.15&&(W.facing=b>0?1:-1),W.depth=Ht(a,h.y)+5e-4),Rt(a,k),Z(a,k),!(ke||Ws(a))&&(je(a,k,P),X(a,k),!(ke||Ws(a))&&(q(a,k),!ke&&(a.vars.score=xe*o("killScore")+Math.floor(be)*5+se*o("bossScore"),ot(a))));}}),e$1.vars.survivors_base=o("duration"),x();}};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"}],Qt=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,E)=>e[E]?.[O],n=null,s=[],r=[];for(let O=0;O<e.length;O++)for(let E=0;E<e[O].length;E++){let I=t(E,O);I==="X"?n={col:E,row:O}:I==="S"?s.push({col:E,row:O}):I==="o"&&r.push({col:E,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,d=(O,E)=>`${O},${E}`,p=[n];o.set(d(n.col,n.row),0);let v=[[0,1],[-1,0],[1,0],[0,-1]];for(;p.length>0;){let O=p.shift(),E=o.get(d(O.col,O.row));for(let[I,K]of v){let z=O.col+I,ne=O.row+K;!$p(t(z,ne))||o.has(d(z,ne))||(o.set(d(z,ne),E+1),p.push({col:z,row:ne}));}}let M=s.map(O=>{if(!o.has(d(O.col,O.row)))throw new Error(`tower-defense map: the entry ${O.col},${O.row} has no road to the gate`);let E=[O],I=O;for(;I.col!==n.col||I.row!==n.row;){let K=o.get(d(I.col,I.row)),z=v.map(([ne,ae])=>({col:I.col+ne,row:I.row+ae})).find(ne=>o.get(d(ne.col,ne.row))===K-1);E.push(z),I=z;}return E});return {rows:e,paths:M,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),d=jc(s,n),p=Math.ceil(s/xn),v=s%xn===0?hr.find(E=>E.boss===p):void 0,M=6+Math.floor((s-1)/2),O=[];for(let E=1;E<=M;E++){let I=5+E*1.6+s*.35,K=[],z=0,ne=0,ae=[];if(E===1)ae.push(o[0]);else {d&&E===2&&ae.push(d);let ue=Math.min(4,1+Math.floor(E/3));for(;ae.length<ue;)ae.push(o[Math.floor(r()*o.length)]);}let j=I/ae.length;for(let ue of ae){let fe=Math.max(1,Math.round(j/ue.cost)),ie=ue.speed>=1.5?.55:ue.hp>=2?1.3:.85;K.push({enemy:ue.id,count:fe,gap:ie,delay:z,entry:ne%Math.max(1,t)}),z+=fe*ie*.55+1,ne++;}v&&E===M&&K.push({enemy:v.id,count:1,gap:1,delay:z+2,entry:0}),O.push({groups:K});}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,d=Yi[s-1],p=Xr(jr(Us(d.map),d.mirror)).paths.length;return {level:s,world:r,index:o,boss:o===xn,map:d.map,mirror:d.mirror,hp:16*Math.pow(1.075,s-1)*(.8+t*.4),waves:Ji(s,p,n),gold:220+(s-1)*25,bounty:1+(s-1)*.03,towers:Ks.filter(v=>v.unlockLevel<=s).map(v=>v.id),spells:qr.filter(v=>v.unlockLevel<=s).map(v=>v.id),branches:s>=Ui,fresh:jc(s,n)?.id??null,enemies:qc(s,n).map(v=>v.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"),Oe=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=l=>nn(t,l),r=e$1.rng.stream("tower-defense"),o=pn(n,"foes",Uc),d=Yr(1,s("difficulty"),o),p=Xr(jr(Us(d.map),d.mirror)),v=[],M=we(),O=0,E=20,I=20,K=0,z=[],ne=0,ae=null,j$1=0,ue=0,fe=0,ie=false,xe=false,se=1,_e=null,Ae=[],be=null,oe=new Map,me=[],Se=null,Ee=new Map,Q=new Map,Re=()=>Jr.find(l=>l.id===e$1.vars["meta:hero"])??Jr[0],We=()=>e$1.vars.reviving===true;function we(){return Fn(Ce(e$1),Sn,En,{top:.15,bottom:.86,widthShare:.98})}let ee=()=>M.cell,Le=l=>M.left+l*M.cell,ye=l=>M.top+l*M.cell,ke=l=>({x:Le(l.col+.5),y:ye(l.row+.5)}),Ue=(l,h)=>({x:(l-M.left)/M.cell,y:(h-M.top)/M.cell}),Y=l=>l.row===0?{x:l.col+.5,y:-0.5}:l.row===En-1?{x:l.col+.5,y:En+.5}:l.col===0?{x:-0.5,y:l.row+.5}:l.col===Sn-1?{x:Sn+.5,y:l.row+.5}:null,Me=()=>{v=p.paths.map(l=>{let h=l.map(_=>({x:_.col+.5,y:_.row+.5})),D=Y(l[0]);return D&&h.unshift(D),{pts:h,len:h.length-1}});},Xe=(l,h)=>{if(h<=0)return l.pts[0];if(h>=l.len)return l.pts[l.len];let D=Math.floor(h),_=l.pts[D],b=l.pts[D+1],m=h-D;return {x:_.x+(b.x-_.x)*m,y:_.y+(b.y-_.y)*m}},at=new Set,Te=(l,h,D,_,b=1)=>{at.add(l);let m=Ee.get(l);(m===void 0||!e$1.isAlive(m))&&(m=e$1.create(),e$1.set(m,tl,{id:l}),Ee.set(l,m)),e$1.set(m,e,{x:h,y:D,scale:b}),e$1.set(m,f,_);},Wt=l=>{for(let[h,D]of [...Ee])at.has(h)||!l.some(_=>h.startsWith(_))||(e$1.destroy(D),Ee.delete(h));},Ge=l=>{for(let[h,D]of [...Ee])h.startsWith(l)&&(e$1.destroy(D),Ee.delete(h));},qe=(l,h,D,_)=>{let b=e$1.create();return e$1.set(b,Jc,{kind:l}),e$1.set(b,e,{x:h,y:D}),e$1.set(b,f,_),b},et=()=>{nt(e$1,Jc),nt(e$1,Js);let l=ee();qe("grass",Le(Sn/2),ye(En/2),{shape:"tile",art:"tile_grass",w:l*Sn,h:l*En,unit:l,color:"ground",depth:-10}),p.rows.forEach((R,C)=>[...R].forEach((P,W)=>{let J=ke({col:W,row:C}),U=J.y+l*.45;P==="#"||P==="S"||P==="X"?qe("road",J.x,J.y,{shape:"sprite",art:"tile_road",w:l+1,h:l+1,color:"lane",depth:-9}):P==="~"?qe("water",J.x,J.y,{shape:"rect",w:l+1,h:l+1,color:"primary",alpha:.45,depth:-9}):P==="t"?qe("tree",J.x,U-l*.65,{shape:"sprite",art:"td_tree",w:l*1.05,h:l*1.3,depth:Ht(e$1,U,5)}):P==="r"?qe("rock",J.x,U-l*.3,{shape:"sprite",art:"rock",w:l*.8,h:l*.6,depth:Ht(e$1,U,5)}):P==="*"&&qe("bush",J.x,U-l*.3,{shape:"sprite",art:"td_bush",w:l*.85,h:l*.6,depth:Ht(e$1,U,5)});})),p.spots.forEach((R,C)=>{let P=ke(R),W=qe("spot",P.x,P.y+l*.18,{shape:"sprite",art:"td_spot",w:l*.95,h:l*.62,depth:-8});e$1.set(W,Js,{index:C,col:R.col,row:R.row});});let h=ke(p.gate),D=Y(p.gate),_=D&&D.y>=0?D:null,b=_?Le(p.gate.col+.5+(_.x-(p.gate.col+.5))*.35):h.x,m=_?ye(p.gate.row+.5+(_.y-(p.gate.row+.5))*.35):h.y;qe("gate",b,m-l*.2,{shape:"sprite",art:"td_gate",w:l*1.35,h:l*1.35,depth:Ht(e$1,m+l*.45,5)});for(let R of p.paths){if(Y(R[0]))continue;let C=ke(R[0]);qe("portal",C.x,C.y-l*.1,{shape:"sprite",art:"td_portal",w:l*1.05,h:l*.95,depth:Ht(e$1,C.y,4)});}},rt=l=>e$1.query(sn).find(h=>e$1.need(h,sn).spot===l),lt=l=>{let h=e$1.need(l,sn),D=kn(h.kind),_=ke(p.spots[h.spot]),b=ee(),m=b*1.45,R=_.y+b*.42;e$1.set(l,e,{x:_.x,y:R-m/2}),e$1.set(l,f,{shape:"sprite",art:Fs(D,h.tier,h.branch||null),w:b*1.1,h:m,depth:Ht(e$1,R,5)});},ct=l=>{O=Math.max(0,Math.round(l)),e$1.vars.gold=O;},dt=(l,h)=>{let D=ke(p.spots[l]);G(e$1,{kind:"ring",x:D.x,y:D.y,color:h,size:ee()*1.5}),G(e$1,{kind:"burst",x:D.x,y:D.y-ee()*.4,color:h,n:10,size:ee()});},ot=(l,h)=>{let D=kn(h);if(!D||rt(l)!==void 0)return false;let _=D.tiers[0].cost;if(O<_)return false;ct(O-_);let b=e$1.create();return e$1.set(b,sn,{spot:l,kind:h,tier:1,branch:"",cooldown:.2}),lt(b),dt(l,"text"),e$1.emit("tower-built",{kind:h}),ht(e$1,"td-build")||(vt(e$1,"td-build"),X()),true},Pe=(l,h)=>{let D=rt(l);if(D===void 0)return false;let _=e$1.need(D,sn),b=kn(_.kind),m;if(h){let R=b.branches.find(C=>C.id===h);if(!R||_.branch||_.tier<b.tiers.length||!d.branches)return false;m=R.cost;}else {if(_.tier>=b.tiers.length)return false;m=b.tiers[_.tier].cost;}return O<m?false:(ct(O-m),h?_.branch=h:_.tier++,lt(D),dt(l,"coin"),e$1.emit("tower-upgraded",{kind:_.kind,tier:_.tier,branch:_.branch}),true)},bt=l=>{let h=rt(l);if(h===void 0)return false;let D=e$1.need(h,sn),_=Math.floor(Po(kn(D.kind),D.tier,D.branch||null)*Lo);ct(O+_);let b=ke(p.spots[l]);return G(e$1,{kind:"pop",x:b.x,y:b.y-ee()*.8,text:`+${_}`,color:"coin",size:Math.round(ee()*.3)}),G(e$1,{kind:"burst",x:b.x,y:b.y,color:"muted",n:12,size:ee()}),e$1.destroy(h),e$1.emit("tower-sold",{kind:D.kind}),true},Ke=()=>{_e=null,Ae=[],Ge("m:"),e$1.vars.td_menu="";},At=l=>l.map(h=>`${h.action??h.id}@${Math.round(h.x)},${Math.round(h.y)}`).join(";"),en=l=>{Ke(),_e=l,Rt();},Rt=()=>{if(_e===null)return;let l=_e;Ae=[];let h=ee(),D=Ce(e$1),_=Math.min(D.w,D.h),b=Math.max(h*.46,_*.062),m=Math.max(h*1.1,b*2.3),R=ke(p.spots[l]),C=Math.max(m+b,Math.min(D.w-m-b,R.x)),P=Math.max(D.h*.1+m+b,Math.min(D.h*.88-m-b,R.y-h*.2)),W=(pe,Be,Ye,pt,Lt,_n,yn)=>{let ln=C+Be*m,Wn=P+Ye*m;Ae.push({action:pe,x:ln,y:Wn,r:b,ok:yn}),e$1.vars.td_menu=At(Ae),Te(`m:${pe}:bg`,ln,Wn,{shape:"circle",r:b,color:"panel",alpha:.94,depth:60});let br=pe==="sell";Te(`m:${pe}:rim`,ln,Wn,{shape:"circle",r:b*1.08,color:br?"danger":yn?"coin":"muted",alpha:yn?.9:.5,depth:59.9}),Te(`m:${pe}:art`,ln,Wn-b*.12,{shape:"sprite",art:pt,w:br?b*1.25:b*1.15,h:br?b*1.25:b*1.3,alpha:yn?1:.45,depth:60.1}),_n&&Te(`m:${pe}:txt`,ln,Wn+b*.78,{shape:"text",text:_n,size:Math.round(b*.52),color:Lt!==null&&!yn?"danger":"coin",bold:true,depth:60.2});},J=rt(l);if(J===void 0){let pe=d.towers.map(Ye=>kn(Ye)).filter(Boolean),Be=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((Ye,pt)=>{let Lt=Ye.tiers[0].cost;W(`build:${Ye.id}`,Be[pt][0],Be[pt][1],Ye.tiers[0].art,Lt,String(Lt),O>=Lt);});return}let U=e$1.need(J,sn),de=kn(U.kind),ce=wo(de,U.tier,U.branch||null);if(Te("m:range",R.x,R.y,{shape:"sprite",art:"aura_field",w:ce.range*h*2,h:ce.range*h*2,color:"primary",alpha:.4,depth:1}),U.tier<de.tiers.length){let pe=de.tiers[U.tier];W("up",0,-1,pe.art,pe.cost,String(pe.cost),O>=pe.cost);}else !U.branch&&d.branches&&de.branches.slice(0,2).forEach((pe,Be)=>W(`branch:${pe.id}`,Be===0?-0.85:.85,-0.7,pe.art,pe.cost,String(pe.cost),O>=pe.cost));let he=Math.floor(Po(de,U.tier,U.branch||null)*Lo);W("sell",0,1,"td_sell",null,`+${he}`,true);},tn=l=>{if(_e===null)return;let h=_e,D=false;if(l.startsWith("build:")?D=ot(h,l.slice(6)):l==="up"?D=Pe(h):l.startsWith("branch:")?D=Pe(h,l.slice(7)):l==="sell"&&(D=bt(h)),!D){G(e$1,{kind:"shake",power:.3});return}Ke();},Et=(l,h)=>{let D=ee(),_=-1,b=1/0;return p.spots.forEach((m,R)=>{let C=ke(m),P=rt(R)!==void 0?C.y-D*1.1:C.y-D*.5;if(Math.abs(l-C.x)>D*.55||h<P||h>C.y+D*.55)return;let W=Math.abs(l-C.x)+Math.abs(h-C.y);W<b&&(b=W,_=R);}),_},L=l=>1+.07*(l-1),B=(l,h,D,_)=>{let b=Qt(l);if(!b||v.length===0)return null;let m=b.hp*d.hp*(b.boss?1:L(_)),R=e$1.create();return e$1.set(R,Oe,{kind:l,hp:m,maxHp:m,route:h%v.length,progress:D,x:0,y:0,slow:0,slowLeft:0,stun:0,burn:0,burnLeft:0,healCd:b.heals?.every??0,summonCd:b.summons?.every??0,heldBy:-1,enraged:false,wave:_}),e$1.set(R,e,{x:0,y:0}),e$1.set(R,f,{shape:"actor",cast:b.cast,variant:b.variant??r.int(0,99),h:ee()*b.size*1.15,pose:b.flying?"air":"walk",depth:6}),f$1(R),b.boss&&(e$1.emit(zp,{kind:l}),G(e$1,{kind:"shake",power:1})),R},f$1=l=>{let h=e$1.need(l,Oe),D=Qt(h.kind),_=v[h.route],b=Xe(_,h.progress),m=Xe(_,h.progress+.05);h.x=b.x,h.y=b.y;let R=ee(),C=e$1.need(l,e),P=e$1.need(l,f),W=ye(b.y)+R*.2;if(C.x=Le(b.x),C.y=W-(D.flying?R*.55:0)-(P.shape==="actor"?P.h/2:0),P.shape==="actor"){Math.abs(m.x-b.x)>1e-4&&(P.facing=m.x>b.x?1:-1),P.depth=Ht(e$1,W,5),P.h=R*D.size*1.15;let J=h.heldBy<0&&h.stun<=0;P.pose=D.flying?"air":J?"walk":"idle",P.speed=D.speed*(1-h.slow)*R*se;}},c=l=>v[l.route].len-l.progress,y=l=>{let h=e$1.need(l,e);return {x:h.x,y:h.y}},i=(l,h,D,_,b=1,m="tower")=>{let R=e$1.get(l,Oe);if(!R)return;let C=Qt(R.kind),P=h.damage*D*b*(_?2:1);if(h.type==="physical"?P*=1-C.armor*(1-(h.pierce??0)):h.type==="magic"&&(P*=1-C.resist),h.slow&&(R.slow=Math.max(R.slow,h.slow*(C.boss?.5:1)),R.slowLeft=Math.max(R.slowLeft,(h.slowTime??1)*D)),h.burn&&(R.burn=Math.max(R.burn,h.burn*D),R.burnLeft=Math.max(R.burnLeft,h.burnTime??2)),h.stun&&!C.boss&&r.chance(h.stun)&&(R.stun=Math.max(R.stun,h.stunTime??.5)),_){let W=y(l);G(e$1,{kind:"pop",x:W.x,y:W.y-ee()*.5,text:String(Math.round(P)),color:"danger",size:Math.round(ee()*.3)});}u(l,P,m);},u=(l,h,D)=>{let _=e$1.get(l,Oe);_&&(_.hp-=h,_.hp<=0&&g(l,D));},g=(l,h)=>{let D=e$1.need(l,Oe),_=Qt(D.kind);e$1.remove(l,Oe),Qe(e$1,l,"die"),rr(e$1,l,1),ue++;let b=Math.round(_.bounty*d.bounty);ct(O+b);let m=y(l);if(G(e$1,{kind:"pop",x:m.x,y:m.y-ee()*.6,text:`+${b}`,color:"coin",size:Math.round(ee()*.28)}),e$1.emit("enemy-defeated",{kind:D.kind,by:h}),_.boss?(fe++,Fe(e$1,"coins",10),e$1.emit(Wp,{kind:D.kind}),G(e$1,{kind:"shake",power:1.4}),G(e$1,{kind:"flash",color:"coin"})):r.chance(s("coinRate"))&&(Fe(e$1,"coins",1),e$1.emit("coin-collected",{value:1})),_.splits)for(let R=0;R<_.splits.count;R++)B(_.splits.into,D.route,Math.max(0,D.progress-.18*R),D.wave);},T=l=>{let h=e$1.need(l,Oe),D=Qt(h.kind),_=ke(p.gate);G(e$1,{kind:"burst",x:_.x,y:_.y,color:"danger",n:12,size:ee()}),e$1.destroy(l),E=Math.max(0,E-D.leak),e$1.vars.lives=E,e$1.emit("player-hit",{lives:E}),G(e$1,{kind:"flash",color:"danger"}),G(e$1,{kind:"shake",power:D.boss?1.6:.8}),E<=0&&te();},w=()=>{if(!(K>=d.waves.length)){K++,e$1.vars.wave=K,z=[];for(let l of d.waves[K-1].groups)for(let h=0;h<l.count;h++)z.push({at:l.delay+h*l.gap,enemy:l.enemy,entry:l.entry});z.sort((l,h)=>l.at-h.at),ne=0,ae=null,e$1.emit(nl,{wave:K});}},N=()=>{if(!(ae===null||K>=d.waves.length)){if(K>0){let l=Math.ceil(ae*s("earlyGold")*d.bounty);if(l>0){ct(O+l);let h=me.find(D=>D.id.startsWith("call"));h&&G(e$1,{kind:"pop",x:h.x,y:h.y-ee()*.6,text:`+${l}`,color:"coin",size:Math.round(ee()*.32)});}}vt(e$1,"td-call"),w();}},$=l=>{if(ie||!Je(e$1))return;ie=true;let h=l==="defended",D=h?Math.min(xe?1:3,qs(E,I)):0;e$1.vars.stars=D,h&&e$1.vars["meta:first_clear"]===true&&Fe(e$1,"coins",d.firstClearGold),e$1.vars.score=ge()+(h?1e3+D*300:0),e$1.vars.reviving=false,Ke(),e$1.emit($t,{reason:l,stats:{chapter:d.level,seconds:Math.floor(j$1),cleared:h,stars:D,coins:Number(e$1.vars.coins??0),bosses:fe,kills:ue,lives:E}});},te=()=>{if(e$1.vars.revive_ready===true&&!xe){e$1.vars.reviving=true,Ke(),e$1.emit(Vt,{});return}$("overrun");},le=()=>{if(We()){xe=true,e$1.vars.reviving=false,E=js,e$1.vars.lives=E;for(let l of e$1.query(Oe))e$1.need(l,Oe).stun=2;G(e$1,{kind:"flash",color:"coin"});}},ge=()=>ue*10+E*50+Math.max(0,K-1)*100,He=()=>1+Io(e$1,"meta:spells"),je=(l,h,D)=>{let _=qr.find(R=>R.id===l);if(!_||(oe.get(l)??0)>0)return;let b=Ue(h,D);if(b.x<-0.5||b.y<-0.5||b.x>Sn+.5||b.y>En+.5)return;if(_.kind==="strike")for(let R=0;R<(_.count??1);R++){let C=e$1.create(),P=(_.radius??1)*.9;e$1.set(C,Xs,{x:b.x+(R===0?0:(r.next()-.5)*P*2),y:b.y+(R===0?0:(r.next()-.5)*P*2),t:0,delay:R*.2,damage:(_.damage??1)*d.hp*He(),radius:_.radius??1,burn:(_.burn??0)*d.hp*He()}),e$1.set(C,e,{x:-999,y:-999}),e$1.set(C,f,{shape:"sprite",art:"td_meteor",w:ee()*.9,h:ee()*.9,alpha:0,depth:45});}else {let R={route:0,q:0,d:1/0};v.forEach((P,W)=>{for(let J=.5;J<=P.len-.5;J+=.25){let U=Xe(P,J),de=Math.hypot(U.x-b.x,U.y-b.y);de<R.d&&(R={route:W,q:J,d:de});}});let C=_.count??1;for(let P=0;P<C;P++){let W=e$1.create(),J=(_.hp??3)*d.hp*He();e$1.set(W,hn,{hp:J,maxHp:J,dps:(_.dps??.5)*d.hp*He(),left:_.time??12,route:R.route,progress:Math.max(.3,Math.min(v[R.route].len-.3,R.q+(P-(C-1)/2)*.45)),swing:0}),e$1.set(W,e,{x:0,y:0}),e$1.set(W,f,{shape:"actor",cast:_.cast??"helper",variant:r.int(0,99),h:ee()*.85,pose:"idle",depth:6}),st(W);let U=e$1.need(W,e);G(e$1,{kind:"ring",x:U.x,y:U.y,color:"accent",size:ee()*1.2});}}let m=_.cooldown*(Re().perk==="spells"?.7:1);oe.set(l,m),be=null,Se!==null&&e$1.isAlive(Se)&&ze(e$1,Se,"attack"),e$1.emit("spell-cast",{id:l});},st=l=>{let h=e$1.need(l,hn),D=v[h.route],_=Xe(D,h.progress),b=Xe(D,h.progress-.2),m=ee(),R=e$1.need(l,e),C=e$1.need(l,f),P=ye(_.y)+m*.2;R.x=Le(_.x),R.y=P-(C.shape==="actor"?C.h/2:0),C.shape==="actor"&&(Math.abs(b.x-_.x)>1e-4&&(C.facing=b.x>_.x?1:-1),C.depth=Ht(e$1,P,5),C.h=m*.85);},Z=()=>{(Se===null||!e$1.isAlive(Se))&&(Se=e$1.create());let l=ee(),h=p.gate,D=[[1,0],[-1,0],[0,-1],[0,1]].map(([m,R])=>({col:h.col+m,row:h.row+R})).find(m=>m.col>=0&&m.row>=0&&m.col<Sn&&m.row<En&&".tr*".includes(p.rows[m.row][m.col]))??h,_=ke(D),b=_.y+l*.35;e$1.set(Se,e,{x:_.x,y:b-l*.6}),e$1.set(Se,f,{shape:"actor",cast:Re().cast,h:l*1.2,pose:"idle",facing:D.col>h.col?-1:1,depth:Ht(e$1,b,5)});},H=()=>{if(ht(e$1,"td-build")||p.spots.length===0)return;let l=v[0],h=Xe(l,l.len*.4),D=0,_=1/0;p.spots.forEach((b,m)=>{let R=Math.hypot(b.col+.5-h.x,b.row+.5-h.y);R<_&&(_=R,D=m);}),ft(e$1,"tap",ke(p.spots[D]),void 0,ee()*1.2);},X=()=>{if(ht(e$1,"td-call")||K>0)return;let l=ke(p.paths[0][0]);ft(e$1,"tap",l,void 0,ee()*1.2);},q=()=>{let l=Ce(e$1),h=Math.min(l.w,l.h),D=ee(),_=l.h*.085,b=h*.05,m=(U,de,ce,he,pe="text",Be=h*.042)=>Te(U,de,ce,{shape:"text",text:he,size:Math.round(Be),color:pe,bold:true,depth:70});Te("h:lives:i",l.w*.07,_,{shape:"sprite",art:"heart",w:b,h:b,depth:70}),m("h:lives",l.w*.15,_,String(E),E<=5?"danger":"text"),Te("h:gold:i",l.w*.3,_,{shape:"sprite",art:"td_gold",w:b*1.15,h:b,depth:70}),m("h:gold",l.w*.4,_,String(O),"coin"),Te("h:wave:i",l.w*.56,_,{shape:"sprite",art:"td_call",w:b,h:b,depth:70}),m("h:wave",l.w*.66,_,`${K}/${d.waves.length}`),Te("h:coin:i",l.w*.8,_,{shape:"sprite",art:"coin",w:b*.9,h:b*.9,depth:70}),m("h:coin",l.w*.89,_,String(e$1.vars.coins??0));let R=l.h*.125,C=e$1.query(Oe).find(U=>Qt(e$1.need(U,Oe).kind)?.boss);if(C!==void 0){let U=e$1.need(C,Oe),de=l.w*.55,ce=Math.max(10,h*.022);Te("h:n:boss:bg",l.w/2,R,{shape:"rect",w:de,h:ce,color:"#000000",alpha:.5,radius:ce/2,depth:69});let he=Math.max(1,(de-4)*Math.max(0,U.hp/U.maxHp));Te("h:n:boss:fill",l.w/2-(de-4)/2+he/2,R,{shape:"rect",w:he,h:ce-4,color:"danger",radius:(ce-4)/2,depth:69.1}),Te("h:n:boss:i",l.w/2-de/2-b*.7,R,{shape:"sprite",art:"skull",w:b,h:b,depth:70});}else if(ae!==null&&K<d.waves.length){let U=new Map;for(let pe of d.waves[K].groups)U.set(pe.enemy,(U.get(pe.enemy)??0)+pe.count);let de=[...U].slice(0,5),ce=h*.15,he=l.w/2-(de.length-1)*ce/2;de.forEach(([pe,Be],Ye)=>{let pt=Qt(pe),Lt=he+Ye*ce;Te(`h:n:${pe}:a`,Lt-b*.4,R+b*.1,{shape:"actor",cast:pt.cast,variant:pt.variant??1,h:b*1.5*Math.min(1.3,pt.size+.25),pose:pt.flying?"air":"idle",depth:70}),m(`h:n:${pe}:t`,Lt+b*.55,R+b*.1,`\xD7${Be}`,pt.boss?"danger":"text",h*.034);});}if(me=[],ae!==null&&K<d.waves.length){let U=K===0?1+.08*Math.sin(e$1.time*6):1;p.paths.forEach((de,ce)=>{let he=ke(de[0]),pe=D*.42;me.push({id:`call:${ce}`,x:he.x,y:he.y,r:pe*1.2}),Te(`b:call:${ce}:bg`,he.x,he.y,{shape:"circle",r:pe,color:"danger",alpha:.92,depth:65},U),Te(`b:call:${ce}:i`,he.x,he.y,{shape:"sprite",art:"td_call",w:pe*1.3,h:pe*1.3,depth:65.1},U),Te(`b:call:${ce}: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=l.h*.925,W=h*.065;qr.filter(U=>d.spells.includes(U.id)).forEach((U,de)=>{let ce=l.w*.12+de*W*2.6,he=oe.get(U.id)??0;me.push({id:`spell:${U.id}`,x:ce,y:P,r:W*1.15}),be===U.id&&Te(`b:s:${U.id}:rim`,ce,P,{shape:"circle",r:W*1.18,color:"coin",alpha:.6+.4*Math.sin(e$1.time*8),depth:64.9}),Te(`b:s:${U.id}:bg`,ce,P,{shape:"circle",r:W,color:"panel",alpha:.92,depth:65}),Te(`b:s:${U.id}:i`,ce,P,{shape:"sprite",art:U.icon,w:W*1.25,h:W*1.25,alpha:he>0?.4:1,depth:65.1}),he>0&&Te(`b:s:${U.id}:t`,ce,P,{shape:"text",text:String(Math.ceil(he)),size:Math.round(W*.8),color:"text",bold:true,depth:65.2});});let J=l.w*.88;me.push({id:"speed",x:J,y:P,r:W*1.15}),Te("b:speed:bg",J,P,{shape:"circle",r:W,color:se>1?"coin":"panel",alpha:.92,depth:65}),e$1.vars.td_buttons=At(me),Te("b:speed:t",J,P,{shape:"text",text:`x${se}`,size:Math.round(W*.75),color:se>1?"panel":"text",bold:true,depth:65.1});},x=()=>{let l=ee(),h=new Set,D=(_,b,m,R,C)=>{h.add(_);let P=Q.get(_);if(!P){P=[e$1.create(),e$1.create(),e$1.create(),e$1.create(),e$1.create()];for(let[Lt,_n]of P.entries())e$1.set(_n,Zc,{of:_,part:String(Lt)});Q.set(_,P);}let W=e$1.need(_,e),J=e$1.need(_,f),U=J.shape==="actor"?J.h:l,de=W.y-U/2-l*.08,ce=Math.min(Ce(e$1).w,Ce(e$1).h),he=Math.max(l*.62,ce*.065),pe=Math.max(5,he*.13),Be=b<.999;e$1.set(P[0],e,{x:W.x,y:de}),e$1.set(P[0],f,{shape:"rect",w:he,h:pe,color:"#000000",alpha:Be?.55:0,radius:pe/2,depth:30});let Ye=Math.max(1,(he-2)*Math.max(0,b));e$1.set(P[1],e,{x:W.x-(he-2)/2+Ye/2,y:de}),e$1.set(P[1],f,{shape:"rect",w:Ye,h:pe-2,color:m,alpha:Be?1:0,radius:(pe-2)/2,depth:30.1}),e$1.set(P[2],e,{x:W.x-he/2-l*.12,y:de}),e$1.set(P[2],f,{shape:"sprite",art:R??"shield",w:l*.24,h:l*.24,alpha:R?1:0,depth:30.2});let pt=W.y+U/2;e$1.set(P[3],e,{x:W.x,y:pt}),e$1.set(P[3],f,{shape:"sprite",art:"aura_field",w:l*.75,h:l*.32,color:"primary",alpha:C?.slow?.75:0,depth:2}),e$1.set(P[4],e,{x:W.x,y:W.y}),e$1.set(P[4],f,{shape:"sprite",art:"burst",w:l*.45,h:l*.45,color:"danger",alpha:C?.burn?.5+.4*Math.sin(e$1.time*20):0,depth:29});};for(let _ of e$1.query(Oe)){let b=e$1.need(_,Oe);D(_,b.hp/b.maxHp,"danger",Qt(b.kind)?.badge,{slow:b.slowLeft>0,burn:b.burnLeft>0});}for(let _ of e$1.query(hn)){let b=e$1.need(_,hn);D(_,b.hp/b.maxHp,"accent",void 0,null);}for(let[_,b]of [...Q])if(!h.has(_)){for(let m of b)e$1.destroy(m);Q.delete(_);}},S=()=>{for(let l of [sn,Oe,mr,hn,Xs,Ys,Zc,tl])nt(e$1,l);Ee.clear(),Q.clear();for(let l of e$1.query(f))e$1.need(l,f).shape==="actor"&&l!==Se&&!e$1.has(l,tl)&&e$1.destroy(l);},a=()=>{S(),d=Yr(Io(e$1,"meta:chapter")||1,s("difficulty"),o),p=Xr(jr(Us(d.map),d.mirror)),Me(),Ot(e$1,"top"),M=we(),et(),O=0,ct((d.gold+s("gold")+Io(e$1,"meta:start_gold"))*(Re().perk==="gold"?1.25:1)),I=s("lives")+Io(e$1,"meta:lives"),E=I,K=0,z=[],ne=0,ae=s("firstWait"),j$1=0,ue=0,fe=0,ie=false,xe=false,se=1,_e=null,Ae=[],be=null,oe.clear(),me=[],e$1.vars.lives=E,e$1.vars.wave=0,e$1.vars.waves=d.waves.length,e$1.vars.td_level=d.level,e$1.vars.td_world=d.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,Z();},k$1=l=>{if(l.startsWith("call"))N();else if(l==="speed")se=se>1?1:2,e$1.vars.td_speed=se;else if(l.startsWith("spell:")){let h=l.slice(6);be===h?be=null:(oe.get(h)??0)<=0&&(be=h,Ke());}};e$1.on(j,l=>{let h=l;if(h.type!=="tap"||!Je(e$1)||Kn(e$1)||ie||We())return;if(_e!==null){let b=Ae.find(m=>Math.hypot(h.x-m.x,h.y-m.y)<=m.r);if(b){tn(b.action);return}Ke();}let D=me.find(b=>Math.hypot(h.x-b.x,h.y-b.y)<=b.r);if(D){k$1(D.id);return}if(be!==null){je(be,h.x,h.y);return}let _=Et(h.x,h.y);_>=0&&(ht(e$1,"td-build")||Dt(e$1),en(_));}),e$1.on(Nt,()=>{a(),e$1.vars.level=d.level,H();}),e$1.on(zt,a),e$1.on(Gt,le),e$1.on(Kt,()=>{We()&&(e$1.vars.reviving=false,$("overrun"));}),e$1.on(Bt,l=>{Ke(),Ge("b:"),me=[],Se!==null&&e$1.isAlive(Se)&&Qe(e$1,Se,l.reason==="defended"?"dance":"die");for(let h of e$1.query(Oe))Qe(e$1,h,"idle");}),e$1.on(k,()=>{Ot(e$1,"top"),M=we(),et();for(let l of e$1.query(sn))lt(l);nt(e$1,mr),_e!==null&&Rt(),Z();}),e$1.addSystem({id:"tower-defense",order:0,run(l,h){if(!Je(l)||ie||We())return;let D=h*se;j$1+=h;let _=ee();for(let[b,m]of oe)m>0&&oe.set(b,Math.max(0,m-D));if(z.length>0){for(ne+=D;z.length>0&&z[0].at<=ne;){let b=z.shift();B(b.enemy,b.entry,0,K);}z.length===0&&K<d.waves.length&&(ae=s("wavePause"));}else ae!==null&&(ae-=D,ae<=0&&w());for(let b of l.query(hn)){let m=l.need(b,hn);if(m.left-=D,m.left<=0||m.hp<=0){l.remove(b,hn),Qe(l,b,"die"),rr(l,b,.8);for(let P of l.query(Oe))l.need(P,Oe).heldBy===b&&(l.need(P,Oe).heldBy=-1);continue}let R=Xe(v[m.route],m.progress),C=l.query(Oe).filter(P=>l.need(P,Oe).heldBy===b);if(C.length<2){let P=l.query(Oe).filter(W=>{let J=l.need(W,Oe),U=Qt(J.kind);return J.heldBy<0&&!U.flying&&!U.boss&&Math.hypot(J.x-R.x,J.y-R.y)<=Vp}).slice(0,2-C.length);for(let W of P)l.need(W,Oe).heldBy=b,C.push(W);}C.length>0&&(u(C[0],m.dps*D,"soldier"),m.swing-=D,m.swing<=0&&(ze(l,b,"attack"),m.swing=.6)),st(b);}for(let b of l.query(Oe)){let m=l.get(b,Oe);if(!m)continue;let R=Qt(m.kind);if(!(m.burnLeft>0&&(m.burnLeft-=D,u(b,m.burn*D,"burn"),!l.has(b,Oe)))){if(m.slowLeft>0&&(m.slowLeft-=D,m.slowLeft<=0&&(m.slow=0)),m.stun>0&&(m.stun-=D),R.heals&&(m.healCd-=D,m.healCd<=0)){m.healCd=R.heals.every;for(let P of l.query(Oe)){let W=l.need(P,Oe);Math.hypot(W.x-m.x,W.y-m.y)>R.heals.radius||(W.hp=Math.min(W.maxHp,W.hp+W.maxHp*R.heals.share));}let C=y(b);G(l,{kind:"ring",x:C.x,y:C.y,color:"accent",size:R.heals.radius*_*2});}if(R.summons&&(m.summonCd-=D,m.summonCd<=0)){m.summonCd=R.summons.every;for(let C=0;C<R.summons.count;C++)B(R.summons.id,m.route,Math.max(0,m.progress-.45*(C+1)),m.wave);ze(l,b,"cheer");}if(R.enrage&&!m.enraged&&m.hp<m.maxHp*R.enrage.below){m.enraged=true;let C=y(b);G(l,{kind:"ring",x:C.x,y:C.y,color:"danger",size:_*2});}if(m.heldBy>=0&&!l.has(m.heldBy,hn)&&(m.heldBy=-1),m.heldBy<0&&m.stun<=0&&(m.progress+=R.speed*(1-m.slow)*(m.enraged&&R.enrage?R.enrage.speed:1)*D),m.progress>=v[m.route].len){if(T(b),ie||We())return;continue}f$1(b);}}for(let b of l.query(sn)){let m=l.need(b,sn);if(m.cooldown-=D,m.cooldown>0)continue;let R=kn(m.kind),C=wo(R,m.tier,m.branch||null),P=1+Io(l,R.metaVar),W=p.spots[m.spot],J=W.col+.5,U=W.row+.5,de=l.query(Oe).filter(he=>{let pe=l.need(he,Oe);return (Qt(pe.kind).flying?C.air:C.ground)&&pe.progress>0&&Math.hypot(pe.x-J,pe.y-U)<=C.range}).sort((he,pe)=>c(l.need(he,Oe))-c(l.need(pe,Oe))).slice(0,C.multishot??1);if(de.length===0){m.cooldown=0;continue}m.cooldown=1/C.rate;let ce={x:Le(J),y:ye(U)-_*.75};for(let he of de){let pe=C.crit!==void 0&&r.chance(C.crit);if(C.beam){let _n=[],yn=ce,ln=he,Wn=1;for(let br=0;br<=(C.chain??0)&&ln!==void 0;br++){let Pl=y(ln);A(yn,Pl,C.type==="magic"?"secondary":"primary"),_n.push(ln);let vr=l.need(ln,Oe),zd=l.query(Oe).filter(xr=>!_n.includes(xr)&&Math.hypot(l.need(xr,Oe).x-vr.x,l.need(xr,Oe).y-vr.y)<=1.6).sort((xr,Cl)=>Math.hypot(l.need(xr,Oe).x-vr.x,l.need(xr,Oe).y-vr.y)-Math.hypot(l.need(Cl,Oe).x-vr.x,l.need(Cl,Oe).y-vr.y))[0];i(ln,C,P,pe,Wn),yn=Pl,ln=zd,Wn*=.7;}continue}let Be=y(he),Ye=l.create(),pt=Math.max(1,Math.hypot(Be.x-ce.x,Be.y-ce.y));l.set(Ye,mr,{target:he,x:ce.x,y:ce.y,ax:Be.x,ay:Be.y,dist0:pt,went:0,stats:C,power:P,crit:pe}),l.set(Ye,e,{x:ce.x,y:ce.y});let Lt=C.shot==="td_arrow"?{w:_*.55,h:_*.18}:C.lob?{w:_*.34,h:_*.34}:{w:_*.3,h:_*.3};l.set(Ye,f,{shape:"sprite",art:C.shot,...Lt,...C.burn?{color:"danger"}:C.slow?{color:"primary"}:C.type==="magic"?{color:"secondary"}:{},depth:40});}}for(let b of l.query(mr)){let m=l.need(b,mr);if(l.has(m.target,Oe)){let U=y(m.target);m.ax=U.x,m.ay=U.y;}let R=m.ax-m.x,C=m.ay-m.y,P=Math.hypot(R,C),W=m.stats.shotSpeed*_*D,J=l.need(b,e);if(P>W){m.x+=R/P*W,m.y+=C/P*W,m.went+=W;let U=Math.min(1,m.went/m.dist0);J.x=m.x,J.y=m.y-(m.stats.lob?Math.sin(Math.PI*U)*_*.9:0),J.rotation=m.stats.lob?(J.rotation??0)+D*8:Math.atan2(C,R);continue}if(l.destroy(b),m.stats.splash){let U=Ue(m.ax,m.ay);G(l,{kind:"burst",x:m.ax,y:m.ay,color:m.stats.burn?"danger":m.stats.slow?"primary":"coin",n:12,size:m.stats.splash*_*1.6}),m.stats.lob&&G(l,{kind:"shake",power:.25});for(let de of l.query(Oe)){let ce=l.need(de,Oe),he=Qt(ce.kind);(he.flying?m.stats.air:m.stats.ground)&&Math.hypot(ce.x-U.x,ce.y+(he.flying?-0.55:0)-U.y)<=m.stats.splash&&i(de,m.stats,m.power,m.crit);}}else l.has(m.target,Oe)&&(G(l,{kind:"burst",x:m.ax,y:m.ay,color:m.stats.type==="magic"?"secondary":"coin",n:5,size:_*.5}),i(m.target,m.stats,m.power,m.crit));if(ie||We())return}for(let b of l.query(Xs)){let m=l.need(b,Xs);m.t+=D;let R=(m.t-m.delay)/Hp,C=l.need(b,e),P=l.need(b,f);if(R<0)continue;if(R<1){let J=Ce(l).h;C.x=Le(m.x)+(1-R)*_*2,C.y=ye(m.y)-(1-R)*J*.5,C.rotation=-0.9,P.shape==="sprite"&&(P.alpha=1);continue}l.destroy(b),G(l,{kind:"burst",x:Le(m.x),y:ye(m.y),color:"danger",n:20,size:m.radius*_*2}),G(l,{kind:"ring",x:Le(m.x),y:ye(m.y),color:"coin",size:m.radius*_*2.2}),G(l,{kind:"shake",power:.8});let W={damage:m.damage,type:"true",...m.burn>0?{burn:m.burn,burnTime:2}:{}};for(let J of l.query(Oe)){let U=l.need(J,Oe);Math.hypot(U.x-m.x,U.y-m.y)<=m.radius&&i(J,W,1,false,1,"spell");}if(ie||We())return}for(let b of l.query(Ys)){let m=l.need(b,Ys);m.life-=h,m.life<=0&&l.destroy(b);}if(K>=d.waves.length&&z.length===0&&l.query(Oe).length===0){$("defended");return}l.vars.level_progress=d.waves.length>0?Math.min(1,(K-(z.length>0||l.query(Oe).length>0?.5:0))/d.waves.length):0,l.vars.score=ge(),at.clear(),_e!==null&&Rt(),x(),q(),Wt(["m:","h:","b:"]);}});let A=(l,h,D)=>{let _=Math.hypot(h.x-l.x,h.y-l.y),b=e$1.create();e$1.set(b,Ys,{life:.16}),e$1.set(b,e,{x:(l.x+h.x)/2,y:(l.y+h.y)/2,rotation:Math.atan2(h.y-l.y,h.x-l.x)}),e$1.set(b,f,{shape:"sprite",art:"zap",w:Math.max(8,_),h:ee()*.22,color:D,depth:41});};Me(),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"},$e=(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}),Xt=e=>({kind:"managers",n:e}),gr=[$e("lb",[Ve(5200)]),$e("lb",[St("l",25),Ve(62e3)]),$e("lbc",[Ve(17e3)],"r"),$e("lbc",[Xt(2),Ve(34e3)],"r"),$e("lbc",[St("b",25),Ve(51e3)],"rc"),$e("lbcw",[Ve(21e4)],"rc"),$e("lbcw",[St("c",25),Xt(2)],"rc"),$e("lbcw",[Xt(3),Ve(46e4)],"rc"),$e("lbcw",[St("w",10),Ve(1e6)],"rc"),Qs($e("lbcw",[St("c",25),Xt(4),Ve(5e6)],"rc")),$e("bcw",[Ve(73e3)],"rb"),$e("bcw",[St("c",25),Ve(17e4)],"rcb"),$e("bcwn",[Ve(2e5)],"rcb"),$e("bcwn",[Xt(2),Ve(42e4)],"rcb"),$e("bcwn",[St("n",5),Ve(97e4)],"rcb"),$e("bcwn",[St("w",25),Ve(24e5)],"rcb"),$e("bcwn",[Xt(3),Ve(19e5)],"rcb"),$e("bcwn",[St("c",50),Ve(32e5)],"rcb"),$e("bcwn",[St("n",10),Xt(3)],"rcb"),Qs($e("bcwn",[St("n",10),Xt(4),Ve(64e6)],"rcb")),$e("cwn",[Ve(12e5)],"rcbi"),$e("cwn",[St("w",25),Ve(2e6)],"rcbi"),$e("cwnh",[Ve(27e5)],"rcbi"),$e("cwnh",[Xt(2),Ve(32e5)],"rcbi"),$e("cwnh",[St("h",5),Ve(16e6)],"rcbi"),$e("cwnh",[St("n",25),Ve(26e6)],"rcbi"),$e("cwnh",[Xt(3),Ve(15e6)],"rcbi"),$e("cwnh",[St("w",50),Ve(42e6)],"rcbi"),$e("cwnh",[St("h",10),Xt(3)],"rcbi"),Qs($e("cwnh",[St("h",10),Xt(4),Ve(26e7)],"rcbi")),$e("wnhk",[Ve(12e6)],"rcbi"),$e("wnhk",[St("h",10),Ve(36e6)],"rcbi"),$e("wnhk",[Xt(3),Ve(21e7)],"rcbi"),$e("nhkp",[Ve(21e7)],"rcbi"),$e("nhkp",[St("k",10),Ve(38e7)],"rcbi"),$e("nhkp",[Xt(2),Ve(42e7)],"rcbi"),$e("nhkp",[St("p",5),Ve(27e8)],"rcbi"),$e("nhkp",[St("k",25),Ve(32e8)],"rcbi"),$e("nhkp",[St("p",10),Xt(3)],"rcbi"),Qs($e("nhkp",[St("p",10),Xt(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)),d=Math.max(1,Math.min(n,o));for(;d>1&&Zn(e,t,d)>e.cash;)d--;return Zn(e,t,d)<=e.cash?d: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(d=>o<d.at&&s.level>=d.at).map(d=>d.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 d=Math.floor(r.progress);r.progress-=d;let p=mn(e,r)*d;Ho(e,p),s.push({index:o,amount:p});}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(E=>E.broken>0);if(n>=0)return {kind:"fix",index:n};let s=null,r=aa(e),o=(E,I,K)=>{if(K>e.cash+r*8)return;let z=I/Math.max(1,K);(!s||z>s.value)&&(s={move:E,value:z,price:K});},d=E=>t.some(I=>I.kind==="level"&&I.biz===E&&$n(e,I)<1),p=t.some(E=>E.kind==="managers"&&$n(e,E)<1),v=t.some(E=>E.kind==="cash"&&$n(e,E)<1);e.biz.forEach((E,I)=>{let K=sa(e,E)*dl(e,E),z={...E,level:E.level+1},ae=(mn(e,z)/Jn(e,z)*dl(e,z)-K)*(E.level===0?3:1)*(d(E.def.id)?3:1);o({kind:"buy",index:I},ae+(d(E.def.id)&&!v?r*.05:0),Zn(e,E)),E.level>0&&!E.manager&&o({kind:"hire",index:I},sa(e,E)*(1-dl(e,E))*1.6*(p?3:1)+(p?r*.05:0),no(e,E));});for(let E of fa(e,6)){let I=E.index<0?r*(E.def.mult-1):sa(e,e.biz[E.index])*(E.def.mult-1);o({kind:"upgrade",key:E.key},I,E.price);}let M=e.biz.map((E,I)=>({b:E,i:I})).filter(E=>E.b.ready).sort((E,I)=>mn(e,I.b)-mn(e,E.b))[0],O=s;return O&&O.price<=e.cash?O.move:M?{kind:"collect",index:M.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,d=0,p=0;for(;d<o;){if(Vo(n,e.goals))return d;if(ua(n,s),d+=s,d>=p){let v=ga(n,e.goals);v&&(ld(n,v),p=d+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,d=ba(n),p=(1.6-(r-1)*.08-o*.01)*(1.1-t*.2)*(s.extra??1),v=Math.max(45,Math.min(600,Math.ceil((Number.isFinite(d)?d:400)*p/5)*5));return {level:n,world:r,index:o,def:s,boss:s.vip===true,day:v,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=i=>nn(t,i),r=e$1.rng.stream("tycoon"),o=pn(n,"events",Qr.map(i=>i.id)),d=ro(1,s("difficulty")),p=zo(d.def),v=new Map,M=new Map,O=null,E=[],I=0,K=0,z=0,ne=0,ae=0,j$1=false,ue=false,fe=0,ie=null,xe=null,se=null,_e=()=>eo.find(i=>i.id===e$1.vars["meta:hero"])??eo[0],Ae=()=>na(_e().skill),be=()=>e$1.vars.reviving===true,oe=()=>d.def.goals,me=()=>{let i=Ce(e$1);return {...i,U:Math.min(i.w,i.h)}},Se=i=>{let u=me(),g=Math.max(1,p.biz.length),T=u.h*.25,w=u.h*.81,N=Math.max(6,u.h*.012),$=Math.min((w-T-N*(g-1))/g,150,u.w*.26),te=Math.min(u.w*.96,660),le=T+(w-T-(g*$+(g-1)*N))/2;return {x:u.w/2,y:le+i*($+N)+$/2,w:te,h:$}},Ee=i=>{let u=Se(i);return {x:u.x-u.w/2+u.h*.56,y:u.y,size:u.h*.9}},Q=()=>me().h*.9,Re=()=>{let i=me();return Math.min(i.U*.075,i.h*.055)},We=()=>{let i=me(),u=xe?1-xe.left/xe.def.ttl:0;return {x:-i.w*.05+u*i.w*1.1,y:i.h*.21,r:i.U*.06}},we=new Set,ee=(i,u,g,T,w=1)=>{we.add(i);let N=v.get(i);(N===void 0||!e$1.isAlive(N))&&(N=e$1.create(),e$1.set(N,qp,{id:i}),v.set(i,N)),e$1.set(N,e,{x:u,y:g,scale:w}),e$1.set(N,f,T);},Le=()=>{for(let[i,u]of [...v])we.has(i)||(e$1.destroy(u),v.delete(i));},ye=(i,u,g,T,w,N,$=70)=>ee(i,u,g,{shape:"text",text:T,size:Math.max(9,Math.round(N)),color:w,bold:true,depth:$}),ke=(i,u,g,T,w,N,$,te=2)=>{ee(`${i}:bg`,u,g,{shape:"rect",w:T+4,h:w+4,color:"#000000",alpha:.4,radius:(w+4)/2,depth:te});let le=Math.max(1,T*Math.max(0,Math.min(1,N)));ee(`${i}:fill`,u-T/2+le/2,g,{shape:"rect",w:le,h:w,color:$,radius:w/2,depth:te+.1});},Ue=i=>E.push(i),Y=i=>{let u=p.biz[i],g=Go[ae]??1;return g===0?Math.max(1,pl(p,u)):g},Me=()=>{p.biz.forEach((i,u)=>{let g=Se(u),T=Ee(u),w=i.level>0,N=i.def.color;ee(`r${u}`,g.x,g.y,{shape:"sprite",art:"panel",w:g.w,h:g.h,color:"panel",depth:0}),i.rush>0&&ee(`r${u}:rush`,T.x,T.y,{shape:"circle",r:T.size*.55,color:"coin",alpha:.35+.2*Math.sin(e$1.time*8),depth:.5});let $=i.ready?1+.06*Math.abs(Math.sin(e$1.time*6)):1;ee(`r${u}:b`,T.x,T.y,{shape:"sprite",art:i.def.art,w:T.size,h:T.size,color:N,alpha:w?i.broken>0?.55:1:.35,depth:1},$),Ue({id:`biz${u}`,x:T.x,y:T.y,w:T.size,h:T.size});let te=g.x-g.w*.12,le=g.h*.2,ge=Wo(i.level);if(ye(`r${u}:lv`,te,g.y-g.h*.26,w?`Lv ${i.level}${ge.next?`/${ge.next}`:""}`:"Lv 0","text",le,2),w){ye(`r${u}:inc`,te,g.y+g.h*0,`+${an(mn(p,i))}`,"coin",le*.95,2);let a=i.ready||Jn(p,i)<=.15&&i.manager?1:i.progress;ke(`r${u}:bar`,te,g.y+g.h*.28,g.w*.3,Math.max(6,g.h*.12),a,i.broken>0?"danger":N),i.ready&&!i.manager&&ye(`r${u}:ok`,T.x+T.size*.36,T.y+T.size*.34,"$","coin",T.size*.3,3);}if(ie?.index===u){let a=1+.12*Math.sin(e$1.time*9);ee(`r${u}:ev`,T.x+T.size*.32,T.y-T.size*.3,{shape:"sprite",art:ie.def.art,w:T.size*.5,h:T.size*.5,depth:4},a);}else i.broken>0&&(ee(`r${u}:ev`,T.x+T.size*.3,T.y-T.size*.28,{shape:"sprite",art:"ty_wrench",w:T.size*.48,h:T.size*.48,depth:4},1+.08*Math.sin(e$1.time*10)),ye(`r${u}:evn`,T.x+T.size*.3,T.y+T.size*.05,String(i.broken),"danger",T.size*.26,4.1));let He=g.x+g.w*.13,je=g.h*.27;if(w&&!i.manager){let a=no(p,i),k=p.cash>=a;ee(`r${u}:m:bg`,He,g.y-g.h*.08,{shape:"circle",r:je,color:k?"secondary":"panel",alpha:k?.95:.7,depth:1}),ee(`r${u}:m`,He,g.y-g.h*.08,{shape:"sprite",art:"ty_manager",w:je*1.7,h:je*1.7,alpha:k?1:.5,depth:1.2}),ye(`r${u}:m:p`,He,g.y+g.h*.32,an(a),k?"text":"muted",le*.8,2),Ue({id:`mgr${u}`,x:He,y:g.y,w:je*2.2,h:g.h*.9});}let st=g.x+g.w/2-g.w*.14,Z=g.w*.25,H=g.h*.72,X=Y(u),q=Zn(p,i,X),x=p.cash>=q;ee(`r${u}:buy`,st,g.y,{shape:"sprite",art:"button",w:Z,h:H,color:x?"accent":"panel",alpha:x?1:.6,depth:1}),ye(`r${u}:buy:n`,st,g.y-H*.2,w?`+${X}`:"OPEN","text",le*.9,2),ee(`r${u}:buy:c`,st-Z*.3,g.y+H*.2,{shape:"sprite",art:"coin",w:le*.8,h:le*.8,depth:2}),ye(`r${u}:buy:p`,st+Z*.08,g.y+H*.2,an(q),x?"coin":"muted",le*.85,2),Ue({id:`buy${u}`,x:st,y:g.y,w:Z,h:H});let S=M.get(u);if(i.manager&&(S===void 0||!e$1.isAlive(S))&&(S=e$1.create(),e$1.set(S,ml,{index:u}),e$1.set(S,f,{shape:"actor",cast:"helper",variant:u*13+5,h:g.h*.78,pose:"idle",facing:1,depth:2}),M.set(u,S)),S!==void 0&&e$1.isAlive(S)){e$1.set(S,e,{x:He,y:g.y+g.h*.02});let a=e$1.need(S,f);a.shape==="actor"&&(a.h=g.h*.78);}});},Xe=i=>i.kind==="cash"?"coin":i.kind==="managers"?"ty_manager":yr(i.biz??"")?.art??"biz1",at=i=>i.kind==="cash"?p.earned:i.kind==="managers"?ma(p):p.biz.find(u=>u.def.id===i.biz)?.level??0,Te=()=>{let i=me(),u=i.U,g=i.h*.09;ee("h:t:i",i.w*.09,g,{shape:"sprite",art:"hourglass",w:u*.06,h:u*.06,depth:70}),ye("h:t",i.w*.09+u*.09,g,Zo(I),I<=15?"danger":"text",u*.05),ee("h:c:i",i.w*.42,g,{shape:"sprite",art:"coin",w:u*.07,h:u*.07,depth:70}),ye("h:c",i.w*.42+u*.13,g,an(p.cash),"coin",u*.065);let T=u*.17;ee("h:mode",i.w*.88,g,{shape:"sprite",art:"button",w:T,h:u*.08,color:"secondary",depth:70}),ye("h:mode:t",i.w*.88,g,Go[ae]===0?"MAX":`\xD7${Go[ae]}`,"text",u*.042,70.1),Ue({id:"mode",x:i.w*.88,y:g,w:T,h:u*.09});let w=oe(),N=Math.min(i.w*.3,230),$=Math.max(30,i.h*.05),te=i.h*.15;if(w.forEach((Z,H)=>{let X=i.w/2+(H-(w.length-1)/2)*(N+u*.02),q=$n(p,Z)>=1;ee(`h:g${H}`,X,te,{shape:"sprite",art:"panel",w:N,h:$,color:q?"accent":"panel",depth:70}),ee(`h:g${H}:i`,X-N*.36,te-$*.06,{shape:"sprite",art:Xe(Z),w:$*.75,h:$*.75,depth:70.1});let x=at(Z),S=q?"\u2713":Z.kind==="cash"?`${an(x)}/${an(Z.n)}`:Z.kind==="level"?`Lv ${x}/${Z.n}`:`${x}/${Z.n}`;ye(`h:g${H}:t`,X+N*.1,te-$*.08,S,"text",$*.36,70.1),ke(`h:g${H}:bar`,X+N*.1,te+$*.3,N*.62,Math.max(4,$*.1),$n(p,Z),q?"accent":"coin",70.1);}),p.timed.forEach((Z,H)=>{let X=i.w*.9-H*u*.16,q=Z.id==="sale"?"ty_sk_sale":Z.id==="invest"?"ty_investor":Ae().art;ee(`h:tm${H}`,X-u*.04,i.h*.205,{shape:"sprite",art:q,w:u*.06,h:u*.06,depth:70}),ye(`h:tm${H}:t`,X+u*.035,i.h*.205,`${Math.ceil(Z.left)}`,"secondary",u*.04);}),xe){let Z=We();ee("h:courier",Z.x,Z.y+Math.sin(e$1.time*10)*Z.r*.08,{shape:"sprite",art:xe.def.art,w:Z.r*2,h:Z.r*2,depth:72}),Ue({id:"courier",x:Z.x,y:Z.y,w:Z.r*2.6,h:Z.r*2.6});}let le=Q(),ge=Re(),He=i.w*.25,je=ne>=Ae().charge;je&&ee("h:sk:glow",He,le,{shape:"circle",r:ge*1.28,color:"secondary",alpha:.5+.3*Math.sin(e$1.time*7),depth:68.9}),ee("h:sk:bg",He,le,{shape:"circle",r:ge,color:"panel",alpha:.95,depth:69}),ee("h:sk",He,le,{shape:"sprite",art:Ae().art,w:ge*1.4,h:ge*1.4,alpha:je?1:.45,depth:69.2}),ke("h:charge",He,le+ge*1.3,ge*2,Math.max(5,ge*.2),ne/Ae().charge,"secondary",69),Ue({id:"skill",x:He,y:le,w:ge*2.4,h:ge*2.4}),fa(p,3).forEach((Z,H)=>{let X=i.w*(.47+H*.18),q=p.cash>=Z.price;ee(`h:u${H}:bg`,X,le,{shape:"circle",r:ge,color:q?"accent":"panel",alpha:q?.95:.7,depth:69}),ee(`h:u${H}`,X,le-ge*.08,{shape:"sprite",art:Z.def.art,w:ge*1.5,h:ge*1.5,alpha:q?1:.55,depth:69.2});let x=Z.index>=0?p.biz[Z.index]:void 0;x&&ee(`h:u${H}:b`,X+ge*.7,le-ge*.6,{shape:"sprite",art:x.def.art,w:ge*.9,h:ge*.9,color:x.def.color,depth:69.3}),ye(`h:u${H}:p`,X,le+ge*1.3,an(Z.price),q?"coin":"muted",ge*.42,69.3),Ue({id:`up:${Z.key}`,x:X,y:le,w:ge*2.3,h:ge*2.6});}),(O===null||!e$1.isAlive(O))&&(O=e$1.create(),e$1.set(O,f,{shape:"actor",cast:_e().cast,h:ge*2.6,pose:"idle",facing:1,depth:20})),e$1.set(O,e,{x:i.w*.09,y:le-ge*.1});let st=e$1.need(O,f);if(st.shape==="actor"&&(st.h=ge*2.6),se){let Z=Math.min(i.w*.86,500),H=Z*.42,X=i.w/2,q=i.h*.5;ee("h:inv:dim",X,q,{shape:"rect",w:i.w,h:i.h,color:"#000000",alpha:.35,depth:79}),ee("h:inv",X,q,{shape:"sprite",art:"panel",w:Z,h:H,color:"panel",depth:80}),ee("h:inv:i",X-Z*.34,q,{shape:"sprite",art:se.def.art,w:H*.62,h:H*.62,depth:80.1});let x=Z*.3,S=H*.5,a=ot();ee("h:inv:a",X+Z*.02,q-H*.04,{shape:"sprite",art:"button",w:x,h:S,color:"accent",depth:80.1}),ee("h:inv:a:c",X+Z*.02-x*.28,q-H*.04,{shape:"sprite",art:"coin",w:S*.4,h:S*.4,depth:80.2}),ye("h:inv:a:t",X+Z*.02+x*.1,q-H*.04,an(a),"coin",S*.3,80.2),ee("h:inv:b",X+Z*.33,q-H*.04,{shape:"sprite",art:"button",w:x,h:S,color:"secondary",depth:80.1}),ye("h:inv:b:t",X+Z*.33,q-H*.04,`\xD7${se.def.mult??2} ${se.def.seconds??30}s`,"text",S*.28,80.2),ke("h:inv:bar",X+Z*.17,q+H*.32,Z*.6,Math.max(4,H*.05),se.left/se.def.ttl,"coin",80.1),Ue({id:"inv_now",x:X+Z*.02,y:q-H*.04,w:x,h:S}),Ue({id:"inv_share",x:X+Z*.33,y:q-H*.04,w:x,h:S});}},Wt=()=>{E=[],we.clear(),Me(),Te(),Le(),e$1.vars.ty_buttons=E.map(i=>`${i.id}@${Math.round(i.x)},${Math.round(i.y)}`).join(";");},Ge=()=>{e$1.vars.cash=Math.floor(p.cash),e$1.vars.earned=Math.floor(p.earned),e$1.vars.time_left=I,e$1.vars.ty_charge=Math.floor(ne),e$1.vars.ty_mode=Go[ae]??1,e$1.vars.level_progress=ya(p,oe()),e$1.vars.ty_goals=oe().map(i=>`${i.kind}:${Math.floor(at(i))}/${i.n}`).join("|");},qe=()=>{for(let u of [...v.values(),...M.values()])e$1.isAlive(u)&&e$1.destroy(u);v.clear(),M.clear(),O!==null&&e$1.isAlive(O)&&e$1.destroy(O),O=null,d=ro(oo(e$1,"meta:chapter")||1,s("difficulty"));let i={income:oo(e$1,"meta:income"),speed:oo(e$1,"meta:speed"),discount:oo(e$1,"meta:discount")};p=zo(d.def,i,Math.round(d.cash*(1+oo(e$1,"meta:cash")))),dd.set(e$1,{s:p,level:d}),Ot(e$1,"board",Ce(e$1).h*.24),I=d.day,K=0,z=0,ne=0,j$1=false,ue=false,fe=8+r.range(0,4),ie=null,xe=null,se=null,e$1.vars.ty_level=d.level,e$1.vars.ty_world=d.world,e$1.vars.coins=0,e$1.vars.score=0,e$1.vars.stars=0,e$1.vars.reviving=false,Ge();},et=i=>{if(ue)return;ue=true;let u=i==="cleared",g=ya(p,oe()),T=u?Math.min(j$1?1:3,ra(I/Math.max(1,d.day))):0,w=Math.round(d.coins*s("coinReward")*(u?[1,1,1.25,1.5][T]:g*.5));w>0&&(Fe(e$1,"coins",w),e$1.emit("coin-collected",{value:w})),u&&e$1.vars["meta:first_clear"]===true&&Fe(e$1,"coins",d.firstClearGold),e$1.vars.stars=T,e$1.vars.score=Math.round(g*1e3)+(u?T*500+Math.floor(I)*10:0),e$1.vars.reviving=false,ie=null,xe=null,se=null,Ge(),e$1.emit($t,{reason:i,stats:{chapter:d.level,seconds:Math.floor(K),cleared:u,stars:T,coins:Number(e$1.vars.coins??0),earned:Math.floor(p.earned),managers:ma(p)}});},rt=()=>{ue||(G(e$1,{kind:"flash",color:"coin"}),et("cleared"));},lt=()=>{if(e$1.vars.revive_ready===true&&!j$1){e$1.vars.reviving=true,e$1.emit(Vt,{});return}et("out-of-time");},ct=()=>{be()&&(j$1=true,e$1.vars.reviving=false,I+=oa,G(e$1,{kind:"flash",color:"coin"}),Ge());},dt=()=>Math.max(aa(p),d.cash*.05),ot=()=>Math.round(dt()*(se?.def.now??25)),Pe=i=>{ne=Math.min(Ae().charge,ne+td),e$1.emit("event-handled",{id:i});},bt=()=>{let i=p.biz.map(($,te)=>({b:$,i:te})).filter($=>$.b.level>0&&$.b.broken===0),u=$=>$.effect==="rush"?!ie&&i.some(te=>te.b.rush<=0):$.effect==="break"?!p.biz.some(te=>te.broken>0)&&i.some(te=>te.b.level>=3):$.effect==="invest"?!se:!xe,g=d.def.events.filter($=>o.includes($)).map($=>Qr.find(te=>te.id===$)).filter($=>!!$&&u($));if(!g.length)return;let T=g.reduce(($,te)=>$+te.weight,0),w=r.range(0,T),N=g.find($=>(w-=$.weight)<0)??g[0];if(N.effect==="rush"){let $=i.filter(te=>te.b.rush<=0);ie={index:$[r.int(0,$.length-1)].i,left:N.ttl,def:N};}else if(N.effect==="break"){let $=i.filter(le=>le.b.level>=3),te=$[r.int(0,$.length-1)];te.b.broken=N.taps??3,G(e$1,{kind:"shake",power:.3});}else N.effect==="invest"?se={left:N.ttl,def:N}:xe={left:N.ttl,def:N};e$1.emit("event-started",{id:N.id});},Ke=i=>{ie&&(ie.left-=i)<=0&&(ie=null),xe&&(xe.left-=i)<=0&&(xe=null),se&&(se.left-=i)<=0&&(se=null),d.def.events.length&&(fe-=i,fe<=0&&(bt(),fe=r.range(rl[0],rl[1])));},At=i=>{let u=p.biz[i];if(!u||u.level<=0)return;let g=Ee(i);if(u.broken>0){G(e$1,{kind:"burst",x:g.x,y:g.y,color:"ground",n:6,size:g.size*.6}),da(p,i)&&(G(e$1,{kind:"ring",x:g.x,y:g.y,color:"accent",size:g.size*1.2}),Pe("break"));return}ie?.index===i&&(u.rush=ie.def.seconds??10,u.rushMult=ie.def.mult??3,G(e$1,{kind:"ring",x:g.x,y:g.y,color:"coin",size:g.size*1.4}),G(e$1,{kind:"pop",x:g.x,y:g.y-g.size*.45,text:`\xD7${u.rushMult}`,color:"coin",size:Math.round(g.size*.3)}),ie=null,Pe("rush"));let T=ca(p,i);T<=0||(ne=Math.min(Ae().charge,ne+ed),vt(e$1,"tycoon-collect"),G(e$1,{kind:"burst",x:g.x,y:g.y,color:"coin",n:8,size:g.size*.7}),G(e$1,{kind:"pop",x:g.x,y:g.y-g.size*.35,text:`+${an(T)}`,color:"coin",size:Math.round(g.size*.24)}),e$1.emit("cycle-collected",{index:i,amount:T}));},en=i=>{let u=p.biz[i];if(!u)return;let g=ia(p,i,Y(i)),T=Se(i),w=T.x+T.w/2-T.w*.14;if(!g.ok){G(e$1,{kind:"shake",power:.1});return}vt(e$1,"tycoon-buy");let N=Ee(i);G(e$1,{kind:"ring",x:N.x,y:N.y,color:"coin",size:N.size*1.1}),G(e$1,{kind:"burst",x:w,y:T.y,color:"accent",n:5,size:T.h*.5}),e$1.emit("business-bought",{id:u.def.id,level:u.level});for(let $ of g.milestones)G(e$1,{kind:"flash",color:"coin"}),G(e$1,{kind:"pop",x:N.x,y:N.y-N.size*.5,text:`\u2605 ${$}`,color:"coin",size:Math.round(N.size*.3)}),e$1.emit("milestone",{id:u.def.id,at:$});},Rt=i=>{let u=p.biz[i];if(!u||!la(p,i))return;vt(e$1,"tycoon-manager");let g=Ee(i);G(e$1,{kind:"ring",x:g.x,y:g.y,color:"secondary",size:g.size*1.3}),G(e$1,{kind:"pop",x:g.x,y:g.y-g.size*.5,text:"\u2605",color:"secondary",size:Math.round(g.size*.35)}),e$1.emit("manager-hired",{id:u.def.id});},tn=(i,u,g)=>{ha(p,i)&&(vt(e$1,"tycoon-upgrade"),G(e$1,{kind:"ring",x:u,y:g,color:"accent",size:Re()*2.6}),G(e$1,{kind:"flash",color:"accent"}),e$1.emit("upgrade-bought",{key:i}));},Et=()=>{let i=Ae();if(ne<i.charge)return false;let u=1+oo(e$1,"meta:skill");if(ne=0,O!==null&&ze(e$1,O,"cheer"),G(e$1,{kind:"flash",color:"secondary"}),i.effect==="rush")pa(p,{id:"skill",left:(i.seconds??12)*u,income:i.mult??5,price:1});else if(i.effect==="sale")pa(p,{id:"sale",left:(i.seconds??15)*u,income:1,price:i.mult??.5});else {let g=ul(p,Math.max(1,Math.round((i.cycles??8)*u))),T=me();G(e$1,{kind:"pop",x:T.w/2,y:T.h*.16,text:`+${an(g)}`,color:"coin",size:Math.round(T.U*.07)}),p.biz.forEach((w,N)=>{if(w.level<=0)return;let $=Ee(N);G(e$1,{kind:"burst",x:$.x,y:$.y,color:"coin",n:10,size:$.size*.8});});}return e$1.emit("skill-cast",{id:i.id}),vt(e$1,"tycoon-skill"),true},L=()=>{if(!xe)return;let i=We(),u=Math.round(dt()*(xe.def.now??15));fl(p,u);let g=Math.round((xe.def.coins??0)*s("coinReward"));g>0&&(Fe(e$1,"coins",g),e$1.emit("coin-collected",{value:g})),G(e$1,{kind:"burst",x:i.x,y:i.y,color:"coin",n:14,size:i.r*2}),G(e$1,{kind:"pop",x:i.x,y:i.y+i.r*1.4,text:`+${an(u)}`,color:"coin",size:Math.round(i.r*.7)}),xe=null,Pe("courier");},B=i=>{if(!se)return;let u=se.def;i?pa(p,{id:"invest",left:u.seconds??30,income:u.mult??2,price:1}):fl(p,ot()),se=null,G(e$1,{kind:"flash",color:"coin"}),Pe("invest");},f$1=(i,u,g)=>E.find(T=>(!g||T.id.startsWith(g))&&Math.abs(i-T.x)<=T.w/2&&Math.abs(u-T.y)<=T.h/2);e$1.on(j,i=>{let u=i;if(u.type!=="tap"||!Je(e$1)||Kn(e$1)||ue||be())return;Dt(e$1),z=0;let g=se?f$1(u.x,u.y,"inv_")??f$1(u.x,u.y):f$1(u.x,u.y,"courier")??f$1(u.x,u.y);g&&(g.id==="inv_now"?B(false):g.id==="inv_share"?B(true):g.id==="courier"?L():g.id==="mode"?ae=(ae+1)%Go.length:g.id==="skill"?Et():g.id.startsWith("up:")?tn(g.id.slice(3),g.x,g.y):g.id.startsWith("biz")?At(Number(g.id.slice(3))):g.id.startsWith("buy")?en(Number(g.id.slice(3))):g.id.startsWith("mgr")&&Rt(Number(g.id.slice(3))),Ge(),Vo(p,oe())&&rt());}),e$1.on(Nt,()=>{qe(),e$1.vars.level=d.level;}),e$1.on(zt,qe),e$1.on(Gt,ct),e$1.on(Kt,()=>{be()&&(e$1.vars.reviving=false,et("out-of-time"));}),e$1.on(Bt,i=>{we.clear(),Le(),E=[],e$1.vars.ty_buttons="",O!==null&&e$1.isAlive(O)&&Qe(e$1,O,i.reason==="cleared"?"dance":"idle");}),e$1.on(k,()=>Ot(e$1,"board",Ce(e$1).h*.24));let c=i=>{if(!i)return;let u=i.kind==="collect"||i.kind==="fix"?`biz${i.index}`:i.kind==="buy"?`buy${i.index}`:i.kind==="hire"?`mgr${i.index}`:`up:${i.key}`;return E.find(g=>g.id===u)},y=i=>{let u=me().U,g=p.biz.findIndex(T=>T.ready);if(!ht(i,"tycoon-collect")&&g>=0){let T=Ee(g);return ft(i,"tap",T,void 0,T.size*.8)}if(!ht(i,"tycoon-buy")){let T=p.biz.findIndex(N=>p.cash>=Zn(p,N,Y(p.biz.indexOf(N)))),w=E.find(N=>N.id===`buy${T}`);if(T>=0&&w)return ft(i,"tap",w,void 0,w.h)}if(!ht(i,"tycoon-manager")){let T=p.biz.findIndex(N=>N.level>0&&!N.manager&&p.cash>=no(p,N)),w=E.find(N=>N.id===`mgr${T}`);if(T>=0&&w)return ft(i,"tap",w,void 0,w.w)}if(ne>=Ae().charge&&!ht(i,"tycoon-skill")){let T=E.find(w=>w.id==="skill");if(T)return ft(i,"tap",T,void 0,T.w)}if(z>6){let T=c(ga(p,oe()));T&&ft(i,"tap",T,void 0,Math.min(T.w,u*.18));}};e$1.addSystem({id:"tycoon",order:0,run(i,u){if(!(!Je(i)||ue)){if(!be()){K+=u,z+=u,I=Math.max(0,I-u);for(let g of ua(p,u).paid)g.amount<=0||i.emit("cycle-collected",{index:g.index,amount:g.amount});ne=Math.min(Ae().charge,ne+u),Ke(u);}if(Wt(),Ge(),!be()){if(Vo(p,oe()))return rt();un(i)||y(i),I<=0&<();}}}}),qe();}};var Bn=(e,t,n,s,r,o,d,p,v)=>({en:e,ru:t,kz:n,zh:s,ko:r,ja:o,hi:d,pt:p,de:v}),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,d)=>{let p=Ma(o.path);if(!p){r.push(d);return}let v=Ea(_d(o,n));if(p.length===0){o.op==="set"&&zn(v)?s=v:o.op==="merge"&&zn(v)?s=Sa(s,v):r.push(d);return}let M=s;for(let E=0;E<p.length-1;E++){let I=nu(M,p[E],o.ifExists!==true);if(I===void 0){r.push(d);return}M=I;}let O=p[p.length-1];if(!zn(M)){r.push(d);return}if(O.match){let E=M[O.key];if(!Array.isArray(E)){r.push(d);return}let I=E.findIndex(K=>zn(K)&&String(K[O.match.field])===O.match.value);if(I<0){r.push(d);return}o.op==="set"?E[I]=v:o.op==="merge"?E[I]=Sa(E[I],v):o.op==="unset"?E.splice(I,1):r.push(d);return}if(o.ifExists===true&&M[O.key]===void 0){r.push(d);return}switch(o.op){case "set":M[O.key]=v;break;case "merge":M[O.key]=M[O.key]===void 0?v:Sa(M[O.key],v);break;case "unset":delete M[O.key];break;case "add":case "remove":{let E=Array.isArray(v)?v:[v],I=M[O.key];if(I!==void 0&&!Array.isArray(I)){r.push(d);return}let K=I?[...I]:[];if(o.op==="add")for(let z of E)K.some(ne=>Md(ne,z))||K.push(z);else for(let z of E){let ne=K.findIndex(ae=>Md(ae,z));ne>=0&&K.splice(ne,1);}M[O.key]=K;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,d=Math.max(s,r,o),p=Math.min(s,r,o),v=(d+p)/2;if(d===p)return [0,0,v];let M=d-p,O=v>.5?M/(2-d-p):M/(d+p),E=d===s?(r-o)/M+(r<o?6:0):d===r?(o-s)/M+2:(s-r)/M+4;return E*=60,[E,O,v]}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),d=v=>{let M=v;M<0&&(M+=1),M>1&&(M-=1);let O=o<.5?o*(1+r):o+r-o*r,E=2*o-O;return M<1/6?E+(O-E)*6*M:M<1/2?O:M<2/3?E+(O-E)*(2/3-M)*6:E},p=v=>Math.round(v*255).toString(16).padStart(2,"0");return r===0?`#${p(o)}${p(o)}${p(o)}`:`#${p(d(s+1/3))}${p(d(s))}${p(d(s-1/3))}`}function _a(e,t,n=1,s=0){let[r,o,d]=Rd(e);return Td(r+t,o*n,d+s)}function Ra(e,t){let[n,s,r]=Rd(e);return Td(n,s,r*(1-t))}var De=(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:De("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:De("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:De("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:De("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:De("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:De("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:De("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:De("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:De("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:De("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:De("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:De("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:De("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:De("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:De("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:De("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:De("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:De("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:De("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:De("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:De("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:De("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:De("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:De("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:De("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:De("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:De("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:De("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:De("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:De("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:De("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:De("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:De("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:De("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:De("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:De("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:De("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:De("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:De("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:De("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:De("Classic","\u041A\u043B\u0430\u0441\u0441\u0438\u043A\u0430"),what:"The pack's own colours.",dh:0,sat:1,dl:0},{id:"dawn",title:De("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:De("Night","\u041D\u043E\u0447\u044C"),what:"Darker and bluer, a night mood.",dh:-35,sat:.9,dl:-0.07},{id:"ember",title:De("Ember","\u0423\u0433\u043B\u0438"),what:"Shifted to red and orange, hot and dangerous.",dh:-60,sat:1.15,dl:0},{id:"frost",title:De("Frost","\u0418\u043D\u0435\u0439"),what:"Shifted to cyan and pale blue, cold and icy.",dh:140,sat:.8,dl:.05},{id:"toxic",title:De("Toxic","\u042F\u0434"),what:"Shifted to acid green and yellow, toxic.",dh:70,sat:1.25,dl:0},{id:"royal",title:De("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:De("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:De(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:De(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:De(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,V=(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}:{}}}),Ct=(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:V("Interface colours","\u0426\u0432\u0435\u0442\u0430 \u0438\u043D\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430"),hint:V("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:V("Screen pattern","\u0423\u0437\u043E\u0440 \u0444\u043E\u043D\u0430"),hint:V("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:V("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:V("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:V("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:V("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:V("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:V("Animations","\u0410\u043D\u0438\u043C\u0430\u0446\u0438\u0438"),question:"How lively should the interface animations be?",kind:"choice",options:[{id:"calm",title:V("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:V("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:V("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:V("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:V("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:V("World and colours of the game","\u041C\u0438\u0440 \u0438 \u0446\u0432\u0435\u0442\u0430 \u0438\u0433\u0440\u044B"),hint:V("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:V("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:V("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:V(t,n),what:s,patches:[{section:"GameSpec",op:"set",path:"cast.hero.races",value:[e]}]}))}],fu=[{id:"feel.difficulty",group:"feel",title:V("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:[V("Very easy","\u041E\u0447\u0435\u043D\u044C \u043B\u0435\u0433\u043A\u043E"),V("Easy","\u041B\u0435\u0433\u043A\u043E"),V("Balanced","\u0421\u0431\u0430\u043B\u0430\u043D\u0441\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u043E"),V("Hard","\u0421\u043B\u043E\u0436\u043D\u043E"),V("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:V("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:[V("Stingy","\u0421\u043A\u0443\u043F\u043E"),V("Modest","\u0421\u043A\u0440\u043E\u043C\u043D\u043E"),V("Normal","\u041E\u0431\u044B\u0447\u043D\u043E"),V("Generous","\u0429\u0435\u0434\u0440\u043E"),V("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:V("Lanes","\u041F\u043E\u043B\u043E\u0441\u044B"),for:{modules:["kit-game"],presets:["runner"]},question:"How wide should the running track be?",kind:"score",levelTitles:[V("2 lanes","2 \u043F\u043E\u043B\u043E\u0441\u044B"),V("3 lanes","3 \u043F\u043E\u043B\u043E\u0441\u044B"),V("4 lanes","4 \u043F\u043E\u043B\u043E\u0441\u044B"),V("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:V("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:[V("One hit","\u041E\u0434\u0438\u043D \u0443\u0434\u0430\u0440"),V("A few","\u041D\u0435\u0441\u043A\u043E\u043B\u044C\u043A\u043E"),V("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:V("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:[V("Very short","\u041E\u0447\u0435\u043D\u044C \u043A\u043E\u0440\u043E\u0442\u043A\u0438\u0435"),V("Short","\u041A\u043E\u0440\u043E\u0442\u043A\u0438\u0435"),V("Normal","\u041E\u0431\u044B\u0447\u043D\u044B\u0435"),V("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:V("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:V("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:V("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"]),Ct("powers",["flight"])]},{id:"coins",title:V("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"]),Ct("powers",["shield","dash","flight"])]},{id:"hardcore",title:V("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"]),Ct("powers",["shield","flight"])]}]},{id:"feel.runner.obstacles",group:"feel",title:V("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:V("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:V("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"]),Ct("obstacles",["pit","rock"])]},{id:"wild",title:V("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"]),Ct("obstacles",["mover","train"])]},{id:"simple",title:V("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"]),Ct("obstacles",["mover","train","rock"])]}]},{id:"feel.platformer.lives",group:"feel",title:V("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:[V("One hit","\u041E\u0434\u0438\u043D \u0443\u0434\u0430\u0440"),V("A few hearts","\u041D\u0435\u0441\u043A\u043E\u043B\u044C\u043A\u043E \u0441\u0435\u0440\u0434\u0435\u0446"),V("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:V("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:V("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:[V("2 minutes","2 \u043C\u0438\u043D\u0443\u0442\u044B"),V("5 minutes","5 \u043C\u0438\u043D\u0443\u0442"),V("10 minutes","10 \u043C\u0438\u043D\u0443\u0442"),V("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:V("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:V("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:V("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"]),Ct("foes",["archer","bomber"])]},{id:"army",title:V("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"]),Ct("foes",["swarm","bomber"])]},{id:"chaos",title:V("Chaos","\u0425\u0430\u043E\u0441"),what:"Swarms, bombers and chargers: fast, explosive, crazy.",patches:[gt("foes",["swarm","charger","bomber","grunt"]),Ct("foes",["archer","brute"])]}]},{id:"feel.td.lives",group:"feel",title:V("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:[V("Very few","\u041E\u0447\u0435\u043D\u044C \u043C\u0430\u043B\u043E"),V("Some","\u0421\u0440\u0435\u0434\u043D\u0435"),V("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:V("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:V("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:V("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"]),Ct("foes",["flyer"])]},{id:"simple",title:V("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"]),Ct("foes",["shaman","healer","splitter"])]},{id:"swarm",title:V("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"]),Ct("foes",["brute","shaman"])]}]},{id:"feel.survivors.weapons",group:"feel",title:V("Weapons to find","\u041E\u0440\u0443\u0436\u0438\u0435 \u0432 \u0437\u0430\u0431\u0435\u0433\u0435"),hint:V("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:V("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:V("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"]),Ct("weapons",["blades","aura","boomerang"])]},{id:"magic",title:V("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"]),Ct("weapons",["blaster","drone"])]},{id:"classic",title:V("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"]),Ct("weapons",["aura","lightning","drone"])]}]},{id:"feel.tycoon.events",group:"feel",title:V("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:V("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:V("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"]),Ct("events",["break"])]},{id:"hands-on",title:V("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"]),Ct("events",["invest"])]},{id:"minimal",title:V("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"]),Ct("events",["break","invest","courier"])]}]}],hu=(e,t)=>({Type:"VirtualCurrency",CurrencyID:e,Amount:t}),Ta=(e,t,n,s,r)=>({id:e,title:V(t,n),what:s,patches:r.map((o,d)=>({section:"Reward",op:"set",path:`DailyCalendars.daily_login.Days[DayNumber=${d+1}].Rewards.Standard.Entries`,value:o.map(([p,v])=>hu(p,v))}))}),Dl=(e,t)=>`StoreOffers.${e}.${t}`,mu=[{id:"economy.shop-ad-gems",group:"economy",title:V("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:[V("A few","\u041C\u0430\u043B\u043E"),V("Some","\u0421\u0440\u0435\u0434\u043D\u0435"),V("A handful","\u041F\u0440\u0438\u043B\u0438\u0447\u043D\u043E"),V("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:V("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:[V("A few times","\u041D\u0435\u0441\u043A\u043E\u043B\u044C\u043A\u043E \u0440\u0430\u0437"),V("About ten","\u041E\u043A\u043E\u043B\u043E \u0434\u0435\u0441\u044F\u0442\u0438"),V("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:V("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:[V("Small","\u041C\u0430\u043B\u0435\u043D\u044C\u043A\u0438\u0439"),V("Normal","\u041E\u0431\u044B\u0447\u043D\u044B\u0439"),V("Big","\u0411\u043E\u043B\u044C\u0448\u043E\u0439"),V("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:V("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:[V("A few","\u041C\u0430\u043B\u043E"),V("Some","\u0421\u0440\u0435\u0434\u043D\u0435"),V("Comfortable","\u041A\u043E\u043C\u0444\u043E\u0440\u0442\u043D\u043E"),V("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:V("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:V("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:[V("x2","x2"),V("x3","x3"),V("x4","x4"),V("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:V("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:[V("x3","x3"),V("x5","x5"),V("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:V("Price of VIP","\u0426\u0435\u043D\u0430 VIP"),for:{sections:["Premium"]},question:"How expensive should the VIP pass be, in gems?",kind:"score",levelTitles:[V("Cheap","\u0414\u0451\u0448\u0435\u0432\u043E"),V("Normal","\u041E\u0431\u044B\u0447\u043D\u043E"),V("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:V("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.`,d=`\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.`,p=[["stars_10",10],["stars_50",50],["stars_120",120],["stars_250",250]],v=(M,O)=>({section:"TimedEvent",op:"set",path:`${Nd}.${M}`,value:O});return {id:e.id,title:V(t,n),what:e.what,patches:[v("DisplayName",t),v("Description",o),v("Content.DisplayName",t),v("Content.Description",o),v("Content.Token.DisplayName",s),...p.map(([M,O])=>v(`Content.Milestones.${M}.DisplayName`,`${O} ${e.unit[0]}`)),v("Content.Milestones.stars_400.DisplayName",e.crown[0])],translations:{ru:{[t]:n,[o]:d,[s]:r,[e.crown[0]]:e.crown[1],...Object.fromEntries(p.map(([,M])=>[`${M} ${e.unit[0]}`,`${M} ${e.unit[1]}`]))}}}},Al=(e,t,n,s,r,o,d)=>({id:e,title:V(t,n),what:d,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:V("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:V("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:V("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:[V("Slow","\u041C\u0435\u0434\u043B\u0435\u043D\u043D\u043E"),V("Normal","\u041E\u0431\u044B\u0447\u043D\u043E"),V("Fast","\u0411\u044B\u0441\u0442\u0440\u043E"),V("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:V("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:V("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:[V("A few minutes","\u041F\u0430\u0440\u0430 \u043C\u0438\u043D\u0443\u0442"),V("Short","\u041A\u043E\u0440\u043E\u0442\u043A\u043E"),V("Normal","\u041E\u0431\u044B\u0447\u043D\u043E"),V("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:V("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:[V("Small","\u041C\u0430\u043B\u0435\u043D\u044C\u043A\u0438\u0435"),V("Normal","\u041E\u0431\u044B\u0447\u043D\u044B\u0435"),V("Big","\u0411\u043E\u043B\u044C\u0448\u0438\u0435"),V("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:V("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:V(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:V(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:V("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:V("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((d,p)=>{(!d.en||!d.ru)&&t.push(`${o}: level ${p} 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,qt 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,jt as Drop,co as EFFECTS,hr as ENEMIES,Yo as ENGINES,Il as ENTRY_ID_RE,Jt as ExprError,Cn as FOES,Na as FUNCTIONS,Ne as Foe,Kt 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,Zt 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,Gt as REVIVE,Wc as REVIVE_GEMS,Vt as REVIVE_OFFER,ws as ROOMS,Pt as ROOM_ROWS,Bt as ROUND_ENDED,$t as ROUND_OVER,Nt as ROUND_STARTED,Ka as RUNNER_CHARACTER,Dr as RUNNER_HEROES,yo as RUNNER_LEVELS,Xl as RUNNER_META,Fa as RUNNER_META_STATS,Oe as Raider,xt as RoadItem,On as Runner,Lo as SELL_SHARE,zt 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,it 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,ze as act,rp as applyLink,tu as applyPatches,za as attachRules,Fn as boardOf,Kc as buildFromVar,Ki as buildToVar,Tn as cellAt,Ze 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,Qt as enemyOf,Ba as evalNumber,gl as fantasyPack,Pr as findMatches,G 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,Ot 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,Qe 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,Ce as viewOf};
|