\n ").concat(a.name,"\n ").concat(a.help(Math.max(1,e.perks[a.id])),"\n
\n ").concat(r.reverse().join(""),"\n".concat(er("score_panel.upgrades_picked"),"
")+a.join("")}function ej(e,a){if(!e.perks.clairvoyant||e.creative)return"";for(var t="",r=0;r".concat(er("score_panel.upcoming_levels"),"
").concat(t,"
")}function eH(e){return e.level}function eD(e){return -1!==e.bricks.indexOf(e.ballsColor)}function eF(e){if(!e.perks.reach)return -1;for(var a=e.level.size,t=-1,r=-1,n=-1,i=0;i0&&ei(1-a.y/e.gameZoneHeight*1.1+.1,0,1)||0}function eV(e,a){return Math.pow(e.x-a.x,2)+Math.pow(e.y-a.y,2)}function eN(e,a){return Math.sqrt(eV(e,a))}function eU(e){return!!(e.lastPuckMove&&e.perks.passive_income&&e.lastPuckMove>e.levelTime-250*e.perks.passive_income)}function eK(){try{return parseInt(localStorage.getItem("breakout-3-hs-short")||"0")}catch(e){}return 0}function eX(e){var a=[],t=[],r=Math.max(-1e3+100*e,0);if(e>20){var n=M(ek).slice(0,Math.floor(e/2)).filter(function(e){var a;return a=e.id,i||(i=new Set(["extra_levels","extra_life","one_more_choice","shunt","slow_down"]),ek.forEach(function(e){e.requires&&i.add(e.requires)})),!i.has(a)}).sort(function(a,t){return eb(e+a.id)-eb(e+t.id)}),_=Math.min(3,Math.ceil(e/30));a=n.slice(0,_),t=n.slice(_,_+_)}return{required:a,forbidden:t,minScore:r}}function eY(e,a,t){var r=eX(e),n=r.required,i=r.forbidden,_=r.minScore,s=function(e){var a,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[];return(a=Math).max.apply(a,[0].concat(M(e.filter(function(e){return!t.find(function(a){var t;return!(null==e?void 0:null===(t=e.perks)||void 0===t?void 0:t[a.id])})&&!r.find(function(a){var t;return null==e?void 0:null===(t=e.perks)||void 0===t?void 0:t[a.id]})}).map(function(e){return e.score}))))}(a,n,i),o=s&&t?er("unlocks.reached",{reached:s}):"";return s>=_?null:n.length||i.length?{reached:s,minScore:_,text:er("unlocks.minScoreWithPerks",{minScore:_,required:n.map(function(e){return e.name}).join(", "),forbidden:i.map(function(e){return e.name}).join(", ")})+o}:{reached:s,minScore:_,text:er("unlocks.minScore",{minScore:_})+o}}function eJ(e,a){return e.perks.metamorphosis||e2("colorful_coins")||e.perks.hypnosis||e.perks.sticky_coins||e.perks.rainbow?a.color:"#ffd300"}function e$(e){return(e.levelTime?e.perks.corner_shot*e.brickWidth:0)-e.perks.unbounded*e.brickWidth}var eQ=!!window.location.href.includes("isInWebView=true");function e0(){try{var e=V("breakout_71_total_play_time",0);return Math.floor(e/1e3/60/60)}catch(e){return 0}}var e1={sound:{default:!0,name:er("settings.sounds"),help:er("settings.sounds_help")},"mobile-mode":{default:window.innerHeight>window.innerWidth,name:er("settings.mobile"),help:er("settings.mobile_help")},basic:{default:!1,name:er("settings.basic"),help:er("settings.basic_help")},colorful_coins:{default:!1,name:er("settings.colorful_coins"),help:er("settings.colorful_coins_help")},extra_bright:{default:!0,name:er("settings.extra_bright"),help:er("settings.extra_bright_help")},smooth_lighting:{default:!0,name:er("settings.smooth_lighting"),help:er("settings.smooth_lighting_help")},precise_lighting:{default:!0,name:er("settings.precise_lighting"),help:er("settings.precise_lighting_help")},probabilistic_lighting:{default:!1,name:er("settings.probabilistic_lighting"),help:er("settings.probabilistic_lighting_help")},contrast:{default:!1,name:er("settings.contrast"),help:er("settings.contrast_help")},show_fps:{default:!1,name:er("settings.show_fps"),help:er("settings.show_fps_help")},show_stats:{default:!1,name:er("settings.show_stats"),help:er("settings.show_stats_help")},pointerLock:{default:!1,name:er("settings.pointer_lock"),help:er("settings.pointer_lock_help")},easy:{default:!1,name:er("settings.kid"),help:er("settings.kid_help")},record:{default:!1,name:er("settings.record"),help:er("settings.record_help")},fullscreen:{default:!1,name:er("settings.fullscreen"),help:er("settings.fullscreen_help")},donation_reminder:{default:e0()>5,name:er("settings.donation_reminder"),help:er("settings.donation_reminder_help")},red_miss:{default:!0,name:er("settings.red_miss"),help:er("settings.red_miss_help")},comboIncreaseTexts:{default:!0,name:er("settings.comboIncreaseTexts"),help:er("settings.comboIncreaseTexts_help")}};function e2(e){var a;return V("breakout-settings-enable-"+e,null===(a=e1[e])||void 0===a?void 0:a.default)}function e4(e){U("breakout-settings-enable-"+e,!e2(e))}var e3=Date.now(),e5={wallBeep:function(e,a){e2("sound")&&e7(800,a,e)},plouf:function(e,a){e2("sound")&&e7(500,a,.5*e)},comboIncreaseMaybe:function(e,a,t){if(e2("sound")){var r=0;!isNaN(e9)&&(e9\n ").concat(e.name,"\n ").concat(e.help(1),"\n
\n".concat(a,"
\n").concat(er("gameOver.cumulative_total",{startTs:n,endTs:r}),"
\n "),{icon:ez["icon:new_run"],value:null,text:er("confirmRestart.yes"),help:""},'',eA(t2),_,function(e){if(e.creative)return"";var a="",t="";try{var r=eB.map(function(e,a){var t;return{li:a,l:e,r:null===(t=eY(a,aX,!1))||void 0===t?void 0:t.text}}).filter(function(e){return e.r});e.runStatistics.runTime=Math.round(e.runStatistics.runTime);var n=z({},e.perks);for(var i in n)n[i]||delete n[i];aX.push(S(z({},e.runStatistics),{perks:n,appVersion:ew}));var _=r.filter(function(e){var a=e.li;return!eY(a,aX,!0)});_.length&&(a="\n\n\n ").concat(a.name,"\n ").concat(eM(a),"\n
\n".concat(er("gameOver.stats_intro",{count:aX.length-1}),"
")+t)}catch(e){console.warn(e)}return a+t}(t2)]}).then(function(){return t4({levelToAvoid:eH(t2).name})})}}function aK(e){return e.creative?""+er("gameOver.creative")+"
":""}var aX=[];try{aX=JSON.parse(localStorage.getItem("breakout_71_runs_history")||"[]").sort(function(e,a){return a.score-e.score}).slice(0,100)}catch(e){}function aY(e,a){e.startParams.computer_controlled||(e.puckPosition=a,e.needsRender=!0)}function aJ(e){a$(e);var a,t=1+((null===(a=e.perks)||void 0===a?void 0:a.multiball)||0),r=e.puckWidth/(t+1);e.balls=[],e.ballsColor="#FFFFFF",(e.perks.picky_eater||e.perks.pierce_color)&&(e.ballsColor=function(e){var a,t={};e.forEach(function(e){return t[e]=(t[e]||0)+1});var r=(a=Math).max.apply(a,M(Object.keys(t).map(function(e){return t[e]})));return eq(Object.keys(t).filter(function(e){return t[e]==r}))}(e.bricks.filter(function(e){return e}))||"#FFFFFF");for(var n=0;n".concat(er("score_panel.close_to_unlock"),'
\n\n ").concat(_,"\n ").concat(null===(a=r.reason)||void 0===a?void 0:a.text,"\n
\n".concat(er("level_up.before_buttons",{score:e.score-e.levelStartScore,catchGain:n,levelSpawnedCoins:e.levelSpawnedCoins,time:Math.round(e.levelTime/1e3),timeGain:r,levelMisses:e.levelMisses,missesGain:_,levelWallBounces:e.levelWallBounces,wallHitsGain:i,compliment:o}),"\n
\n").concat(er("level_up.after_buttons",{level:e.currentLevel+1,max:eE(e)}),"
\n").concat(ej(e,e.currentLevel+1),"
\n")].concat(M(s),[eA(e),tS(e),''])}),{allowClose:!1}))];case 2:return"reroll"===(l=u.sent())?(t++,e.rerolls--):(e.perks[l]++,e.runStatistics.upgrades_picked++),[3,1];case 3:return[2]}})})).apply(this,arguments)}function tP(e,a){return eR(t2,Math.floor(a/t2.brickWidth),Math.floor((e-t2.offsetX)/t2.brickWidth))}function tL(e){if(t2.bricks[e])return e}function tR(e,a,t){var r,n,i;return null!==(i=null!==(n=null!==(r=tL(tP(e-t,a-t)))&&void 0!==r?r:tL(tP(e+t,a-t)))&&void 0!==n?n:tL(tP(e+t,a+t)))&&void 0!==i?i:tL(tP(e-t,a+t))}window.addEventListener("resize",function(){return tO(t2)}),window.addEventListener("fullscreenchange",function(){return tO(t2)}),setInterval(function(){var e=window.innerWidth,a=window.innerHeight;(e!==t2.canvasWidth||a!==t2.canvasHeight)&&tO(t2)},1e3),ai.addEventListener("mouseup",function(e){0===e.button&&(t2.running?tq(!0):(tB(),e2("pointerLock")&&ai.requestPointerLock&&ai.requestPointerLock().then()))}),ai.addEventListener("mousemove",function(e){document.pointerLockElement===ai?aY(t2,t2.puckPosition+e.movementX):aY(t2,e.x)}),ai.addEventListener("touchstart",function(e){var a;e.preventDefault(),(null===(a=e.touches)||void 0===a?void 0:a.length)&&(aY(t2,e.touches[0].pageX),a$(t2),tB())}),ai.addEventListener("touchend",function(e){e.preventDefault(),tq(!0)}),ai.addEventListener("touchcancel",function(e){e.preventDefault(),tq(!0)}),ai.addEventListener("touchmove",function(e){var a;(null===(a=e.touches)||void 0===a?void 0:a.length)&&aY(t2,e.touches[0].pageX)});var tC=document.getElementById("stats"),tT={},tE=performance.now(),tA="idle",tj=0,tH=60;function tD(e){if(t2.startParams.stress){var a=performance.now();tA&&(tT[tA]=(tT[tA]||0)+(a-tE)),tE=a,tA=e}}setInterval(function(){if(tH=tj,tj=0,!t2.startParams.stress){tC.style.display="none";return}tC.style.display="block";var e=eO(tT);tC.innerHTML="\n\n ").concat(e.name,"
\n ").concat(e.help(1),"\n
\n ").concat(e.name," \n
\n ").concat(el(e.credit||""),"\n\n Made in France by Renan LE CARO. \n Donate\n Discord\n F-Droid\n Google Play\n itch.io \n Gitlab\n Web version\n HackerNews\n Privacy Policy\n Archives\n v.'.concat(ew,"\n
")]),allowClose:!0})];case 1:return(a=t.sent())&&(a(),t2.needsRender=!0),[2]}})})).apply(this,arguments)}function tV(){return tN.apply(this,arguments)}function tN(){return(tN=(0,W._)(function(){var e,a,t,r,n,i,_,s,o;return(0,q.__generator)(this,function(l){switch(l.label){case 0:tq(!0),(a=[{disabled:e2("easy"),icon:ez["icon:starting_perks"],text:er("starting_perks.title"),help:er("starting_perks.help"),value:function(){return(0,W._)(function(){return(0,q.__generator)(this,function(e){switch(e.label){case 0:return[4,tb()];case 1:return e.sent(),[2]}})})()}}]).push({icon:ez[null===(e=Q.find(function(e){return e.value===et()}))||void 0===e?void 0:e.levelName],text:er("settings.language"),help:er("settings.language_help"),value:function(){return(0,W._)(function(){var e,a;return(0,q.__generator)(this,function(t){switch(t.label){case 0:return[4,aE({title:er("settings.language"),content:[er("settings.language_help")].concat(M(Q.map(function(e){return S(z({},e),{icon:ez[e.levelName]})}))),allowClose:!0})];case 1:if(!(a=(e=t.sent())&&e!==et()))return[3,3];return[4,tJ(t2)];case 2:a=t.sent(),t.label=3;case 3:return a&&(U("lang",e),K(),window.location.reload()),[2]}})})()}}),t=!0,r=!1,n=void 0;try{for(i=function(){var e=s.value;e1[e]&&a.push({icon:e2(e)?ez["icon:checkmark_checked"]:ez["icon:checkmark_unchecked"],text:e1[e].name,help:e1[e].help,disabled:e2("basic")&&["extra_bright","contrast","smooth_lighting","precise_lighting","probabilistic_lighting"].includes(e)||!1,value:function(){e4(e),tO(t2),tU(),tV()}})},_=Object.keys(e1)[Symbol.iterator]();!(t=(s=_.next()).done);t=!0)i()}catch(e){r=!0,n=e}finally{try{t||null==_.return||_.return()}finally{if(r)throw n}}return a.push({icon:ez["icon:download"],text:er("settings.download_save_file"),help:er("settings.download_save_file_help"),value:function(){return(0,W._)(function(){var e,a;return(0,q.__generator)(this,function(t){return e=document.createElement("a"),a=JSON.stringify({fileType:"B71-save-file",appVersion:ew,payload:ty()},null,2),e.setAttribute("href","data:application/json;charset=utf-8,"+encodeURIComponent(a)),e.setAttribute("download","b71-save-"+new Date().toISOString().slice(0,19).replace(/[^0-9]+/gi,"-")+".json"),document.body.appendChild(e),e.click(),setTimeout(function(){return document.body.removeChild(e)},1e3),[2]})})()}}),a.push({icon:ez["icon:upload"],text:er("settings.load_save_file"),help:er("settings.load_save_file_help"),value:function(){return(0,W._)(function(){var e,a;return(0,q.__generator)(this,function(t){if(!document.getElementById("save_file_picker")){var r;(a=document.createElement("input")).setAttribute("type","file"),a.setAttribute("id","save_file_picker"),a.setAttribute("accept",".b71,.json"),a.style.position="absolute",a.style.left="-1000px",a.addEventListener("change",(r=(0,W._)(function(e){var t,r,n,i,_,s,o,l;return(0,q.__generator)(this,function(e){switch(e.label){case 0:if(e.trys.push([0,4,,6]),!(r=a&&(null===(t=a.files)||void 0===t?void 0:t.item(0))))return[3,3];return[4,new Promise(function(e,a){var t=new FileReader;t.onload=function(){var a;e((null===(a=t.result)||void 0===a?void 0:a.toString())||"")},t.onerror=function(){a(t.error)},t.readAsText(r)})];case 1:if(i=(n=JSON.parse(e.sent())).fileType,_=n.signedPayload,s=n.payload,"B71-save-file"!==i)throw Error("Not a B71 save file");if(s)for(var u in localStorage.clear(),s)localStorage.setItem(u,JSON.stringify(s[u]));else if(_)for(var d in o=JSON.parse(_),localStorage.clear(),o)localStorage.setItem(d,o[d]);return[4,aE({title:er("settings.save_file_loaded"),content:[er("settings.save_file_loaded_help"),{text:er("settings.save_file_loaded_ok")}]})];case 2:e.sent(),window.location.reload(),e.label=3;case 3:return[3,6];case 4:return l=e.sent(),[4,aE({title:er("settings.save_file_error"),content:[l.message,{text:er("settings.save_file_loaded_ok")}]})];case 5:return e.sent(),[3,6];case 6:return a.value="",[2]}})}),function(e){return r.apply(this,arguments)})),document.body.appendChild(a)}return null===(e=document.getElementById("save_file_picker"))||void 0===e||e.click(),[2]})})()}}),a.push({icon:ez["icon:coins"],text:er("settings.max_coins",{max:Y()}),help:er("settings.max_coins_help"),value:function(){return(0,W._)(function(){return(0,q.__generator)(this,function(e){switch(e.label){case 0:return U("max_coins",(V("max_coins",2)+1)%7),[4,tV()];case 1:return e.sent(),[2]}})})()}}),a.push({icon:ez["icon:reset"],text:er("settings.reset"),help:er("settings.reset_help"),value:function(){return(0,W._)(function(){return(0,q.__generator)(this,function(e){switch(e.label){case 0:return[4,aE({title:er("settings.reset"),content:[er("settings.reset_instruction"),{text:er("settings.reset_confirm"),value:!0},{text:er("settings.reset_cancel"),value:!1}],allowClose:!0})];case 1:return e.sent()&&(localStorage.clear(),window.location.reload()),[2]}})})()}}),a.push({text:er("settings.autoplay"),help:er("settings.autoplay_help"),value:function(){return(0,W._)(function(){return(0,q.__generator)(this,function(e){return t3(!1),[2]})})()}}),a.push({text:er("settings.stress_test"),help:er("settings.stress_test_help"),value:function(){return(0,W._)(function(){return(0,q.__generator)(this,function(e){return t3(!0),[2]})})()}}),[4,aE({title:er("main_menu.settings_title"),content:[er("main_menu.settings_help")].concat(M(a)),allowClose:!0,className:"settings"})];case 1:return(o=l.sent())&&(o(),t2.needsRender=!0),[2]}})})).apply(this,arguments)}function tU(){return tK.apply(this,arguments)}function tK(){return(tK=(0,W._)(function(){var e;return(0,q.__generator)(this,function(a){switch(a.label){case 0:if(a.trys.push([0,10,,11]),!(document.fullscreenEnabled||document.webkitFullscreenEnabled))return[2,!1];if(!(null!==document.fullscreenElement&&!e2("fullscreen")))return[3,5];if(!document.exitFullscreen)return[3,2];return[4,document.exitFullscreen()];case 1:case 3:case 6:case 8:return a.sent(),[2,!0];case 2:if(!document.webkitCancelFullScreen)return[3,4];return[4,document.webkitCancelFullScreen()];case 4:return[3,9];case 5:if(!(e2("fullscreen")&&!document.fullscreenElement))return[3,9];if(!(e=document.documentElement).requestFullscreen)return[3,7];return[4,e.requestFullscreen()];case 7:if(!e.webkitRequestFullscreen)return[3,9];return[4,e.webkitRequestFullscreen()];case 9:return[3,11];case 10:return console.warn(a.sent()),[3,11];case 11:return[2,!1]}})})).apply(this,arguments)}function tX(){return(tX=(0,W._)(function(){var e,a,t;return(0,q.__generator)(this,function(r){switch(r.label){case 0:return e=X(),a=ek.sort(function(e,a){return e.threshold-a.threshold}).map(function(a){var t=a.name,r=a.id,n=a.threshold,i=a.help,_=a.category,s=a.fullHelp;return{text:t,disabled:eaQ(t2),a=e&&t2.perks.picky_eater&&eD(t2),t=eF(t2),r=t2.perks.clairvoyant,n=aB(t2);a||-1!==t||t2.perks.zen||(n=0);var i=r&&t2.brickHP.reduce(function(e,a){return e+a},0),_=t2.gameZoneWidth+"_"+t2.bricks.join("_")+as.complete+"_"+t+"_"+a+"_"+t2.ballsColor+"_"+t2.perks.pierce_color+"_"+i+"_"+n;if(_!==ab){ab=_,ag.width=t2.gameZoneWidth,ag.height=t2.gameZoneWidth+1;var s=ag.getContext("2d");s.clearRect(0,0,t2.gameZoneWidth,t2.gameZoneWidth),s.resetTransform(),s.translate(-t2.offsetX,0),t2.bricks.forEach(function(i,_){var o=eP(t2,_),l=eL(t2,_);if(i){var u=t===Math.floor(_/t2.level.size),d=t2.ballsColor!==i&&"black"!==i&&a||e&&t2.perks.zen&&"black"===i||u;s.globalCompositeOperation="source-over",af(t2,s,i,o,l,d?n:-1,r>=2),t2.brickHP[_]>1&&r&&(s.globalCompositeOperation="source-over",aW(s,t2.brickHP[_].toString(),r>=2?i:t2.level.color,t2.puckHeight,o,l)),"black"===i&&(s.globalCompositeOperation="source-over",function(e,a,t,r,n){var i="svg"+a+"_"+t+"_"+a.complete;if(!ah[i]){var _=document.createElement("canvas");_.width=t,_.height=t;var s=_.getContext("2d"),o=t/Math.max(a.width,a.height),l=a.width*o,u=a.height*o;s.drawImage(a,(t-l)/2,(t-u)/2,l,u),ah[i]=_}e.drawImage(ah[i],Math.round(r-t/2),Math.round(n-t/2))}(s,as,t2.brickWidth,o,l))}})}a_.drawImage(ag,t2.offsetX,0)}(),tD("render:lights"),a_.globalCompositeOperation="screen",tc(e.lights,function(a){var t=a.x,r=a.y,n=a.time,i=a.color,_=(a.size,a.duration);a_.globalAlpha=.5*Math.min(1,2-(e.levelTime-n)/_*2),af(e,a_,i,t,r,-1,e.perks.clairvoyant>=2)}),tD("render:texts"),a_.globalCompositeOperation="screen",tc(e.texts,function(a){var t=a.x,r=a.y,n=a.time,i=a.color,_=a.size,s=a.duration,o=e.levelTime-n;a_.globalAlpha=Math.max(0,Math.min(1,2-o/s*2)),a_.globalCompositeOperation="source-over",aW(a_,a.text,i,_,t,r-o/10)}),tD("render:particles"),tc(e.particles,function(a){var t=a.x,r=a.y,n=a.time,i=a.color,_=a.size,s=a.duration;a_.globalAlpha=Math.max(0,Math.min(1,2-(e.levelTime-n)/s*2)),a_.globalCompositeOperation="screen",av(a_,i,_,t,r)}),tD("render:extra_life"),e.perks.extra_life){a_.globalAlpha=1,a_.globalCompositeOperation="source-over",a_.fillStyle=e.puckColor;for(var k=0;k