@idosgames/game-kit 0.0.0-stage → 0.1.0
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/LICENSE +21 -0
- package/README.md +31 -2
- package/dist/chunk-NBIYNARI.js +2 -0
- package/dist/index.cjs +3 -0
- package/dist/index.d.cts +1841 -0
- package/dist/index.d.ts +1841 -0
- package/dist/index.js +2 -0
- package/dist/phaser/index.cjs +2 -0
- package/dist/phaser/index.d.cts +82 -0
- package/dist/phaser/index.d.ts +82 -0
- package/dist/phaser/index.js +1 -0
- package/dist/view-CS-ixOId.d.cts +309 -0
- package/dist/view-CS-ixOId.d.ts +309 -0
- package/package.json +70 -6
package/dist/index.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {b,l,m,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 gn(e){if(!Jl.test(e))throw new Error(`registry: bad kind name "${e}"`);return Object.freeze({name:e})}var oc=/^[a-z0-9][a-z0-9-]*(?:\.[a-z0-9][a-z0-9-]*)*$/,Jl=/^[a-z][a-z0-9-]*$/;function Oo(e){let s=new Map,t=n=>{let o=s.get(n);return o||(o=new Map,s.set(n,o)),o},i={define(n,o,d){if(!o||typeof o!="object")throw new Error(`registry: ${n.name} entry must be an object`);if(typeof o.id!="string"||!oc.test(o.id))throw new Error(`registry: ${n.name} has a bad id "${String(o.id)}"`);if(!Number.isInteger(o.version)||o.version<1)throw new Error(`registry: ${n.name} "${o.id}" needs an integer version \u2265 1`);let p=t(n.name);if((p.has(o.id)||(e?.has(n,o.id)??false))&&!d?.override)throw new Error(`registry: ${n.name} "${o.id}" is already defined (pass { override: true } to replace it)`);let O=Object.freeze({...o});return p.set(o.id,O),O},get(n,o){let d=s.get(n.name)?.get(o);return d||e?.get(n,o)},require(n,o){let d=i.get(n,o);if(!d)throw new Error(`registry: no ${n.name} "${o}"`);return d},has(n,o){return i.get(n,o)!==void 0},list(n){let o=new Map;for(let d of e?.list(n)??[])o.set(d.id,d);for(let[d,p]of s.get(n.name)??[])o.set(d,p);return [...o.values()].sort((d,p)=>d.id<p.id?-1:d.id>p.id?1:0)},extend(){return Oo(i)}};return i}var Xt=class extends Error{constructor(t,i,n){super(`${t} at ${n} in "${i}"`);this.source=i;this.at=n;this.name="ExprError";}source;at},sc=2e3,fa=64,Qe=e=>{let s=typeof e=="number"?e:typeof e=="boolean"?e?1:0:Number(e);return Number.isFinite(s)?s:0},wn=e=>typeof e=="string"?e.length>0:!!e,pa={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,s=1)=>Math.pow(e,s),log:(e=1)=>e>0?Math.log(e):0,clamp:(e=0,s=0,t=1)=>Math.min(Math.max(e,s),t),lerp:(e=0,s=0,t=0)=>e+(s-e)*t,sign:(e=0)=>Math.sign(e),step:(e=0,s=0)=>s<e?0:1},Zl=["&&","||","==","!=","<=",">=","+","-","*","/","%","^","<",">","!","?",":","(",")",","];function Ql(e){let s=[],t=0;for(;t<e.length;){let i=e[t];if(i===" "||i===" "||i===`
|
|
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};
|