breakout71/dist/index.html
Renan LE CARO 4d7d57f17f wip
2025-04-20 12:56:50 +02:00

6363 lines
778 KiB
HTML

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Breakout 71</title>
<meta name="description" content="A breakout game with roguelite mechanics. Break bricks, catch coins, pick upgrades, repeat. Play for free on mobile and desktop.">
<link rel="manifest" href="/PWA/manifest.webmanifest">
<meta name="theme-color" content="#000000" id="themeColor">
<style>* {
box-sizing: border-box;
font-family: Courier New, Courier, Lucida Sans Typewriter, Lucida Typewriter, monospace;
}
body {
width: 100vw;
height: 100vh;
height: calc(var(--vh, 1vh) * 100);
color: #fff;
background-size: 120px 120px;
background-color: var(--background1);
--background1: #030c23;
--background2: #03112a;
margin: 0;
padding: 0;
overflow: hidden;
}
#game {
height: 100vh;
height: calc(var(--vh, 1vh) * 100);
width: 100vw;
position: fixed;
top: 0;
left: 0;
}
canvas:not(#game) {
display: none;
}
#score, #menu {
z-index: 1;
appearance: none;
font: inherit;
color: #fff;
min-width: 40px;
max-width: calc(100vw - 80px);
min-height: 40px;
text-shadow: 0 0 4px var(--level-background);
background: none;
border: none;
padding: 10px;
line-height: 20px;
position: absolute;
top: 0;
overflow: hidden;
}
#score:hover, #menu:hover, #score:focus, #menu:focus {
cursor: pointer;
background: #0000004d;
}
#score {
color: #fff;
transition: color .3s;
right: 0;
}
#score.active .score {
color: gold;
transition: color 10ms;
}
#score.computer_controlled {
pointer-events: none;
}
#score span {
color: #fffc;
}
#score span.great {
color: #90ee90;
}
#score span.good, #score span.bad {
color: #fff;
}
#menu {
left: 0;
}
body.has-alert-open {
height: auto;
overflow: visible;
}
body:not(.has-alert-open) #popup {
display: none;
}
#popup {
display: flex;
overflow: auto;
}
#popup:before {
z-index: 4;
content: "";
background: #000000e6;
display: block;
position: fixed;
inset: 0;
}
#popup > div {
z-index: 5;
transform-origin: center;
flex-direction: column;
align-items: stretch;
width: 100%;
max-width: 500px;
margin: auto;
padding: 20px 10px;
display: flex;
position: relative;
}
#popup > div > * {
margin: 0 0 20px;
padding: 0;
}
#popup > div > section {
flex-direction: column;
align-items: stretch;
display: flex;
}
#popup > div > section button {
font: inherit;
color: #fff;
cursor: pointer;
text-align: left;
background: #000c;
border: 1px solid #fff;
gap: 10px;
margin-top: -1px;
padding: 10px;
display: flex;
}
#popup > div > section button:not([disabled]):hover, #popup > div > section button:not([disabled]):focus {
z-index: 1;
border-color: #f1d33b;
position: relative;
}
#popup > div > section button[disabled] {
opacity: .5;
filter: saturate(0);
cursor: not-allowed;
}
#popup > div > section button > div {
flex-grow: 1;
}
#popup > div > section button > div > em {
opacity: .8;
display: block;
}
#popup > div > section button.grey-out-unless-hovered:not(:hover) {
opacity: .6;
}
#popup > div > section button.grey-out-unless-hovered:not(:hover) img {
filter: saturate(0);
}
#popup > div > section button.grey-out-unless-hovered[disabled] {
opacity: .2;
}
#popup.actionsAsGrid > div {
max-width: none;
}
#popup.actionsAsGrid > div > div, #popup.actionsAsGrid > div > p, #popup.actionsAsGrid > div > h1, #popup.actionsAsGrid > div > h2 {
width: 100%;
max-width: 550px;
margin-left: auto;
margin-right: auto;
}
#popup.actionsAsGrid > div section {
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
display: grid;
}
#popup button#close-modale {
color: #fff;
cursor: pointer;
z-index: 6;
background: none;
border: none;
width: 60px;
height: 60px;
position: fixed;
top: 0;
right: 0;
overflow: hidden;
}
#popup button#close-modale:before {
content: "+";
font-size: 80px;
display: inline-block;
position: absolute;
top: 34px;
left: 26px;
transform: translate(-50%, -50%)rotate(45deg);
}
#popup button#close-modale:hover {
background: #000;
font-weight: bold;
}
#popup .textAfterButtons {
color: #ffffff94;
}
#popup a[href] {
color: inherit;
}
#popup a[href]:hover, #popup a[href]:focus {
color: #fff;
}
@media (width >= 1400px) {
#popup.settings:before {
opacity: 0;
}
#popup.settings > div {
max-width: 400px;
margin-right: 0;
}
}
#level-recording-container {
text-align: center;
max-width: 400px;
margin: 40px;
}
#level-recording-container video {
max-width: 100%;
height: auto;
}
#level-recording-container a {
display: block;
}
#level-recording-container a video {
border-radius: 10px;
outline: 1px solid #fff;
margin: 20px auto;
display: block;
box-shadow: 2px 2px 5px #000;
}
.histogram {
align-items: stretch;
gap: 10px;
margin: 10px 0 40px;
display: flex;
}
.histogram > span {
flex-direction: column;
flex-grow: 1;
justify-content: flex-end;
width: 10px;
display: flex;
position: relative;
}
.histogram > span.active > span {
background: #4049ca;
}
.histogram > span > span {
background: #1c1c2f;
border-radius: 5px;
width: 100%;
min-height: 1px;
display: block;
}
.histogram > span > span > span {
pointer-events: none;
white-space: nowrap;
transform-origin: 0 100%;
text-align: center;
font-size: 13px;
display: block;
position: absolute;
bottom: -20px;
left: 50%;
transform: translate(-50%);
}
.histogram > span:not(:hover):not(.active) > span > span {
opacity: 0;
}
h2.histogram-title {
color: #3b3f75;
font-size: 18px;
}
h2.histogram-title strong {
color: #4049ca;
}
.red-icon {
background: red;
}
.red-icon img {
filter: saturate(0);
mix-blend-mode: luminosity;
}
.upgrade {
gap: 2px;
margin: 0 0 10px;
display: flex;
}
.upgrade img {
width: 32px;
height: 32px;
}
.upgrade p {
color: #fff9;
flex-grow: 1;
margin: 0 20px;
}
.upgrade.used p strong {
color: #fff;
}
.upgrade > span {
flex-grow: 0;
flex-shrink: 0;
align-self: center;
width: 5px;
height: 32px;
display: inline-block;
}
.upgrade > span.used {
background: #fff;
}
.upgrade > span.free {
opacity: .25;
background: #fff;
}
.upgrade > span.banned {
background: red;
}
.upgrade.used {
opacity: 1;
}
.upgrade.free, .upgrade.banned {
opacity: .8;
}
#tooltip {
color: #fff;
z-index: 5;
pointer-events: none;
user-select: none;
opacity: 1;
background: #000;
border: 1px solid #fff;
border-radius: 2px;
max-width: 300px;
padding: 10px;
display: block;
position: fixed;
top: 0;
left: 0;
}
#popup.history > div {
max-width: none;
}
#popup.history > div table th:hover {
cursor: pointer;
background: #000;
}
#popup.history > div table td, #popup.history > div table th {
text-align: right;
padding: 0 5px;
line-height: 20px;
}
#popup.history > div table th:first-child, #popup.history > div table td:first-child {
text-align: left;
}
#popup.history > div table img {
pointer-events: none;
width: 20px;
height: auto;
}
#popup.history > div table tr:nth-child(2n) {
background: #00000094;
}
.progress-inline {
background: gray;
border-radius: 2px;
height: 7px;
display: block;
position: absolute;
bottom: 2px;
left: 62px;
right: 2px;
}
.progress-inline span {
transform-origin: 0 0;
background: #fff;
position: absolute;
inset: 1px;
}
.toast {
opacity: .8;
pointer-events: none;
z-index: 7;
background: #000;
border: 1px solid #fff;
border-radius: 2px;
align-items: center;
gap: 10px;
padding-right: 10px;
transition: opacity .2s, transform .2s;
display: flex;
position: fixed;
top: 40px;
left: 0;
}
.toast.hidden {
opacity: 0;
transform: translate(-20px, -20px)scale(.5);
}
.toast.visible {
opacity: .8;
transform: none;
}
.gridEdit > div > span, .palette > span {
cursor: pointer;
border: 1px solid;
justify-content: center;
align-items: center;
width: 40px;
height: 40px;
display: inline-flex;
}
.gridEdit > div > span:hover, .palette > span:hover {
z-index: 1;
border-color: gold;
position: relative;
box-shadow: inset 2px 2px 4px #0003;
}
.gridEdit > div {
display: flex;
}
.gridEdit > div > span {
width: calc(min(500px, 100vw, 100vh - 200px) / var(--grid-size));
height: calc(min(500px, 100vw, 100vh - 200px) / var(--grid-size));
}
.palette {
flex-wrap: wrap;
display: flex;
}
.palette > span[data-selected="true"] {
border: 2px solid #fff;
}
#stats {
color: #fff;
z-index: 3;
pointer-events: none;
opacity: 1;
width: 100vw;
max-width: 400px;
position: fixed;
top: 40px;
left: 0;
}
#stats > div {
background: #26262680;
position: relative;
}
#stats > div > div {
transform-origin: 0 0;
background: #6262ea;
position: absolute;
inset: 0;
}
#stats > div > strong {
padding: 0 5px;
position: relative;
}
.highlight {
position: relative;
}
.highlight:before {
content: "";
mix-blend-mode: screen;
opacity: .3;
background: linear-gradient(-45deg, #6262ea, #0000);
position: absolute;
inset: 0;
}
</style>
<link rel="icon" href="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20height%3D%22500%22%20width%3D%22500%22%3E%0A%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22300%22%20height%3D%22100%22%20fill%3D%22%236262EA%22%3E%3C%2Frect%3E%0A%3Crect%20x%3D%22200%22%20y%3D%22100%22%20width%3D%22100%22%20height%3D%22100%22%20fill%3D%22%236262EA%22%3E%3C%2Frect%3E%0A%3Crect%20x%3D%22100%22%20y%3D%22200%22%20width%3D%22100%22%20height%3D%22200%22%20fill%3D%22%236262EA%22%3E%3C%2Frect%3E%0A%3Crect%20x%3D%22200%22%20y%3D%22200%22%20width%3D%22100%22%20height%3D%22100%22%20fill%3D%22%235DA3EA%22%3E%3C%2Frect%3E%0A%3Crect%20x%3D%22300%22%20y%3D%22100%22%20width%3D%22100%22%20height%3D%22300%22%20fill%3D%22%235DA3EA%22%3E%3C%2Frect%3E%0A%3Crect%20x%3D%22200%22%20y%3D%22400%22%20width%3D%22300%22%20height%3D%22100%22%20fill%3D%22%235DA3EA%22%3E%3C%2Frect%3E%0A%3C%2Fsvg%3E">
</head>
<body>
<button id="menu"><span id="menuLabel">menu</span></button>
<button id="score"></button>
<div id="stats" style="display: none"></div>
<canvas id="game"></canvas>
<div id="popup">
<button id="close-modale"></button>
</div>
<div id="tooltip" style="display: none"></div>
<script>// modules are defined as an array
// [ module function, map of requires ]
//
// map of requires is short require name -> numeric require
//
// anything defined in a previous bundle is accessed via the
// orig method which is the require for previous bundles
(function (modules, entry, mainEntry, parcelRequireName, globalName) {
/* eslint-disable no-undef */
var globalObject =
typeof globalThis !== 'undefined'
? globalThis
: typeof self !== 'undefined'
? self
: typeof window !== 'undefined'
? window
: typeof global !== 'undefined'
? global
: {};
/* eslint-enable no-undef */
// Save the require from previous bundle to this closure if any
var previousRequire =
typeof globalObject[parcelRequireName] === 'function' &&
globalObject[parcelRequireName];
var cache = previousRequire.cache || {};
// Do not use `require` to prevent Webpack from trying to bundle this call
var nodeRequire =
typeof module !== 'undefined' &&
typeof module.require === 'function' &&
module.require.bind(module);
function newRequire(name, jumped) {
if (!cache[name]) {
if (!modules[name]) {
// if we cannot find the module within our internal map or
// cache jump to the current global require ie. the last bundle
// that was added to the page.
var currentRequire =
typeof globalObject[parcelRequireName] === 'function' &&
globalObject[parcelRequireName];
if (!jumped && currentRequire) {
return currentRequire(name, true);
}
// If there are other bundles on this page the require from the
// previous one is saved to 'previousRequire'. Repeat this as
// many times as there are bundles until the module is found or
// we exhaust the require chain.
if (previousRequire) {
return previousRequire(name, true);
}
// Try the node require function if it exists.
if (nodeRequire && typeof name === 'string') {
return nodeRequire(name);
}
var err = new Error("Cannot find module '" + name + "'");
err.code = 'MODULE_NOT_FOUND';
throw err;
}
localRequire.resolve = resolve;
localRequire.cache = {};
var module = (cache[name] = new newRequire.Module(name));
modules[name][0].call(
module.exports,
localRequire,
module,
module.exports,
globalObject
);
}
return cache[name].exports;
function localRequire(x) {
var res = localRequire.resolve(x);
return res === false ? {} : newRequire(res);
}
function resolve(x) {
var id = modules[name][1][x];
return id != null ? id : x;
}
}
function Module(moduleName) {
this.id = moduleName;
this.bundle = newRequire;
this.exports = {};
}
newRequire.isParcelRequire = true;
newRequire.Module = Module;
newRequire.modules = modules;
newRequire.cache = cache;
newRequire.parent = previousRequire;
newRequire.register = function (id, exports) {
modules[id] = [
function (require, module) {
module.exports = exports;
},
{},
];
};
Object.defineProperty(newRequire, 'root', {
get: function () {
return globalObject[parcelRequireName];
},
});
globalObject[parcelRequireName] = newRequire;
for (var i = 0; i < entry.length; i++) {
newRequire(entry[i]);
}
if (mainEntry) {
// Expose entry point to Node, AMD or browser globals
// Based on https://github.com/ForbesLindesay/umd/blob/master/template.js
var mainExports = newRequire(mainEntry);
// CommonJS
if (typeof exports === 'object' && typeof module !== 'undefined') {
module.exports = mainExports;
// RequireJS
} else if (typeof define === 'function' && define.amd) {
define(function () {
return mainExports;
});
// <script>
} else if (globalName) {
this[globalName] = mainExports;
}
}
})({"x07Me":[function(require,module,exports,__globalThis) {
var _gameTs = require("./game.ts");
},{"./game.ts":"edeGs"}],"edeGs":[function(require,module,exports,__globalThis) {
var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js");
parcelHelpers.defineInteropFlag(exports);
parcelHelpers.export(exports, "play", ()=>play);
parcelHelpers.export(exports, "pause", ()=>pause);
parcelHelpers.export(exports, "fitSize", ()=>fitSize);
parcelHelpers.export(exports, "openUpgradesPicker", ()=>openUpgradesPicker);
parcelHelpers.export(exports, "brickIndex", ()=>brickIndex);
parcelHelpers.export(exports, "hasBrick", ()=>hasBrick);
parcelHelpers.export(exports, "hitsSomething", ()=>hitsSomething);
parcelHelpers.export(exports, "tick", ()=>tick);
parcelHelpers.export(exports, "lastMeasuredFPS", ()=>lastMeasuredFPS);
parcelHelpers.export(exports, "startWork", ()=>startWork);
parcelHelpers.export(exports, "creativeModeThreshold", ()=>creativeModeThreshold);
parcelHelpers.export(exports, "openMainMenu", ()=>openMainMenu);
parcelHelpers.export(exports, "confirmRestart", ()=>confirmRestart);
parcelHelpers.export(exports, "setKeyPressed", ()=>setKeyPressed);
parcelHelpers.export(exports, "gameState", ()=>gameState);
parcelHelpers.export(exports, "restart", ()=>restart);
parcelHelpers.export(exports, "startComputerControlledGame", ()=>startComputerControlledGame);
var _loadGameData = require("./loadGameData");
var _sounds = require("./sounds");
var _gameUtils = require("./game_utils");
var _swLoader = require("./PWA/sw_loader");
var _i18N = require("./i18n/i18n");
var _settings = require("./settings");
var _gameStateMutators = require("./gameStateMutators");
var _render = require("./render");
var _recording = require("./recording");
var _newGameState = require("./newGameState");
var _asyncAlert = require("./asyncAlert");
var _options = require("./options");
var _pureFunctions = require("./pure_functions");
var _help = require("./help");
var _creative = require("./creative");
var _tooltip = require("./tooltip");
var _startingPerks = require("./startingPerks");
var _migrations = require("./migrations");
var _gameOver = require("./gameOver");
var _generateSaveFileContent = require("./generateSaveFileContent");
var _runHistoryViewer = require("./runHistoryViewer");
var _openScorePanel = require("./openScorePanel");
var _monitorLevelsUnlocks = require("./monitorLevelsUnlocks");
var _levelEditor = require("./levelEditor");
async function play() {
if (await applyFullScreenChoice()) return;
if (gameState.running) return;
gameState.running = true;
gameState.ballStickToPuck = false;
(0, _recording.startRecordingGame)(gameState);
(0, _sounds.getAudioContext)()?.resume();
(0, _recording.resumeRecording)();
// document.body.classList[gameState.running ? 'add' : 'remove']('running')
}
function pause(playerAskedForPause) {
if (!gameState.running) return;
if (gameState.pauseTimeout) return;
if (gameState.startParams.computer_controlled) {
if (gameState.startParams?.computer_controlled) play();
return;
}
const stop = ()=>{
gameState.running = false;
setTimeout(()=>{
if (!gameState.running) (0, _sounds.getAudioContext)()?.suspend();
}, 1000);
(0, _recording.pauseRecording)();
gameState.pauseTimeout = null;
// document.body.className = gameState.running ? " running " : " paused ";
(0, _render.scoreDisplay).className = "";
gameState.needsRender = true;
};
if (playerAskedForPause) {
// Pausing many times in a run will make pause slower
gameState.pauseUsesDuringRun++;
gameState.pauseTimeout = setTimeout(stop, Math.min(Math.max(0, gameState.pauseUsesDuringRun - 5) * 50, 500));
} else stop();
if (document.exitPointerLock) document.exitPointerLock();
}
const fitSize = (gameState)=>{
if (!gameState) throw new Error("Missign game state");
const past_off = gameState.offsetXRoundedDown, past_width = gameState.gameZoneWidthRoundedUp, past_heigh = gameState.gameZoneHeight;
const width = window.innerWidth, height = window.innerHeight;
gameState.canvasWidth = width;
gameState.canvasHeight = height;
(0, _render.gameCanvas).width = width;
(0, _render.gameCanvas).height = height;
(0, _render.backgroundCanvas).width = width;
(0, _render.backgroundCanvas).height = height;
const haloScale = (0, _render.getHaloScale)();
(0, _render.haloCanvas).width = width / haloScale;
(0, _render.haloCanvas).height = height / haloScale;
gameState.gameZoneHeight = (0, _options.isOptionOn)("mobile-mode") ? Math.floor(height * 0.8) : height;
const baseWidth = Math.round(Math.min(gameState.canvasWidth, gameState.gameZoneHeight * 0.73 * (gameState.gridSize + gameState.perks.unbounded * 2) / gameState.gridSize));
gameState.brickWidth = Math.floor(baseWidth / (gameState.gridSize + gameState.perks.unbounded * 2) / 2) * 2;
gameState.gameZoneWidth = gameState.brickWidth * gameState.gridSize;
gameState.offsetX = Math.floor((gameState.canvasWidth - gameState.gameZoneWidth) / 2);
// Space between left side and border
gameState.offsetXRoundedDown = gameState.offsetX - gameState.perks.unbounded * gameState.brickWidth;
if (gameState.offsetX < gameState.ballSize + gameState.perks.unbounded * 2 * gameState.brickWidth) gameState.offsetXRoundedDown = 0;
gameState.gameZoneWidthRoundedUp = width - 2 * gameState.offsetXRoundedDown;
(0, _render.backgroundCanvas).title = "resized";
// Ensure puck stays within bounds
(0, _gameStateMutators.setMousePos)(gameState, gameState.puckPosition);
function mapXY(item) {
item.x = gameState.offsetXRoundedDown + (item.x - past_off) / past_width * gameState.gameZoneWidthRoundedUp;
item.y = item.y / past_heigh * gameState.gameZoneHeight;
}
function mapXYPastCoord(coin) {
coin.x = gameState.offsetXRoundedDown + (coin.x - past_off) / past_width * gameState.gameZoneWidthRoundedUp;
coin.y = coin.y / past_heigh * gameState.gameZoneHeight;
coin.previousX = coin.x;
coin.previousY = coin.y;
}
gameState.balls.forEach(mapXYPastCoord);
(0, _gameStateMutators.forEachLiveOne)(gameState.coins, mapXYPastCoord);
(0, _gameStateMutators.forEachLiveOne)(gameState.particles, mapXY);
(0, _gameStateMutators.forEachLiveOne)(gameState.texts, mapXY);
(0, _gameStateMutators.forEachLiveOne)(gameState.lights, mapXY);
pause(true);
// For safari mobile https://css-tricks.com/the-trick-to-viewport-units-on-mobile/
document.documentElement.style.setProperty("--vh", `${window.innerHeight * 0.01}px`);
};
window.addEventListener("resize", ()=>fitSize(gameState));
window.addEventListener("fullscreenchange", ()=>fitSize(gameState));
setInterval(()=>{
// Sometimes, the page changes size without triggering the event (when switching to fullscreen, closing debug panel...)
const width = window.innerWidth, height = window.innerHeight;
if (width !== gameState.canvasWidth || height !== gameState.canvasHeight) fitSize(gameState);
}, 1000);
async function openUpgradesPicker(gameState) {
const catchRate = (gameState.score - gameState.levelStartScore) / (gameState.levelSpawnedCoins || 1);
let repeats = 1;
let timeGain = "", catchGain = "", wallHitsGain = "", missesGain = "";
if (gameState.levelWallBounces < (0, _pureFunctions.wallBouncedBest)) {
repeats++;
gameState.rerolls++;
wallHitsGain = (0, _i18N.t)("level_up.plus_one_upgrade_and_reroll");
} else if (gameState.levelWallBounces < (0, _pureFunctions.wallBouncedGood)) {
repeats++;
wallHitsGain = (0, _i18N.t)("level_up.plus_one_upgrade");
}
if (gameState.levelTime < (0, _pureFunctions.levelTimeBest) * 1000) {
repeats++;
gameState.rerolls++;
timeGain = (0, _i18N.t)("level_up.plus_one_upgrade_and_reroll");
} else if (gameState.levelTime < (0, _pureFunctions.levelTimeGood) * 1000) {
repeats++;
timeGain = (0, _i18N.t)("level_up.plus_one_upgrade");
}
if (catchRate > (0, _pureFunctions.catchRateBest) / 100) {
repeats++;
gameState.rerolls++;
catchGain = (0, _i18N.t)("level_up.plus_one_upgrade_and_reroll");
} else if (catchRate > (0, _pureFunctions.catchRateGood) / 100) {
repeats++;
catchGain = (0, _i18N.t)("level_up.plus_one_upgrade");
}
if (gameState.levelMisses < (0, _pureFunctions.missesBest)) {
repeats++;
gameState.rerolls++;
missesGain = (0, _i18N.t)("level_up.plus_one_upgrade_and_reroll");
} else if (gameState.levelMisses < (0, _pureFunctions.missesGood)) {
repeats++;
missesGain = (0, _i18N.t)("level_up.plus_one_upgrade");
}
while(repeats--){
const actions = (0, _gameStateMutators.pickRandomUpgrades)(gameState, 3 + gameState.perks.one_more_choice - gameState.perks.instant_upgrade);
if (!actions.length) break;
if (gameState.rerolls) actions.push({
text: (0, _i18N.t)("level_up.reroll", {
count: gameState.rerolls
}),
help: (0, _i18N.t)("level_up.reroll_help"),
value: "reroll",
icon: (0, _loadGameData.icons)["icon:reroll"]
});
const compliment = timeGain && catchGain && missesGain && wallHitsGain && (0, _i18N.t)("level_up.compliment_perfect") || (timeGain || catchGain || missesGain || wallHitsGain) && (0, _i18N.t)("level_up.compliment_good") || (0, _i18N.t)("level_up.compliment_advice");
const upgradeId = await (0, _asyncAlert.requiredAsyncAlert)({
title: (0, _i18N.t)("level_up.pick_upgrade_title") + (repeats ? " (" + (repeats + 1) + ")" : ""),
content: [
`<p>${(0, _i18N.t)("level_up.before_buttons", {
score: gameState.score - gameState.levelStartScore,
catchGain,
levelSpawnedCoins: gameState.levelSpawnedCoins,
time: Math.round(gameState.levelTime / 1000),
timeGain,
levelMisses: gameState.levelMisses,
missesGain,
levelWallBounces: gameState.levelWallBounces,
wallHitsGain,
compliment
})}
</p>
<p>${(0, _i18N.t)("level_up.after_buttons", {
level: gameState.currentLevel + 1,
max: (0, _gameUtils.max_levels)(gameState)
})} </p>
<p>${(0, _gameUtils.levelsListHTMl)(gameState, gameState.currentLevel + 1)}</p>
`,
...actions,
(0, _gameUtils.pickedUpgradesHTMl)(gameState),
(0, _openScorePanel.getNearestUnlockHTML)(gameState),
`<div id="level-recording-container"></div>`
]
});
if (upgradeId === "reroll") {
repeats++;
gameState.rerolls--;
} else {
gameState.perks[upgradeId]++;
if (upgradeId === "instant_upgrade") repeats += 2;
gameState.runStatistics.upgrades_picked++;
}
}
}
(0, _render.gameCanvas).addEventListener("mouseup", (e)=>{
if (e.button !== 0) return;
if (gameState.running) pause(true);
else {
play();
if ((0, _options.isOptionOn)("pointerLock") && (0, _render.gameCanvas).requestPointerLock) (0, _render.gameCanvas).requestPointerLock().then();
}
});
(0, _render.gameCanvas).addEventListener("mousemove", (e)=>{
if (document.pointerLockElement === (0, _render.gameCanvas)) (0, _gameStateMutators.setMousePos)(gameState, gameState.puckPosition + e.movementX);
else (0, _gameStateMutators.setMousePos)(gameState, e.x);
});
(0, _render.gameCanvas).addEventListener("touchstart", (e)=>{
e.preventDefault();
if (!e.touches?.length) return;
(0, _gameStateMutators.setMousePos)(gameState, e.touches[0].pageX);
(0, _gameStateMutators.normalizeGameState)(gameState);
play();
});
(0, _render.gameCanvas).addEventListener("touchend", (e)=>{
e.preventDefault();
pause(true);
});
(0, _render.gameCanvas).addEventListener("touchcancel", (e)=>{
e.preventDefault();
pause(true);
});
(0, _render.gameCanvas).addEventListener("touchmove", (e)=>{
if (!e.touches?.length) return;
(0, _gameStateMutators.setMousePos)(gameState, e.touches[0].pageX);
});
function brickIndex(x, y) {
return (0, _gameUtils.getRowColIndex)(gameState, Math.floor(y / gameState.brickWidth), Math.floor((x - gameState.offsetX) / gameState.brickWidth));
}
function hasBrick(index) {
if (gameState.bricks[index]) return index;
}
function hitsSomething(x, y, radius) {
return hasBrick(brickIndex(x - radius, y - radius)) ?? hasBrick(brickIndex(x + radius, y - radius)) ?? hasBrick(brickIndex(x + radius, y + radius)) ?? hasBrick(brickIndex(x - radius, y + radius));
}
function tick() {
startWork("physics");
const currentTick = performance.now();
const timeDeltaMs = currentTick - gameState.lastTick;
gameState.lastTick = currentTick;
let frames = Math.min(4, timeDeltaMs / (1000 / 60));
if (gameState.keyboardPuckSpeed) (0, _gameStateMutators.setMousePos)(gameState, gameState.puckPosition + gameState.keyboardPuckSpeed);
if (gameState.perks.superhot) frames *= (0, _pureFunctions.clamp)(Math.abs(gameState.puckPosition - gameState.lastPuckPosition) / 5, 0.2 / gameState.perks.superhot, 1);
(0, _gameStateMutators.normalizeGameState)(gameState);
if (gameState.running) {
gameState.levelTime += timeDeltaMs * frames;
gameState.runStatistics.runTime += timeDeltaMs * frames;
const maxBallSpeed = Math.sqrt(Math.max(0, ...gameState.balls.map(({ vx, vy })=>vx * vx + vy * vy))) * frames;
const steps = Math.ceil(maxBallSpeed / 8);
for(let i = 0; i < steps; i++)(0, _gameStateMutators.gameStateTick)(gameState, frames / steps);
}
if (gameState.running || gameState.needsRender) {
gameState.needsRender = false;
(0, _render.render)(gameState);
}
startWork("record video");
if (gameState.running) (0, _recording.recordOneFrame)(gameState);
startWork("sound");
if ((0, _options.isOptionOn)("sound")) (0, _sounds.playPendingSounds)(gameState);
startWork("idle");
requestAnimationFrame(tick);
FPSCounter++;
}
const stats = document.getElementById("stats");
let total = {};
let lastTick = performance.now();
let doing = "idle";
let FPSCounter = 0;
let lastMeasuredFPS = 60;
function startWork(what) {
if (!gameState.startParams.stress) return;
const newNow = performance.now();
if (doing) total[doing] = (total[doing] || 0) + (newNow - lastTick);
lastTick = newNow;
doing = what;
}
setInterval(()=>{
lastMeasuredFPS = FPSCounter;
FPSCounter = 0;
if (!gameState.startParams.stress) {
stats.style.display = "none";
return;
}
stats.style.display = "block";
const totalTime = (0, _gameUtils.sumOfValues)(total);
stats.innerHTML = `
<div>
${lastMeasuredFPS} FPS -
${(0, _gameStateMutators.liveCount)(gameState.coins)} / ${(0, _settings.getCurrentMaxCoins)()} Coins -
${(0, _gameStateMutators.liveCount)(gameState.particles) + (0, _gameStateMutators.liveCount)(gameState.lights) + (0, _gameStateMutators.liveCount)(gameState.texts)} / ${(0, _settings.getCurrentMaxParticles)() * 3} particles
</div>
` + Object.entries(total)// .sort((a, b) => b[1] - a[1])
.map((t)=>` <div>
<div style="transform: scale(${(0, _pureFunctions.clamp)(t[1] / totalTime, 0, 1)},1)"></div>
<strong>${t[0]} : ${Math.floor(t[1])} ms</strong>
</div>
`).join("\n");
total = {};
}, 1000);
setInterval(()=>{
(0, _monitorLevelsUnlocks.monitorLevelsUnlocks)(gameState);
}, 500);
window.addEventListener("visibilitychange", ()=>{
if (document.hidden) pause(true);
});
(0, _render.scoreDisplay).addEventListener("click", (e)=>{
e.preventDefault();
if (!(0, _asyncAlert.alertsOpen)) (0, _openScorePanel.openScorePanel)(gameState);
});
document.addEventListener("visibilitychange", ()=>{
if (document.hidden) pause(true);
});
document.getElementById("menu").addEventListener("click", (e)=>{
e.preventDefault();
if (!(0, _asyncAlert.alertsOpen)) openMainMenu();
});
const creativeModeThreshold = Math.max(...(0, _loadGameData.upgrades).map((u)=>u.threshold));
async function openMainMenu() {
pause(true);
const actions = [
{
icon: (0, _loadGameData.icons)["icon:new_run"],
text: (0, _i18N.t)("main_menu.normal"),
help: (0, _gameUtils.highScoreText)() || (0, _i18N.t)("main_menu.normal_help"),
value: ()=>{
restart({
levelToAvoid: (0, _gameUtils.currentLevelInfo)(gameState).name
});
}
},
(0, _creative.creativeMode)(gameState),
(0, _runHistoryViewer.runHistoryViewerMenuEntry)(),
(0, _levelEditor.levelEditorMenuEntry)(),
{
icon: (0, _loadGameData.icons)["icon:unlocks"],
text: (0, _i18N.t)("main_menu.unlocks"),
help: (0, _i18N.t)("main_menu.unlocks_help"),
value () {
openUnlocksList();
}
},
...donationNag(gameState),
{
text: (0, _i18N.t)("main_menu.settings_title"),
help: (0, _i18N.t)("main_menu.settings_help"),
icon: (0, _loadGameData.icons)["icon:settings"],
value () {
openSettingsMenu();
}
},
(0, _help.helpMenuEntry)()
];
const cb = await (0, _asyncAlert.asyncAlert)({
title: (0, _i18N.t)("main_menu.title"),
content: [
...actions,
`<p>
<span>Made in France by <a href="https://lecaro.me">Renan LE CARO</a>.</span>
<a href="https://paypal.me/renanlecaro" target="_blank">Donate</a>
<a href="https://discord.gg/bbcQw4x5zA" target="_blank">Discord</a>
<a href="https://f-droid.org/en/packages/me.lecaro.breakout/" target="_blank">F-Droid</a>
<a href="https://play.google.com/store/apps/details?id=me.lecaro.breakout" target="_blank">Google Play</a>
<a href="https://renanlecaro.itch.io/breakout71" target="_blank">itch.io</a>
<a href="https://gitlab.com/lecarore/breakout71" target="_blank">Gitlab</a>
<a href="https://breakout.lecaro.me/" target="_blank">Web version</a>
<a href="https://news.ycombinator.com/item?id=43183131" target="_blank">HackerNews</a>
<a href="https://breakout.lecaro.me/privacy.html" target="_blank">Privacy Policy</a>
<a href="https://archive.lecaro.me/public-files/b71/" target="_blank">Archives</a>
<span>v.${(0, _loadGameData.appVersion)}</span>
</p>`
],
allowClose: true
});
if (cb) {
cb();
gameState.needsRender = true;
}
}
function donationNag(gameState) {
if (!(0, _options.isOptionOn)("donation_reminder")) return [];
const hours = (0, _pureFunctions.hoursSpentPlaying)();
return [
{
text: (0, _i18N.t)("main_menu.donate", {
hours
}),
help: (0, _i18N.t)("main_menu.donate_help", {
suggestion: Math.min(20, Math.max(1, 0.2 * hours)).toFixed(0)
}),
icon: (0, _loadGameData.icons)["icon:premium"],
value () {
window.open("https://paypal.me/renanlecaro", "_blank");
}
}
];
}
async function openSettingsMenu() {
pause(true);
const actions = [
(0, _startingPerks.startingPerkMenuButton)()
];
actions.push({
icon: (0, _loadGameData.icons)[(0, _i18N.languages).find((l)=>l.value === (0, _i18N.getCurrentLang)())?.levelName],
text: (0, _i18N.t)("settings.language"),
help: (0, _i18N.t)("settings.language_help"),
async value () {
const pick = await (0, _asyncAlert.asyncAlert)({
title: (0, _i18N.t)("settings.language"),
content: [
(0, _i18N.t)("settings.language_help"),
...(0, _i18N.languages).map((l)=>({
...l,
icon: (0, _loadGameData.icons)[l.levelName]
}))
],
allowClose: true
});
if (pick && pick !== (0, _i18N.getCurrentLang)() && await confirmRestart(gameState)) {
(0, _settings.setSettingValue)("lang", pick);
(0, _settings.commitSettingsChangesToLocalStorage)();
window.location.reload();
}
}
});
for (const key of Object.keys((0, _options.options)))if ((0, _options.options)[key]) actions.push({
icon: (0, _options.isOptionOn)(key) ? (0, _loadGameData.icons)["icon:checkmark_checked"] : (0, _loadGameData.icons)["icon:checkmark_unchecked"],
text: (0, _options.options)[key].name,
help: (0, _options.options)[key].help,
disabled: (0, _options.isOptionOn)("basic") && [
"extra_bright",
"contrast",
"smooth_lighting",
"precise_lighting",
"probabilistic_lighting"
].includes(key) || // (isInWebView && key == "record") ||
false,
value: ()=>{
(0, _options.toggleOption)(key);
fitSize(gameState);
applyFullScreenChoice();
openSettingsMenu();
}
});
actions.push({
icon: (0, _loadGameData.icons)["icon:download"],
text: (0, _i18N.t)("settings.download_save_file"),
help: (0, _i18N.t)("settings.download_save_file_help"),
async value () {
const dlLink = document.createElement("a");
const obj = {
fileType: "B71-save-file",
appVersion: (0, _loadGameData.appVersion),
payload: (0, _generateSaveFileContent.generateSaveFileContent)()
};
const json = JSON.stringify(obj, null, 2);
dlLink.setAttribute("href", "data:application/json;charset=utf-8," + encodeURIComponent(json));
dlLink.setAttribute("download", "b71-save-" + new Date().toISOString().slice(0, 19).replace(/[^0-9]+/gi, "-") + ".json");
document.body.appendChild(dlLink);
dlLink.click();
setTimeout(()=>document.body.removeChild(dlLink), 1000);
}
});
actions.push({
icon: (0, _loadGameData.icons)["icon:upload"],
text: (0, _i18N.t)("settings.load_save_file"),
help: (0, _i18N.t)("settings.load_save_file_help"),
async value () {
if (!document.getElementById("save_file_picker")) {
let input = document.createElement("input");
input.setAttribute("type", "file");
input.setAttribute("id", "save_file_picker");
input.setAttribute("accept", ".b71,.json");
input.style.position = "absolute";
input.style.left = "-1000px";
input.addEventListener("change", async (e)=>{
try {
const file = input && input.files?.item(0);
if (file) {
const content = await new Promise((resolve, reject)=>{
const reader = new FileReader();
reader.onload = function() {
resolve(reader.result?.toString() || "");
};
reader.onerror = function() {
reject(reader.error);
};
// Read the file as a text string
reader.readAsText(file);
});
const { fileType, signedPayload, payload } = JSON.parse(content);
if (fileType !== "B71-save-file") throw new Error("Not a B71 save file");
if (payload) {
localStorage.clear();
for(let key in payload)localStorage.setItem(key, JSON.stringify(payload[key]));
} else if (signedPayload) {
// Old file format
const localStorageContent = JSON.parse(signedPayload);
localStorage.clear();
for(let key in localStorageContent)localStorage.setItem(key, localStorageContent[key]);
}
await (0, _asyncAlert.asyncAlert)({
title: (0, _i18N.t)("settings.save_file_loaded"),
content: [
(0, _i18N.t)("settings.save_file_loaded_help"),
{
text: (0, _i18N.t)("settings.save_file_loaded_ok")
}
]
});
window.location.reload();
}
} catch (e) {
await (0, _asyncAlert.asyncAlert)({
title: (0, _i18N.t)("settings.save_file_error"),
content: [
e.message,
{
text: (0, _i18N.t)("settings.save_file_loaded_ok")
}
]
});
}
input.value = "";
});
document.body.appendChild(input);
}
document.getElementById("save_file_picker")?.click();
}
});
actions.push({
icon: (0, _loadGameData.icons)["icon:coins"],
text: (0, _i18N.t)("settings.max_coins", {
max: (0, _settings.getCurrentMaxCoins)()
}),
help: (0, _i18N.t)("settings.max_coins_help"),
async value () {
(0, _settings.cycleMaxCoins)();
await openSettingsMenu();
}
});
actions.push({
icon: (0, _loadGameData.icons)["icon:reset"],
text: (0, _i18N.t)("settings.reset"),
help: (0, _i18N.t)("settings.reset_help"),
async value () {
if (await (0, _asyncAlert.asyncAlert)({
title: (0, _i18N.t)("settings.reset"),
content: [
(0, _i18N.t)("settings.reset_instruction"),
{
text: (0, _i18N.t)("settings.reset_confirm"),
value: true
},
{
text: (0, _i18N.t)("settings.reset_cancel"),
value: false
}
],
allowClose: true
})) {
localStorage.clear();
window.location.reload();
}
}
});
actions.push({
text: (0, _i18N.t)("settings.autoplay"),
help: (0, _i18N.t)("settings.autoplay_help"),
async value () {
startComputerControlledGame(false);
}
});
actions.push({
text: (0, _i18N.t)("settings.stress_test"),
help: (0, _i18N.t)("settings.stress_test_help"),
async value () {
startComputerControlledGame(true);
}
});
const cb = await (0, _asyncAlert.asyncAlert)({
title: (0, _i18N.t)("main_menu.settings_title"),
content: [
(0, _i18N.t)("main_menu.settings_help"),
...actions
],
allowClose: true,
className: "settings"
});
if (cb) {
cb();
gameState.needsRender = true;
}
}
async function applyFullScreenChoice() {
try {
if (!(document.fullscreenEnabled || document.webkitFullscreenEnabled)) return false;
if (document.fullscreenElement !== null && !(0, _options.isOptionOn)("fullscreen")) {
if (document.exitFullscreen) {
await document.exitFullscreen();
return true;
} else if (document.webkitCancelFullScreen) {
await document.webkitCancelFullScreen();
return true;
}
} else if ((0, _options.isOptionOn)("fullscreen") && !document.fullscreenElement) {
const docel = document.documentElement;
if (docel.requestFullscreen) {
await docel.requestFullscreen();
return true;
} else if (docel.webkitRequestFullscreen) {
await docel.webkitRequestFullscreen();
return true;
}
}
} catch (e) {
console.warn(e);
}
return false;
}
async function openUnlocksList() {
const ts = (0, _settings.getTotalScore)();
const hintField = (0, _options.isOptionOn)("mobile-mode") ? "help" : "tooltip";
const upgradeActions = (0, _loadGameData.upgrades).sort((a, b)=>a.threshold - b.threshold).map(({ name, id, threshold, icon, help })=>({
text: name,
disabled: ts < threshold,
value: {
perks: {
[id]: 1
},
level: (0, _loadGameData.allLevelsAndIcons).find((l)=>l.name === "icon:" + id)
},
icon,
[hintField]: ts < threshold ? (0, _i18N.t)("unlocks.minTotalScore", {
score: threshold
}) : help(1)
}));
const unlockedBefore = new Set((0, _settings.getSettingValue)("breakout_71_unlocked_levels", []));
const levelActions = (0, _loadGameData.allLevels).map((l, li)=>{
const lockedBecause = unlockedBefore.has(l.name) ? null : (0, _gameUtils.reasonLevelIsLocked)(li, (0, _gameOver.getHistory)(), true);
const percentUnlocked = lockedBecause?.reached ? `<span class="progress-inline"><span style="transform: scale(${Math.floor(lockedBecause.reached / lockedBecause.minScore * 100) / 100},1)"></span></span>` : "";
return {
text: l.name + percentUnlocked,
disabled: !!lockedBecause,
value: {
level: l
},
icon: (0, _loadGameData.icons)[l.name],
[hintField]: lockedBecause?.text || (0, _gameUtils.describeLevel)(l)
};
});
const tryOn = await (0, _asyncAlert.asyncAlert)({
title: (0, _i18N.t)("unlocks.title_upgrades", {
unlocked: upgradeActions.filter((a)=>!a.disabled).length,
out_of: upgradeActions.length
}),
content: [
`<p>${(0, _i18N.t)("unlocks.intro", {
ts
})}
${upgradeActions.find((u)=>u.disabled) ? (0, _i18N.t)("unlocks.greyed_out_help") : ""}</p> `,
...upgradeActions,
(0, _i18N.t)("unlocks.level", {
unlocked: levelActions.filter((a)=>!a.disabled).length,
out_of: levelActions.length
}),
...levelActions
],
allowClose: true,
className: (0, _options.isOptionOn)("mobile-mode") ? "" : "actionsAsGrid"
});
if (tryOn) {
if (await confirmRestart(gameState)) restart({
...tryOn
});
}
}
async function confirmRestart(gameState) {
if (!gameState.currentLevel) return true;
if (0, _asyncAlert.alertsOpen) return true;
pause(true);
return (0, _asyncAlert.asyncAlert)({
title: (0, _i18N.t)("confirmRestart.title"),
content: [
(0, _i18N.t)("confirmRestart.text"),
{
value: true,
text: (0, _i18N.t)("confirmRestart.yes")
},
{
value: false,
text: (0, _i18N.t)("confirmRestart.no")
}
]
});
}
const pressed = {
ArrowLeft: 0,
ArrowRight: 0,
Shift: 0
};
function setKeyPressed(key, on) {
pressed[key] = on;
gameState.keyboardPuckSpeed = (pressed.ArrowRight - pressed.ArrowLeft) * (1 + pressed.Shift * 2) * gameState.gameZoneWidth / 50;
}
document.addEventListener("keydown", async (e)=>{
if (e.key.toLowerCase() === "f" && !e.ctrlKey && !e.metaKey) {
(0, _options.toggleOption)("fullscreen");
applyFullScreenChoice();
} else if (e.key in pressed) setKeyPressed(e.key, 1);
if (e.key === " " && !(0, _asyncAlert.alertsOpen)) {
if (gameState.running) pause(true);
else play();
} else return;
e.preventDefault();
});
let pageLoad = new Date();
document.addEventListener("keyup", async (e)=>{
const focused = document.querySelector("button:focus");
if (e.key in pressed) setKeyPressed(e.key, 0);
else if (e.key === "ArrowDown" && focused?.nextElementSibling?.tagName === "BUTTON") focused?.nextElementSibling?.focus();
else if (e.key === "ArrowUp" && focused?.previousElementSibling?.tagName === "BUTTON") focused?.previousElementSibling?.focus();
else if (e.key === "Escape" && (0, _asyncAlert.closeModal)) (0, _asyncAlert.closeModal)();
else if (e.key === "Escape" && gameState.running) pause(true);
else if (e.key.toLowerCase() === "m" && !(0, _asyncAlert.alertsOpen)) openMainMenu().then();
else if (e.key.toLowerCase() === "s" && !(0, _asyncAlert.alertsOpen)) (0, _openScorePanel.openScorePanel)(gameState).then();
else if (e.key.toLowerCase() === "r" && !(0, _asyncAlert.alertsOpen) && pageLoad < Date.now() - 500) {
if (gameState.startParams.computer_controlled) return startComputerControlledGame(gameState.startParams.stress);
// When doing ctrl + R in dev to refresh, i don't want to instantly restart a run
if (await confirmRestart(gameState)) restart({
levelToAvoid: (0, _gameUtils.currentLevelInfo)(gameState).name
});
} else return;
e.preventDefault();
});
const gameState = (0, _newGameState.newGameState)({});
function restart(params) {
Object.assign(gameState, (0, _newGameState.newGameState)(params));
// Recompute brick size according to level
fitSize(gameState);
(0, _recording.pauseRecording)();
(0, _gameStateMutators.setLevel)(gameState, 0);
if (params?.computer_controlled) play();
}
if (window.location.search.match(/autoplay|stress/)) startComputerControlledGame(window.location.search.includes("stress"));
else restart({});
function startComputerControlledGame(stress = false) {
const perks = {
base_combo: 20,
pierce: 3
};
if (stress) Object.assign(perks, {
base_combo: 5000,
pierce: 20,
rainbow: 3,
sapper: 2,
etherealcoins: 1,
bricks_attract_ball: 1,
respawn: 3
});
else {
for(let i = 0; i < 10; i++){
const u = (0, _gameUtils.sample)((0, _loadGameData.upgrades));
perks[u.id] ||= Math.floor(Math.random() * u.max) + 1;
}
perks.superhot = 0;
}
restart({
level: (0, _gameUtils.sample)((0, _loadGameData.allLevels).filter((l)=>l.color === "#000000")),
computer_controlled: true,
perks,
stress
});
}
tick();
(0, _tooltip.setupTooltips)();
document.getElementById("menu")?.setAttribute("data-tooltip", (0, _i18N.t)("play.menu_tooltip"));
},{"./loadGameData":"l1B4x","./sounds":"dQKPV","./game_utils":"cEeac","./PWA/sw_loader":"2n0gK","./i18n/i18n":"eNPRm","./settings":"5blfu","./gameStateMutators":"9ZeQl","./render":"9AS2t","./recording":"godmD","./newGameState":"aQN6X","./asyncAlert":"rSqLY","./options":"d5NoS","./pure_functions":"6pQh7","./help":"bqkdF","./creative":"63kYJ","./tooltip":"3RWxb","./startingPerks":"lv30m","./migrations":"a9qdY","./gameOver":"caCAf","./generateSaveFileContent":"iEcoB","./runHistoryViewer":"b80Ki","./openScorePanel":"aHTmD","./monitorLevelsUnlocks":"jjD0P","./levelEditor":"cirX1","@parcel/transformer-js/src/esmodule-helpers.js":"gkKU3"}],"l1B4x":[function(require,module,exports,__globalThis) {
var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js");
parcelHelpers.defineInteropFlag(exports);
parcelHelpers.export(exports, "appVersion", ()=>appVersion);
parcelHelpers.export(exports, "icons", ()=>icons);
parcelHelpers.export(exports, "transformRawLevel", ()=>transformRawLevel);
parcelHelpers.export(exports, "allLevelsAndIcons", ()=>allLevelsAndIcons);
parcelHelpers.export(exports, "allLevels", ()=>allLevels);
parcelHelpers.export(exports, "upgrades", ()=>upgrades);
var _paletteJson = require("./data/palette.json");
var _paletteJsonDefault = parcelHelpers.interopDefault(_paletteJson);
var _levelsJson = require("./data/levels.json");
var _levelsJsonDefault = parcelHelpers.interopDefault(_levelsJson);
var _versionJson = require("./data/version.json");
var _versionJsonDefault = parcelHelpers.interopDefault(_versionJson);
var _upgrades = require("./upgrades");
var _getLevelBackground = require("./getLevelBackground");
var _levelIcon = require("./levelIcon");
const palette = (0, _paletteJsonDefault.default);
const rawLevelsList = (0, _levelsJsonDefault.default);
const appVersion = (0, _versionJsonDefault.default);
const icons = {};
function transformRawLevel(level) {
const bricks = level.bricks.split("").map((c)=>palette[c]).slice(0, level.size * level.size);
const bricksCount = bricks.filter((i)=>i).length;
const icon = (0, _levelIcon.levelIconHTML)(bricks, level.size, level.color);
icons[level.name] = icon;
return {
...level,
bricks,
bricksCount,
icon,
color: level.color || "#000000",
svg: (0, _getLevelBackground.getLevelBackground)(level),
sortKey: (Math.random() + 3) / 3.5 * bricksCount
};
}
const allLevelsAndIcons = rawLevelsList.map(transformRawLevel);
const allLevels = allLevelsAndIcons.filter((l)=>!l.name.startsWith("icon:"));
const upgrades = (0, _upgrades.rawUpgrades).map((u)=>({
...u,
icon: icons["icon:" + u.id]
}));
},{"./data/palette.json":"ktRBU","./data/levels.json":"8JSUc","./data/version.json":"iyP6E","./upgrades":"1u3Dx","./getLevelBackground":"7OIPf","./levelIcon":"6rQoT","@parcel/transformer-js/src/esmodule-helpers.js":"gkKU3"}],"ktRBU":[function(require,module,exports,__globalThis) {
module.exports = JSON.parse("{\"_\":\"\",\"B\":\"black\",\"W\":\"#FFFFFF\",\"g\":\"#231f20\",\"y\":\"#FFD300\",\"b\":\"#6262EA\",\"t\":\"#5DA3EA\",\"s\":\"#E67070\",\"r\":\"#e32119\",\"R\":\"#ab0c0c\",\"c\":\"#59EEA3\",\"G\":\"#A1F051\",\"v\":\"#A664E8\",\"p\":\"#E869E8\",\"a\":\"#5BECEC\",\"C\":\"#53EE53\",\"S\":\"#F44848\",\"P\":\"#E66BA8\",\"O\":\"#F29E4A\",\"k\":\"#618227\",\"e\":\"#e1c8b4\",\"l\":\"#9b9fa4\"}");
},{}],"8JSUc":[function(require,module,exports,__globalThis) {
module.exports = JSON.parse('[{"name":"71 mini","size":5,"bricks":"bbb____bt__btt__b_t___ttt","color":""},{"name":"Butterfly","bricks":"_________bb_t_t_bbbbb_t_bbbbbbbtbbbb_bbbtbbb____btb____bbbtbbb__bb_t_bb__________","size":9,"color":""},{"name":"Castle","size":7,"bricks":"s_s_s_ssssssssssBBBssssBBBssttbbbttttbbbtttbtbtbt","color":""},{"name":"Eyes","size":9,"bricks":"ttttttt__tWWWWWWW_tWrrWttW_tWWWWWWW_ttttttt_____t______ttttt____ttttt_____t_t","color":"","credit":"My favorite character in https://nuclearthrone.com/"},{"name":"Creeper","size":10,"bricks":"___________ccGGccGG__cGccGcGc__GBBccBBc__cBBGcBBc__GccBBGGc__ccBBBBcG__GGBBBBcG__cGBccBGc___________","credit":"https://en.wikipedia.org/wiki/Creeper_(Minecraft)","color":""},{"name":"Stairs","size":8,"bricks":"tt______tt______bbtt____bbtt____vvbbtt__vvbbtt__ppvvbbttppvvbbtt","color":""},{"name":"Dots","size":9,"bricks":"b_t_a_c_c__________b_t_a_c__________P_b_t_a_c__________P_b_t_a__________P_P_b_t_a","color":""},{"name":"Lines","size":9,"bricks":"aaaaaaaa___________tttttttt_________aaaaaaaa___________tttttttt_________aaaaaaaa","color":""},{"name":"Heart","size":15,"bricks":"__________________RRR___RRR_____RSSSR_RSSSR___RSWWSSRSSSSSR__RSWSSSSSSSSSR__RSSSSSSSSSSSR__RSWSSSSSSSSSR___RSSSSSSSSSR_____RSSSSSSSR_______RSSSSSR_________RSSSR___________RSR_____________R____________________________________","color":"","credit":"https://www.youtube.com/watch?v=gdWiTfzXb1g"},{"name":"Swiss","size":7,"bricks":"________RRRRR__RRWRR__RWWWR__RRWRR__RRRRR________","color":""},{"name":"Germany","size":4,"bricks":"____ggggrrrryyyy","color":"#5da3ea"},{"name":"France","size":6,"bricks":"______ttWWrrttWWrrttWWrrttWWrrttWWrr","color":""},{"name":"Smiley","size":8,"bricks":"_________yy__yy__yy__yy__________________yyyyyy___yyyy__________","color":""},{"name":"Labyrinthe","size":11,"bricks":"_______tttS_Stttt_S________t___S__Stt_ttttt____t_____S__ttt_S_S____t___t_tttt_t_S_t____tSt_t_t_Sttt___t_t_____Sttt_tttttS"},{"name":"Temple","size":11,"bricks":"_______________WWW______WWWWWWW___WWWWWWWWW___b_b_b_b____b_b_b_b____v_v_v_v____P_P_P_P____P_P_P_P____WWWWWWW___WWWWWWWWW_","color":""},{"name":"Pacman","size":12,"bricks":"____yyyy______yyyyyyyy___yyyyByyyyy__yyyyyyyyy__yyyyyyyy____yyyyyy______yyyyyy___S_Syyyyyyyy_____yyyyyyyyy___yyyyyyyyyy___yyyyyyyy______yyyy","color":"","credit":"https://en.wikipedia.org/wiki/Pacman"},{"name":"Ship","size":11,"bricks":"____sWW________sWWW_______sWWW_______s___OOOOOOOOOOOOOO_OBOBOBOBOO__OOOOOOOO_bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb___________"},{"name":"We come in peace","size":13,"bricks":"________________a_____a_______a___a_______aaaaaaa_____aaBaaaBaa___aaaaaaaaaaa__aaaaaaaaaaa__a_aaaaaaa_a__a_a_____a_a_____aa_aa_____________________________","color":"","credit":"https://en.wikipedia.org/wiki/Space_invaders"},{"name":"Space mushroom","size":10,"bricks":"______________WW_______WWWW_____WWWWWW___WWBWWBWW__WWWWWWWW____W__W_____W_WW_W___W_W__W_W","color":"","credit":"https://en.wikipedia.org/wiki/Space_invaders"},{"name":"Wololo","size":9,"bricks":"____WW_OOW___WW__OWW__W___OWWWbbbW_WWW_WbW_WOW__WWb__OW__bbb__O___W_W__O___W_W__O","color":"","credit":"https://aoe.heavengames.com/theacademy/unitsboatsandbuildings/priest/"},{"name":"Small heart","size":15,"bricks":"________________________________RRRR___RRRR___RrWWrR_RWWrrR__RWWrrrRWWrrrR__RrrrrrrrrrrrR__RrrrrrrrrrrrR___RrrrrrrrrrR_____RrrrrrrrR_______RrrrrrR_________RrrrR___________RrR_____________R______________________","color":""},{"name":"Eye","size":9,"bricks":"____________ggg_____gWWWg___gWbbbWg_gWWbBbWWg_gWbbbWg___gWWWg_____ggg____________","color":"#5da3ea"},{"name":"Enderman","size":10,"bricks":"___________gggggggg__gggggggg__gggggggg__gggggggg__vvvggvvv__gggggggg__gggggggg__gggggggg_____________________","color":"#154b07","credit":"https://minecraft.wiki/w/Enderman"},{"name":"Mushroom","size":16,"bricks":"_____________________rrrrWW________WWrrrrWWWW_____WWrrrrrrWWWW____WrrWWWWrrWWW___rrrWWWWWWrrrrr__rrrWWWWWWrrWWr__WrrWWWWWWrWWWW__WWrrWWWWrrWWWW__WWrrrrrrrrrWWr__WrrWWWWWWWWrrr_____WWBWWBWW_______WWWBWWBWWW______WWWWWWWWWW_______WWWWWWWW____________________","color":"","credit":"https://pixelartmaker.com/art/cce4295a92035ea"},{"name":"Tulip","size":11,"bricks":"______________R_R_R______RRRRR______RRRRR______RRRRR_______RRR_________k________k_k_k______k_k_k_______kkk_________k________________","color":""},{"name":"Chain","size":7,"bricks":"yyy____yBy____yyyyy____yBy____yyyyy____yBy____yyy","color":""},{"name":"Marion","size":9,"bricks":"rr_____rr_rr___rr__rrr_rrr__rrrrrrr__rr_r_rr__rr___rr__rr___rr__rr___rr_rrr___rrr","color":""},{"name":"Renan","size":9,"bricks":"yyyyyyy___yyyyyyy__yy___yy__yy___yy__yyyyyy___yy_yy____yy__yy___yy___yy_yyy___yyy","color":""},{"name":"Violet Pairs","size":8,"bricks":"b_b_b_b_b_b_b_b__________t_t_t_t_t_t_t_t________b_b_b_b_b_b_b_b","color":""},{"name":"Red Cups","size":11,"bricks":"___________rBr_rBr_rBrrrr_rrr_rrr___________r_rBr_rBr_rr_rrr_rrr_r___________rBr_rBr_rBrrrr_rrr_rrr__________","color":""},{"name":"Cactus","size":10,"bricks":"____G______rG_Gk______G_Gk______kkkk_r_____kkk_G______GkGk_____rGkk_______Gk________kk________kk_____","color":""},{"name":"Sunny Face","size":11,"bricks":"____yyy______yyyyyyy___yyyyyyyyy__yyyyyyyyy_yyyWWyWWyyyyyyyyyyyyyyyyyyyyyyyyy_yyWWWWWyy__yyyWWWyyy___yyyyyyy______yyy","color":"#5da3ea"},{"name":"Mountain","size":9,"bricks":"_______________W_______WWW______GGWW__W_GGGGG_kkkGGGGG_kkkkGGGGkkkkkGGGGkkkkkkGGG_________","color":""},{"name":"Dollar","size":17,"bricks":"________________________G_G______________G_G____________GGGGGGG_________GGGGGGGGG_______GG__G_G__GG______GG__G_G__GG______GG__G_G___________GGGGGGGG__________GGGGGGGG___________G_G__GG______GG__G_G__GG______GG__G_G__GG_______GGGGGGGGG_________GGGGGGG____________G_G______________G_G________________________","color":""},{"name":"Waves","size":8,"bricks":"___bbb____bbb____bbttbbbbbttbbbbttttaatttttaattttaaaaaaa","color":""},{"name":"Box","size":8,"bricks":"yyyyyyyyy______yy_bbbb_yy_b__b_yy_b__b_yy_bbbb_yy______yyyyyyyyy","color":"","squared":false},{"name":"Rose","size":9,"bricks":"__SS______SSSS_____SSSS_____SSSS______SS_k______k_kk_____kk_k______kk________k","color":""},{"name":"Time","size":9,"bricks":"__________WWWWWWW___WWWWW_____yyy_______y________y_______WyW_____WyyyW___yyyyyyy__________","color":"","squared":false},{"name":"Watermelon","size":8,"bricks":"_____Sk_____SSBk___SBSSk__SSSSSk_SSBSSk_SBSSSSk_kSSSkk___kkk____","color":""},{"name":"Worms","size":13,"bricks":"___sssss_______sssssss______WWsWWsss_____WBsBWsss_____WBsBWsss_____WWsWWsss_____sssssss_______ssssss_____WWWWWWss_______WssWs__s_____ssss__sss___sssssssssss__sssssssss_ss","color":"","squared":false,"credit":"https://en.wikipedia.org/wiki/Worms_(series)"},{"name":"Ocean Sunrise","size":8,"bricks":"SSSSSSSSSSSyySSSSSyyyySSSyyyyyySbttttttbbbttttbbbbbttbbbbbbbbbbb","color":""},{"name":"Crosses","size":13,"bricks":"b___b___b___b__v___v___v___vvv_vvv_vvv___v___v___v__p___p___p___ppp_ppp_ppp_ppp___p___p___p__P___P___P___PPP_PPP_PPP___P___P___P__p___p___p___ppp_ppp_ppp_ppp___p___p___p","color":""},{"name":"Negative space","size":9,"bricks":"tttttttttt_t_t_t_t_________b_b_b_b_bbbbbbbbbb_b_b_b_b___________t_t_t_t_ttttttttt_________"},{"name":"UK","size":11,"bricks":"brbbWrWbbrbbbrbWrWbrbbbbbrWrWrbbbWWWWWrWWWWWrrrrrrrrrrrWWWWWrWWWWWbbbrWrWrbbbbbrbWrWbrbbbrbbWrWbbrb__________","color":""},{"name":"Greece","size":11,"bricks":"ttWttttttttttWttWWWWWWWWWWWttttttttWttWWWWWWttWttttttttWWWWWWWWWWWtttttttttttWWWWWWWWWWWttttttttttt__________","color":""},{"name":"Russia","size":8,"bricks":"________WWWWWWWWWWWWWWWWttttttttttttttttrrrrrrrrrrrrrrrr________________","color":""},{"name":"Ukraine","size":8,"bricks":"________ttttttttttttttttttttttttyyyyyyyyyyyyyyyyyyyyyyyy________","color":""},{"name":"Poland","size":7,"bricks":"________WWWWW__WWWWW__rrrrr__rrrrr_______________","color":""},{"name":"Yellow 71","size":9,"bricks":"_________yyyyy__yyyyyyy_yyy___yy__yy__yyy__yy_yyy___yy_yy____yy_yy____yy__________________","color":""},{"name":"71 on white","size":6,"bricks":"WWWWWWrrrWWrWWrWrrWrWWWrWrWWWrWWWWWW______"},{"name":"Blue 71","size":8,"bricks":"ttttt__bttttt_bb___ttbbb__tt__bb__tt__bb_tt___bb_tt___bb_tt___bb","color":""},{"name":"Seventy one","size":21,"bricks":"rr_yy_rrry_yrrry_yrrrr_ry_yr__y_yr_ry_y_r_rr_yy_rr_yy_r_ry_y_r_r_ry_yr__y_yr_ry_y_r_rr_y_yrrry_yrrryyy_r_yyy__________________y______________r_____yyyrrry_yrrryyyrr_y_y__yrr_y_yrr_y_yr__y_yyyyrrr_y_rrry_yrrryyy____________________yrrryyyrrr_________yy_r_ry_yrr_____________rrry_yrrryyyyyyyyyyyy_____________________________________________________________________________________________________________________________"},{"name":"B71","size":10,"bricks":"__________bbbtttt_b_b__b__tbb_b__b__t_b_bbb__t__b_b__b_t__b_b__bt___b_bbb_t__bbb__________"},{"name":"Pig","size":9,"bricks":"__________PP___PP__PPP_PPP__WWPPPWW__WBPPPBW__PPsssPP__PsBsBsP__PPsssPP___________"},{"name":"Big Pig","size":15,"bricks":"________________sss_______sss__ss__sssss__ss____sssssssss_____sWBsssssBWs___ssBBsssssBBss__ssss_____ssss__sss_sssss_sss__sss_sBsBs_sss__sss_sssss_sss___sss_____sss____sssssssssss__GGGsssssssssGGGGGGsGsssssGsGGGGGGssGGGGGssGGG_______________","color":""},{"name":"Donkey Kong","size":9,"bricks":"OOr__a___OOr__a___ppppppp_O______a________a____pppppppr_a______b_a___O__ppppppp__","color":""},{"name":"Banana","size":12,"bricks":"_________________e__________eee_________eee_________eee_________eeeyy_____yyeeyyyy___yyyyey_yC___yy_yyy___C_____yyyy_________yyyy_________yyyy"},{"name":"Fox","size":8,"bricks":"e______eee_OO_eeeeOOOOeeeOBOOBOeOOOOOOOO_WWBBWW___WWWW_____WW___"},{"name":"Wiki","size":10,"bricks":"_______________________GGGG_____GGkkGG___GkggggkG__GgWWWWgG__GkggggkG___GGkkGG_____GGGG_______________________","color":"#1c71d8"},{"name":"Baby Dog","size":8,"bricks":"_______W__eeeeWWWWeeWeWWWeBWeBeeeeWWWWee_eWBBWe__eWWWWe____WW___"},{"name":"dog 21","size":9,"bricks":"__________O_____O_OOOWWWOOOOOWWWWWOOOOeWWWWOO_eBeWWBW__eBeWWBW___eWBWW_____WRW____________","credit":"https://prohama.com/dog-21-pattern/"},{"name":"icon:extra_life","size":9,"bricks":"___________rr_rr___rrrrrrr_rrrrrrrrrrrrrrrrrr_rrrrrrr___rrrrr_____rrr_______r_____________"},{"name":"icon:streak_shots","size":8,"bricks":"_W_W_W__W_W_W_W_tttttt_WttttttW________W______W______W_____WWWW_"},{"name":"icon:base_combo","size":7,"bricks":"________bbbbb__bybyb__bbbbb__bybyb__bbbbb________"},{"name":"icon:slow_down","size":10,"bricks":"_____________kk_______kkkk_____kkkkkkGG__kkkkkkGBG_kkkkkkGGGGkkkkkkGG__GGGGGG____GG__GG_____________"},{"name":"icon:bigger_puck","size":8,"bricks":"_________tttttt__tttttt______________________W___________WWWWWW_"},{"name":"icon:viscosity","size":8,"bricks":"________tt______bbtt__ttbbbbttbbbtbbtbbbbbtbbtbbbbbybbybbbbbbbbb"},{"name":"icon:left_is_lava","size":8,"bricks":"r_______rtttttt_rtttttt_r_______r_______r____W__r_______r_WWW___"},{"name":"icon:right_is_lava","size":8,"bricks":"_______r_ttttttr_ttttttr_______r_______r_____W_r_______r__WWW__r"},{"name":"icon:telekinesis","size":8,"bricks":"_____PW_____s______P______s_______P_______s_______P_____WWWWW"},{"name":"icon:top_is_lava","size":8,"bricks":"rrrrrrrr_tttttt__tttttt____________________W_______________WWW__"},{"name":"icon:coin_magnet","size":8,"bricks":"__y__y_yy_________y_y_y_y________y_y______________y______WWW____"},{"name":"icon:skip_last","size":5,"bricks":"_ttt_t_t_ttt_ttt_t_t_ttt_"},{"name":"icon:multiball","size":8,"bricks":"_________tttttt__tttttt___________W__W____________________WWW___"},{"name":"icon:smaller_puck","size":8,"bricks":"_________tttttt__tttttt_____________W_____________________WW____"},{"name":"icon:pierce","size":6,"bricks":"ttttttttttWtttt__ttt__ttt__ttt__tttt"},{"name":"icon:picky_eater","size":8,"bricks":"_rrr_______ry_____ryy_____r_y______yyy______________y_____WWWW__"},{"name":"icon:metamorphosis","size":8,"bricks":"aaaaaa__aaaa__________W___________ttaatt__tttttt_________WWW"},{"name":"icon:compound_interest","size":8,"bricks":"_________tttttt__ttt__t______y_____________W__y_________rrWWWrrr"},{"name":"icon:hot_start","size":7,"bricks":"ttttttttttt_tt_____W_____y_y_____y_____y_y_WWW_y_"},{"name":"icon:sapper","size":9,"bricks":"_____WW______W__W_tttWttt_yttgggtt__tgggggt__tgggggt__tgggggt__ttgggtt__ttttttt___________","color":"#000000"},{"name":"icon:bigger_explosions","size":8,"bricks":"__r_______ry_rr___ryry__ryyyW_rr_rrWyyy___yryrr__yrry_rr_rr"},{"name":"icon:extra_levels","size":6,"bricks":"__________b__t_bb_ttt_b__t_bbb____________"},{"name":"icon:pierce_color","size":8,"bricks":"bb___bbbb__b_bbb_____bbb____bbbbb____bbbbb____bbbbb____bbbbb____"},{"name":"icon:soft_reset","size":9,"bricks":"__rr______rrr_yy__rrrr_yyy_rrrr_yyyy_____yyyy_yyyyyyyy_yyyyyyyy__yyyyyy____yyyy__"},{"name":"icon:ball_repulse_ball","size":8,"bricks":"WsP__PsWs______sP______P________________P______Ps______sWsP__PsW"},{"name":"icon:ball_attract_ball","size":8,"bricks":"__P__P____s__s__PsW__WsP________________PsW__WsP__s__s____P__P__"},{"name":"icon:puck_repulse_ball","size":8,"bricks":"__________________W_______s___W___P__s______P____________WWW__"},{"name":"A","size":7,"bricks":"__ttt___ttttt_ttt_ttttt___ttttttttttt___tttt___tt"},{"name":"B","size":9,"bricks":"_bbbbb_____bb_bb____bb_bb____bb_bb____bbbb_____bb_bb____bb_bb____bb_bb___bbbbb____"},{"name":"C","size":8,"bricks":"__rrrr___rrrrrr_rrr___rrrr______rr______rrr___rr_rrrrrr___rrrr"},{"name":"D","size":8,"bricks":"_GGGGG____GG__G___GG__GG__GG__GG__GG__GG__GG__GG__GG__G__GGGGG"},{"name":"e","size":8,"bricks":"__tttt___tttttt_tt____tttt____tttttttttttt_______tt__tt___tttt_"},{"name":"icon:wind","size":9,"bricks":"_ss______s___PPPP_s_________sssssss___________sssssss_s________s___PPPP__ss"},{"name":"icon:sturdy_bricks","size":7,"bricks":"ttbttttbtttbtt____W_____W_W___W___W_______WWW____"},{"name":"icon:respawn","size":9,"bricks":"tttt___ttttt__t__ttta_ttt_______________________________W_________________WWW"},{"name":"Elephant","size":18,"bricks":"_________________________llll_________lll_llllll_lll___lsssllllllllsssl__lsssllllllllsssl__lsssllBllBllsssl__lssllWllllWllssl___ll__llllll__ll_________llll_______________ll______________llll______________ll________________________________________________________________________________________________________________________________________","color":"","credit":"https://prohama.com/elephant-5-pattern/"},{"name":"Orca","size":20,"bricks":"____________________________________________________________________________________________ggggg____ggg_ggg___ggggggg____ggggg___ggggggggg____ggg___ggggWggWWW_____gggggggggggWWWW_____ggggggggggWWWWW_____gggggggggWWWWW_______gggggggWWWWW___________WWggWWW______________ggg_gg______________gg__g__________________________________________________________________________________________________________","color":"#1c71d8","credit":"https://prohama.com/whale-2-pattern/"},{"name":"Shark","size":17,"bricks":"__________________________________________g_______________ggg____________ggggggg_________ggggggggg_______ggggggggggg_____gggggWWWggggg____gBgWWWWWWWgBg___ggWWWWrWrWWWWgg__ggWWWrrrrrWWWgg_ggWWWrrrrrrrWWWggggWWrrrrrrrrrWWgggWWWrWrWrWrWrWWWggWWrrWWWWWWWrrWWggWWWWWWWWWWWWWWWg_________________","color":"#3584e4","credit":"https://prohama.com/shark-2-pattern/"},{"name":"Bird","size":13,"bricks":"_______RRR____R____RSSSR___RR__RSSWWWR__RSR_RSWWBWR__RSSRRSWWWWyy_RSSSRSWWWR___RSSSSSSRR_____RRSSyyyy______RSyyyyy___RRRRSyyyy____RSSSRyyy_____RRRR______________________","color":"","credit":"https://prohama.com/bird-1-size-13x12/"},{"name":"Tux","size":14,"bricks":"_____gggg________gggggggg_____gggggggggg____gggggggggg___gggggggggggg__gggWBggWBggg__gggBBggBBggg__ggggyyyygggg_ggggggyyggggggggggWWWWWWggggg_gWWWWWWWWg_g__WWWWWWWWWW____WWWWWWWWWW____yyy____yyy__","color":"#62a0ea","credit":"https://prohama.com/pingwin-4-pattern/"},{"name":"Armenia","size":6,"bricks":"_______rrrr__bbbb__yyyy_____________","color":""},{"name":"Austria","size":6,"bricks":"_______rrrr__WWWW__rrrr______","color":""},{"name":"Benin","size":8,"bricks":"_________kkyyyy__kkyyyy__kkrrrr__kkrrrr__________________________","color":""},{"name":"Botswana","size":10,"bricks":"___________tttttttt__tttttttt__tttttttt__WWWWWWWW__BBBBBBBB__WWWWWWWW__tttttttt__tttttttt__tttttttt___________","color":""},{"name":"Bulgaria","size":6,"bricks":"_______WWWW__cccc__rrrr_____________","color":""},{"name":"Canada","size":7,"bricks":"________rWWWr__rWrWr__rWWWr______________________","color":""},{"name":"Chad","size":8,"bricks":"_________bbyyRR__bbyyRR__bbyyRR","color":""},{"name":"China","size":6,"bricks":"______RRyRRRRyRyRRRRyRRRRRRRRR______","color":""},{"name":"Colombia","size":7,"bricks":"________yyyyy__yyyyy__bbbbb__RRRRR_______________","color":""},{"name":"Republic of the Congo","size":7,"bricks":"________kkkyy__kkyyr__kyyrr__yyrrr_______________","color":""},{"name":"C\xf4te d\'Ivoire","size":8,"bricks":"_________OOWWGG__OOWWGG__OOWWGG","color":""},{"name":"Denmark","size":8,"bricks":"_________rrWrrr__rrWrrr__WWWWWW__rrWrrr__rrWrrr","color":""},{"name":"El Salvador","size":8,"bricks":"_________bbbbbb__bbbbbb__WWWkWW__WWkWWW__bbbbbb__bbbbbb","color":""},{"name":"Egypt","size":8,"bricks":"_________RRRRRR__RRRRRR__WWWyWW__WWyWWW__gggggg__gggggg","color":"#1c71d8"},{"name":"Estonia","size":8,"bricks":"_________tttttt__tttttt__gggggg__gggggg__WWWWWW__WWWWWW","color":"#26a269"},{"name":"Finland","size":6,"bricks":"_______WtWW__tttt__WtWW_____________","color":""},{"name":"Gabon","size":5,"bricks":"______CCC__yyy__ttt______","color":""},{"name":"Georgia","size":9,"bricks":"__________WrWrWrW__WWWrWWW__rrrrrrr__WWWrWWW__WrWrWrW__________________","color":""},{"name":"Guinea","size":8,"bricks":"_________rryycc__rryycc__rryycc","color":""},{"name":"Indonesia","size":6,"bricks":"_______rrrr__rrrr__WWWW__WWWW_______","color":""},{"name":"icon:one_more_choice","size":7,"bricks":"ttt____tbbb___tbttt__tbtbbb__btbbb___tbbb____bbb_"},{"name":"icon:instant_upgrade","size":5,"bricks":"ttt__tbbb_tbbb_tbbb__bbb_"},{"name":"icon:checkmark_checked","size":6,"bricks":"_ggggbgBBBbbbbBbbggbbbBggBbBBg_gggg_"},{"name":"icon:checkmark_unchecked","size":6,"bricks":"_gggg_gBBBBggBBBBggBBBBggBBBBg_gggg_"},{"name":"icon:concave_puck","size":7,"bricks":"___W_____________W__________W__W__WWW___WWWWWWWWW","color":""},{"name":"icon:helium","size":8,"bricks":"v______vvv____vvv______vv______vv______vv______vv______v__WWWW__","color":""},{"name":"icon:asceticism","size":8,"bricks":"_________y____y____W____y______y_________y____y_________y_WWWW_y","color":""},{"name":"icon:unbounded","size":9,"bricks":"WWWWWWWWWW_ttttt_WWrtttttrWW_ttttt_WWr_____rWW_______WWr___W_rWW_______WWrWWW__rW","color":""},{"name":"icon:shunt","size":8,"bricks":"_______y______yy______yy__yCCyyy__y__yyy_yy__yyy_yy__yyyyyy__yyy","color":""},{"name":"icon:yoyo","size":8,"bricks":"_rrrrrr_rrrrrrrrrrrrrrrr_WWWWWW_rWrrrrrrrrWrrrrr_rrWrrr_____W___","color":""},{"name":"icon:nbricks","size":6,"bricks":"yy__yyyyy_yyyyyyyyyyyyyyyy_yyyyy__yy","color":""},{"name":"icon:etherealcoins","size":11,"bricks":"_____v_________vvv________ttt________ttt_______vtttv_____vvtttvv____vvtttvv____vvtttvv____v_ryr_v_______r________________","color":""},{"name":"icon:shocks","size":8,"bricks":"_r__r_r_rWWWyy_r_WWW__r_yWWWyry_y_ryyy_rry__WWW___ryWWWryr__WWWy","color":""},{"name":"icon:zen","size":9,"bricks":"___tt______tttt_____BttB_____bbbb____bbbbbb___BbbbbB___tttttt__tttttttt__tttttt__","color":""},{"name":"icon:sacrifice","size":9,"bricks":"__r___r___rrr_rrr_rrWWWWWrrrrWrWrWrrrrWWrWWrr_rrWWWrr___rWrWr_____rrr_______r____","color":""},{"name":"icon:trampoline","size":8,"bricks":"___y_____y____y___bbyb___bttttb_bttytttb_bttttb__tbbbbt__t____t_","color":""},{"name":"icon:ghost_coins","size":7,"bricks":"__yyy___yyyyy_yyOyOyyyyyyyyyyyOOOyyyyyyyyyyy_y_yy","color":""},{"name":"icon:forgiving","size":8,"bricks":"____G______G_G____G___G__G_____GG_____G__G___G____G_G____WWWWW__","color":""},{"name":"icon:ball_attracts_coins","size":8,"bricks":"WWW_____WWW_y___WWW____y__y_y____y____y_____y_____y____y___y_y__","color":""},{"name":"icon:reach","size":8,"bricks":"________ttt__tttttt_Wttt__t__t____r__r___________________WWW____","color":""},{"name":"icon:passive_income","size":8,"bricks":"__________tttt____tttt_______________W___________________rWWWr__","color":""},{"name":"icon:clairvoyant","size":9,"bricks":"__y___y__y__y_y__y_y__t__y____ttt_____tWWWt___tWWgWWt_tttWWWttt__________________","color":""},{"name":"icon:implosions","size":8,"bricks":"y______W__ryW_W__yr_WW____r_WWWy_WWW_rr___WW_rrryW_Wy___W_____y_","color":""},{"name":"icon:corner_shot","size":9,"bricks":"___W____y___W_y______W___y____W_y______W___y____W______W_W_WWW_WW_W_WWWWWW_W_WWWW","color":""},{"name":"icon:premium","size":11,"bricks":"__g____g___g____g____g_g__gbg__g______g______gg_gbg_gg_gbbgbbbgbbggbbgbbbgbbg_gbgbbbgbg___ggggggg____ggggggg_____________","color":""},{"name":"icon:reroll","size":8,"bricks":"__llllll_llBlBlelllllleBWWWWWeeeWBWBWeBeWWWWWeeeWBWBWBe_WWWWWe__","color":""},{"name":"icon:loop","size":7,"bricks":"bbbbbbbtttttt_aaaaa__cccc___CCC____GG_____y______","color":""},{"name":"icon:addiction","size":9,"bricks":"__________________________l__WWWWW_lWWWyylllly_WWWWW_ly_______l__________________","color":""},{"name":"icon:help","size":8,"bricks":"___bb_____bbbb___bb__bb__bb__bb_____bb_____bb______________bb___","color":""},{"name":"Pingwin","size":13,"bricks":"______gggg________ggWWgg_______gWWgWgy______ggWWWg_______ggggg_______gggWWW______gggggWWW___gggggggWWW____ggggggWWW_____ggggWWWW____gggWWWWW______ggWWWW________gWWyyy___","color":"#3584e4","credit":"https://prohama.com/pingwin-2-pattern/"},{"name":"Dog 8","size":17,"bricks":"_____________________________________gg_ggggg_gg____ggWWgWWWWWgWWgg__gWWgWWWWWWWgWWg__gWWgWWWWWWWgWWg__gggWWWWWWWWWggg___gWggWWWWWggWg____gWggWWWWWggWg____gWWWWgggWWWWg_____gWgWWgWWgWg______gWWggsggWWg_______gWgsssgWg_________ggsssgg____________ggg_________________________________________","color":"#62a0ea","credit":"https://prohama.com/dog-8-pattern/"},{"name":"Sunglasses","size":24,"bricks":"____________________________________________________ggggg______ggggg_______gg___g______g___gg_____gg________________gg___gg__________________gg_gggggggggg____gggggggggggggtttttggggggggbbbbbgggggtWWWttttggggbbbbWWWbgg_gtWttttttggggbbbbWbbbg__gtttttttgg__ggbbbbbbbg__gtttttttg____gbbbbbbbg__ggtttttgg____ggbbbbbgg___ggtttgg______ggbbbgg_____ggggg________ggggg___________________________________________________________________________________________________________________________________________________________________________________________________________________________","color":"#26a269","credit":"https://prohama.com/sunglasses-pattern-1/"},{"name":"Balloon","size":21,"bricks":"_____bbbWbbbWbbb_________PWbWPWbWPWbWP_______bWbbbWbbbWbbbWb_____WbbbWbbbWbbbWbbbW___WPWbWPWbWPWbWPWbWPW__bWbbbWbbbWbbbWbbbWb__bbbPbbbPbbbPbbbPbbb__bbPPPbPPPbPPPbPPPbb___PPWPPPWPPPWPPPWPP____PWbWPWbWPWbWPWbWP_____PWPPPWPPPWPPPWP_______PPWPPPWPPPWPP_________WbWPWbWPWbW___________bbbbbbbbb_____________b_____b______________b_____b______________b_____b______________WWWWWWW_______________PPPPP________________PPPPP________________PPPPP________","color":"#240a8b","credit":"https://prohama.com/balloon-1/"},{"name":"Opening","size":14,"bricks":"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbyyyyyyyyyyyybbyB___BB___Bybby__________ybbyyy______yyybbbbyyB__Byybbbbbbbyy__yybbbbbbbbby__ybbbbbyyyyby__ybyyyy___yby__yby______yby__yby______yBy__yBy______yyy__yyy___","color":"#000000"},{"name":"Stripes","size":17,"bricks":"bbb______tttttt________tttttt________tttttt______bbtttttt______bbbbbttt______bbbbbb________bbbbbb________bbbbbb______ttbbbbbb______tttttbbb______tttttt________tttttt________tttttt______bbtttttt______bbbbbttt______bbbbbb________bbbbbb________bbbbbb________bbbbbb___________bbb______________","color":""},{"name":"icon:starting_perks","size":8,"bricks":"_________b_b_b___________g_g_g_g_________g_g_g_g_________g_g_g_g","color":""},{"name":"icon:download","size":8,"bricks":"___bb______bb______bb______bb______bb____bbbbbb___bbbb__gggbbggg","color":""},{"name":"icon:upload","size":8,"bricks":"gggbbggg__bbbb___bbbbbb____bb______bb______bb______bb______bb___","color":""},{"name":"icon:coins","size":8,"bricks":"__bbbb___bbggbb_bbggggbbbggggggbbggggggbbbggggbb_bbggbb___bbbb__","color":""},{"name":"icon:reset","size":8,"bricks":"bb____bbbbb__bbb_bbbbbb___bbbb____bbbb___bbbbbb_bbb__bbbbb____bb","color":""},{"name":"icon:fountain_toss","size":12,"bricks":"__________________________________________________WWWWWWWW___WttttttttW_WtytttytyttWWtttyttttttWlWtyttttytWl_lWWWWWWWWl___llllllll______________","color":""},{"name":"You are here","size":13,"bricks":"_____rrr_________rrrrr_______rrr_rrr______rr___rr______rr___rr_______rr_rr________rrrrr_________rrr__________rrr_________WWrWW_______WWWrWWW______WWWWWWW_______WWWWW____","color":""},{"name":"Gear","size":13,"bricks":"_________________l_l_l______l_lllll_l_____lllllll____lllll_lllll___lll___lll___lll_____lll___lll___lll___lllll_lllll____lllllll_____l_lllll_l______l_l_l_________________","color":""},{"name":"Play","size":15,"bricks":"_________________rrrrrrrrrrr___rrrrWWrrrrrrr__rrrrWWWrrrrrr__rrrrWWWWrrrrr__rrrrWWWWWrrrr__rrrrWWWWWWrrr__rrrrWWWWWrrrr__rrrrWWWWrrrrr__rrrrWWWrrrrrr__rrrrWWrrrrrrr___rrrrrrrrrrr_______________________________________________","color":""},{"name":"City","size":18,"bricks":"_______yyy___bbbbb________yyy__ybyyb________yyy__ybyyb__tt___yyy_b_ybbbb_tttt______bbbbbbbtttttt_______ybyybbbbbbb_______ybyybbyybyb_____b_ybbbbbyybyb_____bbbbbbbbbbbbb__bb___bbbbbbybyyb_bbbb__ybyybbybyybbbbbbb_ybyybbbbbbbtttttt_ybbbbbyybybtyyyyt_bbbbbbyybybtyyyyt_bbbbbbbbbbbtttttt_byybybybyybtytyyt_byybybybyybtttttt_byybb","color":""},{"name":"Wiggle","size":17,"bricks":"__________________cccccc_ccc_cccc__c____c_c_c_c__c__ccc_cc_c_ccc_cc____c_c__c_____c___ccc_cccc_ccc_cc__c________c_c__c__ccc_ccc_cc_cccc____c_c_c_c________ccc_c_c_ccccccc__c___c_________c__ccc_ccccccccccc____c______________ccc_ccc_ccc_ccc__c___c_c_c_c_c_c__ccccc_ccc_ccc_c__________________","color":""},{"name":"Graph","size":18,"bricks":"_______________________yy________________yyt__yytttt______tt_tttyy___t____yyt____t_____t____yy____tt_____t____t_____t______yy___t_____t______yy__tt_____yytttttt___tt___ttyy_____t___t____t__t_____t___yytttt__t_____t___yy______tt____t____t_______yy___t____ttt_____yyttyy______tyy___t___yy_______yytttt_________________________","color":""},{"name":"Lightbulb","size":14,"bricks":"_______________y__yyyyy___y____yyyyyyy______yyyyyyyyy_____yyyyyyyyy___y_yyyyyyyyy__y__yyyyyyyyy_____yyyyyyyyy_____yyyBBByyy___y__yyByByy___y____yByBy_________lllll______y___lll___y_______lll______","color":""},{"name":"Note","size":16,"bricks":"_____________WWW__________WWWWWW_______WWWWWW__W____WWWWWW_____W____WWW________W____W__________W____W__________W____W__________W____W__________W____W________WWW____W_______WWWW____W_______WWW___WWW____________WWWW____________WWW____________________________","color":""},{"name":"Rocket","size":13,"bricks":"______b___________bbb_________bbBbb________btttb________ttBtt________ttttt________ttBtt________ttttt________ttBtt_______bbtttbb_____bbbyyybbb____bbbyyybbb____bb_ByB_bb__","color":""},{"name":"Abstract","size":16,"bricks":"________________aaaaa_cccc_aaaaaaaaaa_cccc_aaaaa________________aaaa_cccc_aaaaaaaaaa_cccc_aaaaaa________________aaa_cccc_aaaaaaaaaa_cccc_aaaaaaa________________aa_cccc_aaaaaaaaaa_cccc_aaaaaaaa________________a_cccc_aaaaaaaaaa_cccc_aaaaaaaaa________________","color":""},{"name":"Fingerprint","size":15,"bricks":"___SSSSSSSS______S_______SS____S__SSSSS__SS__S__S____SS__S____S__SS__SS_S___S__S_SS__S__S_S__S___SS_SS__SS_S_____S___S__S_S__SS__S__SS_S_S_SS_S__S__S_S_S_S___S_S__S_S_S_S___S_S__S___S_S___S_S__S__S__S___S_S__S__S__S__S___S_S_","color":""},{"name":"Leaf","size":14,"bricks":"____________________________________________________________GGkGG________GGkGGkGG_____GGkGGkGGkkG_kkkkkkkkkkkGGG__GGkGGkGGkkG____GGkGGkGG_______GGkGG_______________________________________________","color":""},{"name":"Abstract 2","size":14,"bricks":"______________yyyy______yyyy______________bbb_bbbbbb_bbbbb___bbbb___bbb__y__bb__y__b______________bbb_bbbbbb_bbbbb___bbbb___bbb__y__bb__y__b______________bbb_bbbbbb_bbbbb___bbbb___bbb__y__bb__y__b","color":""},{"name":"Abstract 3","size":13,"bricks":"______________p_aaa_ppp_a__p___a_p___a__ppp_a_p_aaa_______________aaa_p_a_ppp__a___p_a___p__a_ppp_aaa_p_______________p_aaa_ppp_a__p___a_p___a__ppp_a_p_aaa______________","color":""},{"name":"Abstract 4","size":13,"bricks":"______________y_y_y_y_y_y__y_y_y_y_y_y__y_y_y_y_y_y_______________bbb_bbb_bbb_______________bbb_bbb_bbb_______________y_y_y_y_y_y__y_y_y_y_y_y__y_y_y_y_y_y______________","color":""},{"name":"Abstract 5","size":13,"bricks":"______________ccc_ccc_ccc__c_a_c_c_a_c__caa_aaa_aac_______________cca_aaa_acc__c_a_a_a_a_c__cca_aaa_acc_______________caa_aaa_aac__c_a_c_c_a_c__ccc_ccc_ccc______________","color":""},{"name":"Abstract 6","size":13,"bricks":"_vvvvv_vvvvv__v___v_v___v__v_bbbbbbb_v__v_b_v_v_b_v__v_b_v_v_b_v__v_b_v_v_b_v__v_b_v_v_b_v__v_b_v_v_b_v__v_b_v_v_b_v__v_b_vvv_b_v__v_b_____b_v__vvvvvvvvvvv_bbbb_____bbbb","color":""},{"name":"icon:new_run","size":7,"bricks":"_ggg____gbgg___gbbgg__gbbbg__gbbgg__gbgg___ggg___","color":""},{"name":"icon:unlocks","size":6,"bricks":"_bbbb__b__b__b__b_gggggggggggggggggg","color":""},{"name":"icon:settings","size":9,"bricks":"___g_g____g_ggg_g___ggbgg__gggbbbggg_gbb_bbg_gggbbbggg__ggbgg___g_ggg_g____g_g___","color":""},{"name":"icon:creative","size":7,"bricks":"bbg_bgg_______bbb_bgg_______bgg_bbg_______bbg_bbb","color":""},{"name":"icon:limitless","size":12,"bricks":"_________________________bbb____ttb_bbbbb__tttbbbb_bbbttt_bbbb__bbbt__bbbb_ttbbb__bbttttttbbbbbb_ttt___bbbb_____________________________________","color":""},{"name":"icon:history","size":8,"bricks":"__gggg___ggbggg_gggbgggggggbggggggggbbgggggggggg_gggggg___gggg__","color":""},{"name":"Hemiola","size":11,"bricks":"___gggg_____gggrrgg_____ggrrg_______gggg_____gggyygg_____ggyyg_______gggg_____gggCCgg_____ggCCg_______gggg________gg_____","color":"#240a8b","credit":"Left a wonderful review on the play store."},{"name":"Obigre","size":13,"bricks":"_______________________________________OOOORgRgRgOOOOWOORgRgRgOOOOOWORgRgRgOWOOWOORgRgRgOOWOOWORgRgRgOWOOWOORgRgRgOOOOOOORgRgRgOOO_______________________________________","color":"#62a0ea","credit":"Colin helped a lot with the game design https://colin-crapahute.bearblog.dev/"},{"name":"Noodlemire","size":15,"bricks":"_________________________________ggggggggg_____g_________g___g___________g_g_____________gg_____________gg_____yyy_____ggg__yyyyyyy__ggggtyyyyyyyyytggggtttttttttttgggg_ttttttttt_gg_____ttttt___________________________________","color":"#240a8b","credit":"Early adopter of the game"},{"name":"Bearded axe","size":12,"bricks":"______________WyyyOOy_____WyyyOOy_____Wyy_OO______Wyy_OO______Wyy_OO__________OO__________OO__________OO__________OO__________OO__________OO____","color":"","credit":"Did some nice bug reports"},{"name":"icon:minefield","size":7,"bricks":"W__B__WWWBBBWWB__W__BBBWWWBBW__B__WWWBBBWW_______","color":""},{"name":"icon:side_flip","size":7,"bricks":"________ttttt__rttty__rttty__rttty__ttttt________","color":""},{"name":"icon:side_kick","size":7,"bricks":"________ttttt__ytttr__ytttr__ytttr__ttttt________","color":""},{"name":"Lebanon","size":9,"bricks":"_________rrrrrrrrrWWWWkWWWWWWWkkkWWWWWkkkkkWWWWWWkWWWWrrrrrrrrr__________________","color":""},{"name":"Spain","size":9,"bricks":"_________rrrrrrrrryyyyyyyyyyWrWyyyyyyrWryyyyyyWrWyyyyyyyyyyyyyyrrrrrrrrr_________","color":""},{"name":"Uzbekistan","size":8,"bricks":"tWtttWttWtttWttttWtWtWttWWWWWWWWWWWWWWWWGGGGGGGGGGGGGGGGGGGGGGGG","color":""},{"name":"Pakistan","size":8,"bricks":"________WWkkkkkkWWkkWkWkWWkWkkkkWWkWkkWkWWkkWWkkWWkkkkkk________","color":""},{"name":"Korea","size":10,"bricks":"__________WWWWWWWWWWWgWWWWWWgWWgWrrrrWgWWWWrrbbWWWWWWrrbbWWWWgWbbbbWgWWgWWWWWWgWWWWWWWWWWW__________","color":"#62a0ea"},{"name":"icon:trickledown","size":8,"bricks":"_ytttttt_________y_y_y__tttttt____________y_y_y___tttttt_y______","color":""},{"name":"icon:transparency","size":9,"bricks":"__W_W_W___________W_W_W_W_W_________W_W_W_W_W_________W_W_W_W_W___________W_W_W__","color":""},{"name":"icon:superhot","size":11,"bricks":"____________________________________________W_W_WWW_WWWWWW_W_W__W_W_W_WWW__W_____________________________________________","color":""},{"name":"icon:bricks_attract_coins","size":7,"bricks":"_y__y___tttttyyttttt__ttttt_yttttty_ttttt___y__y_","color":""},{"name":"icon:rainbow","size":6,"bricks":"__rOyC_rOyCa_rOyCarOyCatrOyCatrOyCat","color":""},{"name":"icon:hypnosis","size":8,"bricks":"WrrrrrrrWrWWWWWrWrWrrrWrWrWrWrWrWrWWWrWrWrrrrrWrWWWWWWWrrrrrrrrr","color":""},{"name":"icon:bricks_attract_ball","size":8,"bricks":"llW_____ll_v________p________bll____t_ll___G____lly_____ll_r____","color":""},{"name":"Chile","size":9,"bricks":"_________tttWWWWWWtWtWWWWWWtttWWWWWWrrrrrrrrrrrrrrrrrrrrrrrrrrr__________________","color":""},{"name":"T\xfcrkiye","size":12,"bricks":"____________rrrrrrrrrrrrrrrWWWrrrrrrrrWWrrrrrrrrrWWrrWrWrrrrrWWrrrWrrrrrrWWrrWrWrrrrrrWWrrrrrrrrrrrWWWrrrrrrrrrrrrrrrrrr________________________","color":""},{"name":"icon:editor","size":10,"bricks":"_______ggg______gggg_____ggggg____ggggg____ggggg____ggggg____ggggg____bgggg_____bbgg______bbb_______","color":""},{"color":"","size":11,"bricks":"_____e________WWWWW_____WWWWWWW____WWWWWWW____WWWWWWW__W__lllll__WWWeeeeeeeWWeeeeeWeeeeeeleeWWWeeleeeeWWWWWeeeeleWWlWWele","name":"Taj Mahal","credit":"An approximative reproduction "},{"color":"","size":9,"bricks":"__________SS_t_SS__S_____S____t_t____t_____t____t_t____S_____S__SS_t_SS__________","name":"Abstract 7","credit":""},{"color":"","size":8,"bricks":"PP_vv_PP_P__v__P________vv_PP_vvv__P__v_________PP_vv_PP_P__v__P","name":"Abstract 9","credit":""},{"color":"","size":9,"bricks":"____W_____WWWWWWW__WB_W_BW__W_____W_WWW_B_WWW_W_____W__WB_W_BW__WWWWWWW_____W____","name":"Crosshair","credit":""},{"color":"","size":15,"bricks":"bbbB_ttttt_BbbbbBbb_ttBtt_bbBbb____tt_tt____bbbbb_tt_tt_bbbb_______________ttttt_b_b_tttttt_____b_b_____tt_ttt_b_b_ttt_ttBtBt_bBb_tBtBtttt_t_bbb_t_ttt________________bb_ttttttt_bb__Bb_tB___Bt_bB__Bb_ttt_ttt_bB_bbb_________bbb","name":"Abstract 10","credit":""},{"color":"","size":6,"bricks":"SSSSSSSOOOOSSBOOBSSOOOOSSOOOOS_OSSO_","name":"Face","credit":""},{"color":"","size":11,"bricks":"_____O__________O__________O__________O_________OOO________OOO____k___O_O___kkk_OO_OO_kkkkkOOOOOkkkkkOOO_OOOkkkOOO___OOOk","name":"Eiffel tower","credit":""},{"color":"","size":9,"bricks":"P_t_s_t_PP_t___t_PP_ttttt_PP_______PPPPPPPPPPP_______PP_sssss_PP_s___s_PP_s_t_s_P","name":"Abstract 11","credit":""},{"color":"","size":8,"bricks":"BbBb____bbbb____BbBb____bbbb________tBtB____tttt____tBtB____tttt","name":"Abstract 12","credit":""},{"color":"","size":9,"bricks":"SSSSbSSSSSbbSbSbbSSbbS_SbbSSSSS_SSSSbb_____bbSSSS_SSSSSbbS_SbbSSbbSbSbbSSSSSbSSSS","name":"Abstract 13","credit":""},{"color":"","size":11,"bricks":"aa_tt_aa_ttaa_tt_aa_tt__B__B__B__bb_aa_bb_aabb_aa_bb_aa__B__B__B__aa_bb_tt_bbaa_bb_tt_bb__B__B__B__tt_aa_bb_aatt_aa_bb_aa","name":"Abstract 14","credit":""},{"color":"","size":10,"bricks":"___________Oyyyyyyy__Oyyyyyyy__Oyy__Oyy__Oyy_______Oyyyyyyy_______Oyy__Oyy__Oyy__Oyyyyyyy__Oyyyyyyy_","name":"S","credit":""},{"color":"","size":11,"bricks":"____________S_vvv_SSS__S___v___S__SSS_vvv_S__________S__S_vvv_SSS__S___v______SSS_vvv_S____S_____S__v_SSS_SSS____________","name":"Abstract 15","credit":"Just random strokes"},{"color":"","size":11,"bricks":"________________________RRRRR_____RRRRRRRRR__kkkOOkO___kOkOOOkOOO_kOkkOOOkOOOkkOOOOkkkk___OOOOOOO________________________","name":"Mario!","credit":"Suggested by Nicolas03. A Mario level ! Sprite taken from https://art.pixilart.com/sr2d5c0683c82aws3.png . The sprite belongs to Nintendo"},{"color":"","size":16,"bricks":"___llltCCttBC______lllCBBttCB______lttbBbtltt______ltBrBClttt______lttCCCttBt______llttCBtttt______ltCBCttlll______ltBCCtCtCt______lttCCBCBrB______llltBCCtrB______ttttttlltt______CBrttlllll______CBrBCttttl______ttCCBttBtl______tttCCCtCCt______tBttBtltBt___","name":"Minesweeper","credit":"Suggested by Noodlemire. For once, you\'ll want to trigger as many mines as possible."},{"color":"","size":19,"bricks":"__________________________________________________________________________________________________________________________WWW_______________WrrrW_____________WrWWWrW____________WrWBWrW____________WrWWWrW_____________WrrrW_______________WWW__________________________________________________________________________________________________________________________","name":"Target","credit":"Suggested by Noodlemire. Unusually small level, with lots of room to miss your shots. Acts as decent aim practice."},{"color":"","size":10,"bricks":"__________rrrrr_____WWrWWrrrrrWWrWWWWrWWWWrWWWWrWWrWrWWWWrWWWrWWWrWrWW_____WrWWW____________________","name":"The Boys","credit":"Suggested by Bearded-Axe. My boys initals"},{"color":"#115988","size":21,"bricks":"__________________________________________________yy_______________yy__yy__yy___________yy__yy__yy____________yy__yy_yy_________y__yy__yy_yy________yyy_yyy_yy_yy_________yy__yy_yyyyy__________yy_yyyyyyyy___yyy____yyyyygggyyy__yyy______yyygBBBgyy_yyy________ygBBBBBgyyyy_________ygBBBBBgyyy__________yygBBBgyyyy___________yygBgyyyy____________yyyByyyy_____________yyyyByy_______________yyByy_________________r_________________________________","name":"A Very Dangerous High-Five","credit":"Suggested by Noodlemire. A unique shape, fun to bounce the ball between fingers. The palm was initially boring on its own, so I gave it a big bomb. It adds a distinct feeling between the top and bottom halves."}]');
},{}],"iyP6E":[function(require,module,exports,__globalThis) {
module.exports = JSON.parse("\"29085612\"");
},{}],"1u3Dx":[function(require,module,exports,__globalThis) {
var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js");
parcelHelpers.defineInteropFlag(exports);
parcelHelpers.export(exports, "noCreative", ()=>noCreative);
parcelHelpers.export(exports, "notStartingPerk", ()=>notStartingPerk);
parcelHelpers.export(exports, "rawUpgrades", ()=>rawUpgrades);
var _i18N = require("./i18n/i18n");
var _pureFunctions = require("./pure_functions");
const noCreative = [
"extra_levels",
"shunt",
"one_more_choice",
"instant_upgrade"
];
const notStartingPerk = [
"instant_upgrade"
];
const rawUpgrades = [
{
requires: "",
threshold: 0,
gift: false,
id: "extra_life",
max: 7,
name: (0, _i18N.t)("upgrades.extra_life.name"),
help: (lvl)=>lvl === 1 ? (0, _i18N.t)("upgrades.extra_life.tooltip") : (0, _i18N.t)("upgrades.extra_life.help_plural", {
lvl
}),
fullHelp: (0, _i18N.t)("upgrades.extra_life.verbose_description")
},
{
requires: "",
threshold: 0,
id: "base_combo",
gift: true,
max: 7,
name: (0, _i18N.t)("upgrades.base_combo.name"),
help: (lvl)=>(0, _i18N.t)("upgrades.base_combo.tooltip", {
coins: 1 + lvl * 3
}),
fullHelp: (0, _i18N.t)("upgrades.base_combo.verbose_description")
},
{
requires: "",
threshold: 0,
gift: false,
id: "slow_down",
max: 2,
name: (0, _i18N.t)("upgrades.slow_down.name"),
help: (lvl)=>(0, _i18N.t)("upgrades.slow_down.tooltip", {
lvl
}),
fullHelp: (0, _i18N.t)("upgrades.slow_down.verbose_description")
},
{
requires: "",
threshold: 0,
gift: false,
id: "bigger_puck",
max: 2,
name: (0, _i18N.t)("upgrades.bigger_puck.name"),
help: ()=>(0, _i18N.t)("upgrades.bigger_puck.tooltip"),
fullHelp: (0, _i18N.t)("upgrades.bigger_puck.verbose_description")
},
{
requires: "",
threshold: 0,
gift: false,
id: "viscosity",
max: 3,
name: (0, _i18N.t)("upgrades.viscosity.name"),
help: ()=>(0, _i18N.t)("upgrades.viscosity.tooltip"),
fullHelp: (0, _i18N.t)("upgrades.viscosity.verbose_description")
},
{
requires: "",
threshold: 50,
gift: false,
id: "skip_last",
max: 7,
name: (0, _i18N.t)("upgrades.skip_last.name"),
help: (lvl)=>lvl == 1 ? (0, _i18N.t)("upgrades.skip_last.tooltip") : (0, _i18N.t)("upgrades.skip_last.help_plural", {
lvl
}),
fullHelp: (0, _i18N.t)("upgrades.skip_last.verbose_description")
},
{
requires: "",
threshold: 100,
id: "streak_shots",
gift: true,
max: 1,
name: (0, _i18N.t)("upgrades.streak_shots.name"),
help: (lvl)=>(0, _i18N.t)("upgrades.streak_shots.tooltip", {
lvl
}),
fullHelp: (0, _i18N.t)("upgrades.streak_shots.verbose_description")
},
{
requires: "",
threshold: 200,
id: "left_is_lava",
gift: true,
max: 1,
name: (0, _i18N.t)("upgrades.left_is_lava.name"),
help: (lvl)=>(0, _i18N.t)("upgrades.left_is_lava.tooltip", {
lvl
}),
fullHelp: (0, _i18N.t)("upgrades.left_is_lava.verbose_description")
},
{
requires: "",
threshold: 300,
id: "right_is_lava",
gift: true,
max: 1,
name: (0, _i18N.t)("upgrades.right_is_lava.name"),
help: (lvl)=>(0, _i18N.t)("upgrades.right_is_lava.tooltip", {
lvl
}),
fullHelp: (0, _i18N.t)("upgrades.right_is_lava.verbose_description")
},
{
requires: "",
threshold: 400,
id: "top_is_lava",
gift: true,
max: 1,
name: (0, _i18N.t)("upgrades.top_is_lava.name"),
help: (lvl)=>(0, _i18N.t)("upgrades.top_is_lava.tooltip", {
lvl
}),
fullHelp: (0, _i18N.t)("upgrades.top_is_lava.verbose_description")
},
{
requires: "",
threshold: 500,
id: "telekinesis",
gift: true,
max: 1,
name: (0, _i18N.t)("upgrades.telekinesis.name"),
help: (lvl)=>lvl == 1 ? (0, _i18N.t)("upgrades.telekinesis.tooltip") : (0, _i18N.t)("upgrades.telekinesis.help_plural"),
fullHelp: (0, _i18N.t)("upgrades.telekinesis.verbose_description")
},
{
requires: "",
threshold: 700,
gift: false,
id: "coin_magnet",
max: 3,
name: (0, _i18N.t)("upgrades.coin_magnet.name"),
help: (lvl)=>lvl == 1 ? (0, _i18N.t)("upgrades.coin_magnet.tooltip") : (0, _i18N.t)("upgrades.coin_magnet.help_plural"),
fullHelp: (0, _i18N.t)("upgrades.coin_magnet.verbose_description")
},
{
requires: "",
threshold: 800,
id: "multiball",
gift: true,
max: 6,
name: (0, _i18N.t)("upgrades.multiball.name"),
help: (lvl)=>(0, _i18N.t)("upgrades.multiball.tooltip", {
count: lvl + 1
}),
fullHelp: (0, _i18N.t)("upgrades.multiball.verbose_description")
},
{
requires: "",
threshold: 1000,
gift: false,
id: "smaller_puck",
max: 2,
name: (0, _i18N.t)("upgrades.smaller_puck.name"),
help: (lvl)=>lvl == 1 ? (0, _i18N.t)("upgrades.smaller_puck.tooltip") : (0, _i18N.t)("upgrades.smaller_puck.help_plural"),
fullHelp: (0, _i18N.t)("upgrades.smaller_puck.verbose_description")
},
{
requires: "",
threshold: 1500,
id: "pierce",
gift: false,
max: 3,
name: (0, _i18N.t)("upgrades.pierce.name"),
help: (lvl)=>(0, _i18N.t)("upgrades.pierce.tooltip", {
count: 3 * lvl
}),
fullHelp: (0, _i18N.t)("upgrades.pierce.verbose_description")
},
{
requires: "",
threshold: 2000,
id: "picky_eater",
gift: true,
max: 1,
name: (0, _i18N.t)("upgrades.picky_eater.name"),
help: (lvl)=>(0, _i18N.t)("upgrades.picky_eater.tooltip", {
lvl
}),
fullHelp: (0, _i18N.t)("upgrades.picky_eater.verbose_description")
},
{
requires: "",
threshold: 2500,
gift: false,
id: "metamorphosis",
max: 1,
name: (0, _i18N.t)("upgrades.metamorphosis.name"),
help: (lvl)=>(0, _i18N.t)("upgrades.metamorphosis.tooltip", {
lvl
}),
fullHelp: (0, _i18N.t)("upgrades.metamorphosis.verbose_description")
},
{
requires: "",
threshold: 3000,
id: "compound_interest",
gift: true,
max: 1,
name: (0, _i18N.t)("upgrades.compound_interest.name"),
help: (lvl)=>(0, _i18N.t)("upgrades.compound_interest.tooltip", {
lvl
}),
fullHelp: (0, _i18N.t)("upgrades.compound_interest.verbose_description")
},
{
requires: "",
threshold: 4000,
id: "hot_start",
gift: true,
max: 3,
name: (0, _i18N.t)("upgrades.hot_start.name"),
help: (lvl)=>(0, _i18N.t)("upgrades.hot_start.tooltip", {
start: lvl * 30 + 1,
loss: lvl
}),
fullHelp: (0, _i18N.t)("upgrades.hot_start.verbose_description")
},
{
requires: "",
threshold: 6000,
id: "sapper",
gift: false,
max: 7,
name: (0, _i18N.t)("upgrades.sapper.name"),
help: (lvl)=>lvl == 1 ? (0, _i18N.t)("upgrades.sapper.tooltip") : (0, _i18N.t)("upgrades.sapper.help_plural", {
lvl
}),
fullHelp: (0, _i18N.t)("upgrades.sapper.verbose_description")
},
{
requires: "",
threshold: 9000,
id: "bigger_explosions",
gift: false,
max: 1,
name: (0, _i18N.t)("upgrades.bigger_explosions.name"),
help: (lvl)=>(0, _i18N.t)("upgrades.bigger_explosions.tooltip"),
fullHelp: (0, _i18N.t)("upgrades.bigger_explosions.verbose_description")
},
{
requires: "",
threshold: 13000,
gift: false,
adventure: false,
id: "extra_levels",
max: 3,
name: (0, _i18N.t)("upgrades.extra_levels.name"),
help: (lvl)=>(0, _i18N.t)("upgrades.extra_levels.tooltip", {
count: lvl + 7
}),
fullHelp: (0, _i18N.t)("upgrades.extra_levels.verbose_description")
},
{
requires: "",
threshold: 15000,
gift: false,
id: "pierce_color",
max: 4,
name: (0, _i18N.t)("upgrades.pierce_color.name"),
help: (lvl)=>(0, _i18N.t)("upgrades.pierce_color.tooltip", {
lvl
}),
fullHelp: (0, _i18N.t)("upgrades.pierce_color.verbose_description")
},
{
requires: "",
threshold: 18000,
gift: false,
id: "soft_reset",
max: 3,
name: (0, _i18N.t)("upgrades.soft_reset.name"),
help: (lvl)=>(0, _i18N.t)("upgrades.soft_reset.tooltip", {
percent: Math.round((0, _pureFunctions.comboKeepingRate)(lvl) * 100)
}),
fullHelp: (0, _i18N.t)("upgrades.soft_reset.verbose_description")
},
{
requires: "multiball",
threshold: 21000,
gift: false,
id: "ball_repulse_ball",
max: 3,
name: (0, _i18N.t)("upgrades.ball_repulse_ball.name"),
help: (lvl)=>lvl == 1 ? (0, _i18N.t)("upgrades.ball_repulse_ball.tooltip") : (0, _i18N.t)("upgrades.ball_repulse_ball.help_plural"),
fullHelp: (0, _i18N.t)("upgrades.ball_repulse_ball.verbose_description")
},
{
requires: "multiball",
threshold: 25000,
gift: false,
id: "ball_attract_ball",
max: 3,
name: (0, _i18N.t)("upgrades.ball_attract_ball.name"),
help: (lvl)=>lvl == 1 ? (0, _i18N.t)("upgrades.ball_attract_ball.tooltip") : (0, _i18N.t)("upgrades.ball_attract_ball.help_plural"),
fullHelp: (0, _i18N.t)("upgrades.ball_attract_ball.verbose_description")
},
{
requires: "",
threshold: 30000,
gift: false,
id: "puck_repulse_ball",
max: 2,
name: (0, _i18N.t)("upgrades.puck_repulse_ball.name"),
help: (lvl)=>lvl == 1 ? (0, _i18N.t)("upgrades.puck_repulse_ball.tooltip") : (0, _i18N.t)("upgrades.puck_repulse_ball.help_plural"),
fullHelp: (0, _i18N.t)("upgrades.puck_repulse_ball.verbose_description")
},
{
requires: "",
threshold: 35000,
gift: false,
id: "wind",
max: 3,
name: (0, _i18N.t)("upgrades.wind.name"),
help: (lvl)=>lvl == 1 ? (0, _i18N.t)("upgrades.wind.tooltip") : (0, _i18N.t)("upgrades.wind.help_plural"),
fullHelp: (0, _i18N.t)("upgrades.wind.verbose_description")
},
{
requires: "",
threshold: 40000,
gift: false,
id: "sturdy_bricks",
max: 4,
name: (0, _i18N.t)("upgrades.sturdy_bricks.name"),
help: (lvl)=>// lvl == 1
(0, _i18N.t)("upgrades.sturdy_bricks.tooltip", {
lvl,
percent: lvl * 50
}),
// ?
// : t("upgrades.sturdy_bricks.help_plural"),
fullHelp: (0, _i18N.t)("upgrades.sturdy_bricks.verbose_description")
},
{
requires: "",
threshold: 45000,
gift: false,
id: "respawn",
max: 4,
name: (0, _i18N.t)("upgrades.respawn.name"),
help: (lvl)=>(0, _i18N.t)("upgrades.respawn.tooltip", {
percent: Math.floor(100 * (0, _pureFunctions.comboKeepingRate)(lvl)),
delay: (3 / lvl).toFixed(2)
}),
fullHelp: (0, _i18N.t)("upgrades.respawn.verbose_description")
},
{
requires: "",
threshold: 50000,
gift: false,
id: "one_more_choice",
max: 3,
name: (0, _i18N.t)("upgrades.one_more_choice.name"),
help: (lvl)=>(0, _i18N.t)("upgrades.one_more_choice.tooltip", {
lvl
}),
fullHelp: (0, _i18N.t)("upgrades.one_more_choice.verbose_description")
},
{
requires: "",
threshold: 55000,
gift: false,
id: "instant_upgrade",
max: 2,
adventure: false,
name: (0, _i18N.t)("upgrades.instant_upgrade.name"),
help: (lvl)=>(0, _i18N.t)("upgrades.instant_upgrade.tooltip", {
lvl
}),
fullHelp: (0, _i18N.t)("upgrades.instant_upgrade.verbose_description")
},
{
requires: "",
threshold: 60000,
gift: false,
id: "concave_puck",
max: 1,
name: (0, _i18N.t)("upgrades.concave_puck.name"),
help: (lvl)=>(0, _i18N.t)("upgrades.concave_puck.tooltip"),
fullHelp: (0, _i18N.t)("upgrades.concave_puck.verbose_description")
},
{
requires: "",
threshold: 65000,
gift: false,
id: "helium",
max: 1,
name: (0, _i18N.t)("upgrades.helium.name"),
help: (lvl)=>(0, _i18N.t)("upgrades.helium.tooltip"),
fullHelp: (0, _i18N.t)("upgrades.helium.verbose_description")
},
{
requires: "",
threshold: 70000,
gift: true,
id: "asceticism",
max: 1,
name: (0, _i18N.t)("upgrades.asceticism.name"),
help: (lvl)=>(0, _i18N.t)("upgrades.asceticism.tooltip", {
combo: lvl * 3
}),
fullHelp: (0, _i18N.t)("upgrades.asceticism.verbose_description")
},
{
requires: "",
threshold: 75000,
gift: false,
id: "unbounded",
max: 3,
name: (0, _i18N.t)("upgrades.unbounded.name"),
help: (lvl)=>(0, _i18N.t)("upgrades.unbounded.tooltip", {
lvl
}),
fullHelp: (0, _i18N.t)("upgrades.unbounded.verbose_description")
},
{
requires: "",
threshold: 80000,
gift: false,
id: "shunt",
max: 3,
name: (0, _i18N.t)("upgrades.shunt.name"),
help: (lvl)=>(0, _i18N.t)("upgrades.shunt.tooltip", {
percent: Math.round((0, _pureFunctions.comboKeepingRate)(lvl) * 100)
}),
fullHelp: (0, _i18N.t)("upgrades.shunt.verbose_description")
},
{
requires: "",
threshold: 85000,
gift: false,
id: "yoyo",
max: 1,
name: (0, _i18N.t)("upgrades.yoyo.name"),
help: (lvl)=>(0, _i18N.t)("upgrades.yoyo.tooltip"),
fullHelp: (0, _i18N.t)("upgrades.yoyo.verbose_description")
},
{
requires: "",
threshold: 90000,
gift: true,
id: "nbricks",
max: 3,
name: (0, _i18N.t)("upgrades.nbricks.name"),
help: (lvl)=>(0, _i18N.t)("upgrades.nbricks.tooltip", {
lvl
}),
fullHelp: (0, _i18N.t)("upgrades.nbricks.verbose_description")
},
{
requires: "",
threshold: 95000,
gift: false,
id: "etherealcoins",
max: 1,
name: (0, _i18N.t)("upgrades.etherealcoins.name"),
help: (lvl)=>(0, _i18N.t)("upgrades.etherealcoins.tooltip"),
fullHelp: (0, _i18N.t)("upgrades.etherealcoins.verbose_description")
},
{
requires: "multiball",
threshold: 100000,
gift: false,
id: "shocks",
max: 1,
name: (0, _i18N.t)("upgrades.shocks.name"),
help: (lvl)=>(0, _i18N.t)("upgrades.shocks.tooltip"),
fullHelp: (0, _i18N.t)("upgrades.shocks.verbose_description")
},
{
requires: "",
threshold: 105000,
gift: true,
id: "zen",
max: 1,
name: (0, _i18N.t)("upgrades.zen.name"),
help: (lvl)=>(0, _i18N.t)("upgrades.zen.tooltip", {
lvl
}),
fullHelp: (0, _i18N.t)("upgrades.zen.verbose_description")
},
{
requires: "extra_life",
threshold: 110000,
gift: false,
id: "sacrifice",
max: 1,
name: (0, _i18N.t)("upgrades.sacrifice.name"),
help: (lvl)=>lvl == 1 ? (0, _i18N.t)("upgrades.sacrifice.help_l1") : (0, _i18N.t)("upgrades.sacrifice.help_over", {
lvl
}),
fullHelp: (0, _i18N.t)("upgrades.sacrifice.verbose_description")
},
{
requires: "",
threshold: 115000,
gift: true,
id: "trampoline",
max: 1,
name: (0, _i18N.t)("upgrades.trampoline.name"),
help: (lvl)=>(0, _i18N.t)("upgrades.trampoline.tooltip", {
lvl
}),
fullHelp: (0, _i18N.t)("upgrades.trampoline.verbose_description")
},
{
requires: "",
threshold: 120000,
gift: false,
id: "ghost_coins",
max: 3,
name: (0, _i18N.t)("upgrades.ghost_coins.name"),
help: (lvl)=>(0, _i18N.t)("upgrades.ghost_coins.tooltip", {
lvl
}),
fullHelp: (0, _i18N.t)("upgrades.ghost_coins.verbose_description")
},
{
requires: "",
threshold: 125000,
gift: false,
id: "forgiving",
max: 1,
name: (0, _i18N.t)("upgrades.forgiving.name"),
help: (lvl)=>(0, _i18N.t)("upgrades.forgiving.tooltip"),
fullHelp: (0, _i18N.t)("upgrades.forgiving.verbose_description")
},
{
requires: "",
threshold: 130000,
gift: false,
id: "ball_attracts_coins",
max: 3,
name: (0, _i18N.t)("upgrades.ball_attracts_coins.name"),
help: (lvl)=>(0, _i18N.t)("upgrades.ball_attracts_coins.tooltip"),
fullHelp: (0, _i18N.t)("upgrades.ball_attracts_coins.verbose_description")
},
{
requires: "",
threshold: 135000,
// a bit too hard when starting up
gift: false,
id: "reach",
max: 1,
name: (0, _i18N.t)("upgrades.reach.name"),
help: (lvl)=>(0, _i18N.t)("upgrades.reach.tooltip", {
lvl
}),
fullHelp: (0, _i18N.t)("upgrades.reach.verbose_description")
},
{
requires: "",
threshold: 140000,
gift: true,
id: "passive_income",
max: 4,
name: (0, _i18N.t)("upgrades.passive_income.name"),
help: (lvl)=>(0, _i18N.t)("upgrades.passive_income.tooltip", {
time: lvl * 0.25,
lvl
}),
fullHelp: (0, _i18N.t)("upgrades.passive_income.verbose_description")
},
{
requires: "",
threshold: 145000,
gift: false,
id: "clairvoyant",
max: 1,
name: (0, _i18N.t)("upgrades.clairvoyant.name"),
help: (lvl)=>(0, _i18N.t)("upgrades.clairvoyant.tooltip"),
fullHelp: (0, _i18N.t)("upgrades.clairvoyant.verbose_description")
},
{
requires: "",
threshold: 150000,
gift: true,
id: "side_kick",
max: 3,
name: (0, _i18N.t)("upgrades.side_kick.name"),
help: (lvl)=>(0, _i18N.t)("upgrades.side_kick.tooltip", {
lvl,
loss: lvl * 2
}),
fullHelp: (0, _i18N.t)("upgrades.side_kick.verbose_description")
},
{
requires: "",
threshold: 150000,
gift: true,
id: "side_flip",
max: 3,
name: (0, _i18N.t)("upgrades.side_flip.name"),
help: (lvl)=>(0, _i18N.t)("upgrades.side_flip.tooltip", {
lvl,
loss: lvl * 2
}),
fullHelp: (0, _i18N.t)("upgrades.side_flip.verbose_description")
},
{
requires: "",
threshold: 155000,
gift: false,
id: "implosions",
max: 1,
name: (0, _i18N.t)("upgrades.implosions.name"),
help: (lvl)=>(0, _i18N.t)("upgrades.implosions.tooltip"),
fullHelp: (0, _i18N.t)("upgrades.implosions.verbose_description")
},
{
requires: "",
threshold: 160000,
gift: false,
id: "corner_shot",
max: 1,
name: (0, _i18N.t)("upgrades.corner_shot.name"),
help: (lvl)=>(0, _i18N.t)("upgrades.corner_shot.tooltip"),
fullHelp: (0, _i18N.t)("upgrades.corner_shot.verbose_description")
},
{
requires: "",
threshold: 165000,
gift: false,
id: "addiction",
max: 7,
name: (0, _i18N.t)("upgrades.addiction.name"),
help: (lvl)=>(0, _i18N.t)("upgrades.addiction.tooltip", {
lvl,
delay: (5 / lvl).toFixed(2)
}),
fullHelp: (0, _i18N.t)("upgrades.addiction.verbose_description")
},
{
requires: "",
threshold: 170000,
gift: false,
id: "fountain_toss",
max: 7,
name: (0, _i18N.t)("upgrades.fountain_toss.name"),
help: (lvl)=>(0, _i18N.t)("upgrades.fountain_toss.tooltip", {
lvl,
max: lvl * 30
}),
fullHelp: (0, _i18N.t)("upgrades.fountain_toss.verbose_description")
},
{
requires: "",
threshold: 175000,
gift: false,
id: "limitless",
max: 1,
name: (0, _i18N.t)("upgrades.limitless.name"),
help: (lvl)=>(0, _i18N.t)("upgrades.limitless.tooltip", {
lvl
}),
fullHelp: (0, _i18N.t)("upgrades.limitless.verbose_description")
},
{
requires: "",
threshold: 180000,
gift: false,
id: "minefield",
max: 3,
name: (0, _i18N.t)("upgrades.minefield.name"),
help: (lvl)=>(0, _i18N.t)("upgrades.minefield.tooltip", {
lvl
}),
fullHelp: (0, _i18N.t)("upgrades.minefield.verbose_description")
},
{
requires: "",
threshold: 185000,
gift: false,
id: "trickledown",
max: 1,
name: (0, _i18N.t)("upgrades.trickledown.name"),
help: (lvl)=>(0, _i18N.t)("upgrades.trickledown.tooltip", {
lvl
}),
fullHelp: (0, _i18N.t)("upgrades.trickledown.verbose_description")
},
{
requires: "",
threshold: 190000,
gift: false,
id: "transparency",
max: 3,
name: (0, _i18N.t)("upgrades.transparency.name"),
help: (lvl)=>(0, _i18N.t)("upgrades.transparency.tooltip", {
lvl,
percent: lvl * 50
}),
fullHelp: (0, _i18N.t)("upgrades.transparency.verbose_description")
},
{
requires: "",
threshold: 195000,
gift: false,
id: "superhot",
max: 3,
name: (0, _i18N.t)("upgrades.superhot.name"),
help: (lvl)=>(0, _i18N.t)("upgrades.superhot.tooltip", {
lvl
}),
fullHelp: (0, _i18N.t)("upgrades.superhot.verbose_description")
},
{
requires: "",
threshold: 200000,
gift: false,
id: "bricks_attract_coins",
max: 3,
name: (0, _i18N.t)("upgrades.bricks_attract_coins.name"),
help: (lvl)=>(0, _i18N.t)("upgrades.bricks_attract_coins.tooltip", {
lvl
}),
fullHelp: (0, _i18N.t)("upgrades.bricks_attract_coins.verbose_description")
},
{
requires: "",
threshold: 205000,
gift: false,
id: "rainbow",
max: 7,
name: (0, _i18N.t)("upgrades.rainbow.name"),
help: (lvl)=>(0, _i18N.t)("upgrades.rainbow.tooltip", {
lvl
}),
fullHelp: (0, _i18N.t)("upgrades.rainbow.verbose_description")
},
{
requires: "metamorphosis",
threshold: 210000,
gift: false,
id: "hypnosis",
max: 1,
name: (0, _i18N.t)("upgrades.hypnosis.name"),
help: (lvl)=>(0, _i18N.t)("upgrades.hypnosis.tooltip", {
lvl
}),
fullHelp: (0, _i18N.t)("upgrades.hypnosis.verbose_description")
},
{
requires: "",
threshold: 215000,
gift: false,
id: "bricks_attract_ball",
max: 1,
name: (0, _i18N.t)("upgrades.bricks_attract_ball.name"),
help: (lvl)=>(0, _i18N.t)("upgrades.bricks_attract_ball.tooltip", {
count: lvl * 3
}),
fullHelp: (0, _i18N.t)("upgrades.bricks_attract_ball.verbose_description")
}
];
},{"./i18n/i18n":"eNPRm","./pure_functions":"6pQh7","@parcel/transformer-js/src/esmodule-helpers.js":"gkKU3"}],"eNPRm":[function(require,module,exports,__globalThis) {
var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js");
parcelHelpers.defineInteropFlag(exports);
parcelHelpers.export(exports, "languages", ()=>languages);
parcelHelpers.export(exports, "getCurrentLang", ()=>getCurrentLang);
parcelHelpers.export(exports, "t", ()=>t);
var _enJson = require("./en.json");
var _enJsonDefault = parcelHelpers.interopDefault(_enJson);
var _frJson = require("./fr.json");
var _frJsonDefault = parcelHelpers.interopDefault(_frJson);
var _arJson = require("./ar.json");
var _arJsonDefault = parcelHelpers.interopDefault(_arJson);
var _ruJson = require("./ru.json");
var _ruJsonDefault = parcelHelpers.interopDefault(_ruJson);
var _esJson = require("./es.json");
var _esJsonDefault = parcelHelpers.interopDefault(_esJson);
var _trJson = require("./tr.json");
var _trJsonDefault = parcelHelpers.interopDefault(_trJson);
var _deJson = require("./de.json");
var _deJsonDefault = parcelHelpers.interopDefault(_deJson);
var _settings = require("../settings");
const languages = [
{
text: "English",
value: "en",
strings: (0, _enJsonDefault.default),
levelName: "UK"
},
{
text: "Fran\xe7ais",
value: "fr",
strings: (0, _frJsonDefault.default),
levelName: "France"
},
{
text: "\u0639\u0631\u0628\u064A",
value: "ar",
strings: (0, _arJsonDefault.default),
levelName: "Lebanon"
},
{
text: "Espa\xf1ol",
value: "es",
strings: (0, _esJsonDefault.default),
levelName: "Chile"
},
{
text: "\u0420\u0443\u0441\u0441\u043A\u0438\u0439",
value: "ru",
strings: (0, _ruJsonDefault.default),
levelName: "Russia"
},
{
text: "Deutsch",
value: "de",
strings: (0, _deJsonDefault.default),
levelName: "Germany"
},
{
text: "T\xfcrk\xe7e",
value: "tr",
strings: (0, _trJsonDefault.default),
levelName: "T\xfcrkiye"
}
];
const languagesMap = {};
languages.forEach((l)=>languagesMap[l.value] = l.strings);
let defaultLang = [
...navigator.languages,
navigator.language
].filter((i)=>i).map((i)=>i.slice(0, 2).toLowerCase()).find((k)=>k in languagesMap) || "en";
function getCurrentLang() {
return (0, _settings.getSettingValue)("lang", defaultLang);
}
function t(key, params = {}) {
const lang = getCurrentLang();
let template = languagesMap[lang]?.[key] || languagesMap.en[key];
for(let key in params)template = template.split("{{" + key + "}}").join(`${params[key]}`);
return template;
}
},{"./en.json":"uYc9N","./fr.json":"b97sx","./ar.json":"aDOut","./ru.json":"eedRO","./es.json":"hATkf","./tr.json":"l4sLF","./de.json":"1l6Zs","../settings":"5blfu","@parcel/transformer-js/src/esmodule-helpers.js":"gkKU3"}],"uYc9N":[function(require,module,exports,__globalThis) {
module.exports = JSON.parse("{\"confirmRestart.no\":\"Cancel\",\"confirmRestart.text\":\"You're about to start a new game. Are you sure you want to continue?\",\"confirmRestart.title\":\"Start a new game?\",\"confirmRestart.yes\":\"Restart game\",\"editor.editing.bigger\":\"Increase level size\",\"editor.editing.color\":\"Pick a color in the color list (max 5 per level)\",\"editor.editing.copy\":\"Copy level code\",\"editor.editing.copy_help\":\"Paste it in the #levels channel in our discord\",\"editor.editing.credit\":\"Credits and source\",\"editor.editing.credit_prompt\":\"Enter the source url or explanation of your level.\",\"editor.editing.delete\":\"Delete level\",\"editor.editing.down\":\"Move down all the bricks\",\"editor.editing.help\":\"Then click a tile to color it.\",\"editor.editing.left\":\"Move all bricks to the left\",\"editor.editing.play\":\"Play this level\",\"editor.editing.rename\":\"Level name\",\"editor.editing.rename_prompt\":\"Please enter a new name for the level\",\"editor.editing.right\":\"Move all bricks to the right\",\"editor.editing.smaller\":\"Decrease level size\",\"editor.editing.title\":\"Editing level : {{name}}\",\"editor.editing.up\":\"Move up all the bricks\",\"editor.help\":\"Create custom levels and share them for inclusion in the game.\",\"editor.import\":\"Import a level\",\"editor.import_instruction\":\"Paste a level code to import it in your level list\",\"editor.locked\":\"Reach a total score of {{min}} to unlock\",\"editor.new_level\":\"New level\",\"editor.title\":\"Level Editor\",\"gameOver.creative\":\"This run will not be recorded. \",\"gameOver.cumulative_total\":\"Your total cumulative score went from {{startTs}} to {{endTs}}.\",\"gameOver.lost.summary\":\"You dropped the ball after catching {{score}} coins.\",\"gameOver.lost.title\":\"Game Over\",\"gameOver.stats.balls_lost\":\"Balls lost\",\"gameOver.stats.bricks_broken\":\"Bricks broken\",\"gameOver.stats.bricks_per_minute\":\"Bricks broken per minute\",\"gameOver.stats.catch_rate\":\"Catch rate\",\"gameOver.stats.combo_avg\":\"Average combo\",\"gameOver.stats.combo_max\":\"Max combo\",\"gameOver.stats.duration_per_level\":\"Duration per level\",\"gameOver.stats.hit_rate\":\"Hit rate\",\"gameOver.stats.intro\":\"\",\"gameOver.stats.level_reached\":\"Level reached\",\"gameOver.stats.total_score\":\"Total score\",\"gameOver.stats.upgrades_applied\":\"Upgrades applied\",\"gameOver.stats_intro\":\"Find below your game statistics compared to your {{count}} best games.\",\"gameOver.unlocked_perk\":\"Upgrade unlocked\",\"gameOver.unlocked_perk_plural\":\"You just unlocked {{count}} perks\",\"gameOver.win.summary\":\"This game is over. You stashed {{score}} coins. \",\"gameOver.win.title\":\"You completed this game\",\"help.content\":\"## Goal\\n\\nCatch as many coins as possible during 7 levels. \\nCoins appear when you break bricks.\\nCatch them with your paddle to increase your score.\\nYour score is displayed in the top right corner of the screen.\\nDon't drop the ball or it's game over.\\n\\nAfter destroying all bricks, you'll get to pick an upgrade.\\n\\n## Upgrades \\n\\nThe upgrades you pick will apply until the end of the run. \\nSome can be picked multiple times for stronger effect.\\nSome help with aiming, or make the game easier in some other ways. \\nSome are only useful when combined.\\n\\nYou always get one upgrade at the beginning of each game. \\nIts icon will serve as the bricks of the first level. \\nYou can select starting upgrades in the settings.\\n\\nMany upgrades impact your combo. \\n\\n## Combo\\n\\nYour \\\"combo\\\" is the number of coins spawned when a brick breaks. \\nIt is displayed on your paddle, for example x4 means each brick will spawn 4 coins. \\nMost upgrades that increase the combo also add a condition to reset it. \\nThe combo will also reset if the ball returns to the paddle without hitting any brick.\\nA \\\"miss\\\" message will be shown when that happens. \\n\\nTry to aim towards a brick every time. \\n\\n## Aiming\\n\\nOnly the ball position on the paddle decides how it will bounce.\\nIf the ball hits the paddle dead center, it will bounce back up vertically. \\nIf you hit more on one side, it will have more angle. \\nThe paddle speed and incoming angle have no impact on the ball direction after bouncing.\\n\\nMany upgrades that help with aiming can be unlocked.\\n\\n## Unlocks\\n\\nWhen playing Breakout 71 for the first time, most upgrades and levels are locked. \\nUpgrades are unlocked by simply playing and catching many coins. \\nThe first levels are unlocked by reaching a high score.\\nLater levels add a condition about which perks you can select. \\n\\nReach high scores is much easier when you get multiple upgrades after each level. \\n\\n## Re-rolls and free upgrades\\n\\nYou'll get an extra upgrade to pick when you play well : \\n\\n- Clear the level under {{levelTimeGood}} seconds\\n- Hit the sides or top less than {{wallBouncedGood}} times\\n- Catch {{catchRateGood}}% of coins\\n- Miss the bricks less than {{missesGood}} times \\n\\nYou will also get a re-roll that lets you skip upgrades if you do even better : \\n\\n- Clear a level under {{levelTimeBest}} seconds\\n- Hit the sides or top less than {{wallBouncedBest}} times\\n- Catch {{catchRateBest}}% of coins\\n- Miss the bricks less than {{missesBest}} times \\n\\nAn option in the settings lets you display those statistics\",\"help.help\":\"Learn more about the game\",\"help.levels\":\"Levels\",\"help.title\":\"Help\",\"help.upgrades\":\"## Upgrades\",\"history.columns.score\":\"Score\",\"history.columns.started\":\"Date\",\"history.help\":\"See your {{count}} best games.\",\"history.locked\":\"Play at least ten games to unlock\",\"history.title\":\"Runs history\",\"lab.help\":\"Try any build you want\",\"lab.instructions\":\"Select upgrades below, then pick a level to play. \",\"lab.menu_entry\":\"Creative mode\",\"lab.reset\":\"Reset all to 0\",\"lab.select_level\":\"Select a level to play on\",\"lab.unlocks_at\":\"Unlocks at total score {{score}}\",\"level_up.after_buttons\":\"You just finished level {{level}}/{{max}}.\",\"level_up.before_buttons\":\"You caught {{score}} coins {{catchGain}} out of {{levelSpawnedCoins}} in {{time}} seconds {{timeGain}}.\\n\\nYou missed {{levelMisses}} times {{missesGain}} and hit the walls or ceiling {{levelWallBounces}} times{{wallHitsGain}}.\\n\\n{{compliment}}\",\"level_up.compliment_advice\":\"Try to catch all coins, never miss the bricks, never hit the walls/ceiling or clear the level under 30s to gain additional upgrades.\",\"level_up.compliment_good\":\"Well done !\",\"level_up.compliment_perfect\":\"Impressive, keep it up !\",\"level_up.pick_upgrade_title\":\"Pick an upgrade\",\"level_up.plus_one_upgrade\":\"(+1 upgrade)\",\"level_up.plus_one_upgrade_and_reroll\":\"(+1 upgrade and +1 re-roll)\",\"level_up.reroll\":\"Re-roll ({{count}})\",\"level_up.reroll_help\":\"Offer new choices\",\"level_up.upgrade_perk_to_level\":\" lvl {{level}}\",\"main_menu.basic\":\"\",\"main_menu.basic_help\":\"\",\"main_menu.colorful_coins\":\"\",\"main_menu.colorful_coins_help\":\"\",\"main_menu.comboIncreaseTexts\":\"\",\"main_menu.comboIncreaseTexts_help\":\"\",\"main_menu.contrast\":\"\",\"main_menu.contrast_help\":\"\",\"main_menu.credit_levels\":\"\",\"main_menu.donate\":\"You've played for {{hours}} hours\",\"main_menu.donate_help\":\"How about donating? You can hide this reminder in the settings. \",\"main_menu.donation_reminder\":\"\",\"main_menu.donation_reminder_help\":\"\",\"main_menu.download_save_file\":\"\",\"main_menu.download_save_file_help\":\"\",\"main_menu.extra_bright\":\"\",\"main_menu.extra_bright_help\":\"\",\"main_menu.fullscreen\":\"\",\"main_menu.fullscreen_help\":\"\",\"main_menu.help_content\":\"\",\"main_menu.help_help\":\"\",\"main_menu.help_title\":\"\",\"main_menu.help_upgrades\":\"\",\"main_menu.high_score\":\"High score : {{score}}\",\"main_menu.kid\":\"\",\"main_menu.kid_help\":\"\",\"main_menu.language\":\"\",\"main_menu.language_help\":\"\",\"main_menu.load_save_file\":\"\",\"main_menu.load_save_file_help\":\"\",\"main_menu.max_coins\":\"\",\"main_menu.max_coins_help\":\"\",\"main_menu.max_particles\":\"\",\"main_menu.max_particles_help\":\"\",\"main_menu.mobile\":\"\",\"main_menu.mobile_help\":\"\",\"main_menu.normal\":\"New Game\",\"main_menu.normal_help\":\"Play 7 levels with a random starting perk\",\"main_menu.pointer_lock\":\"\",\"main_menu.pointer_lock_help\":\"\",\"main_menu.record\":\"\",\"main_menu.record_download\":\"\",\"main_menu.record_help\":\"\",\"main_menu.red_miss\":\"\",\"main_menu.red_miss_help\":\"\",\"main_menu.reset\":\"\",\"main_menu.reset_cancel\":\"\",\"main_menu.reset_confirm\":\"\",\"main_menu.reset_help\":\"\",\"main_menu.reset_instruction\":\"\",\"main_menu.save_file_error\":\"\",\"main_menu.save_file_loaded\":\"\",\"main_menu.save_file_loaded_help\":\"\",\"main_menu.save_file_loaded_ok\":\"\",\"main_menu.settings_help\":\"Tailor the game play to your needs and taste\",\"main_menu.settings_title\":\"Settings\",\"main_menu.show_fps\":\"\",\"main_menu.show_fps_help\":\"\",\"main_menu.show_stats\":\"\",\"main_menu.show_stats_help\":\"\",\"main_menu.sounds\":\"\",\"main_menu.sounds_help\":\"\",\"main_menu.starting_perks\":\"\",\"main_menu.starting_perks_checked\":\"\",\"main_menu.starting_perks_full_random\":\"\",\"main_menu.starting_perks_help\":\"\",\"main_menu.starting_perks_unchecked\":\"\",\"main_menu.title\":\"Breakout 71\",\"main_menu.unlocks\":\"Unlocked content\",\"main_menu.unlocks_help\":\"Try perks and levels you unlocked\",\"play.close_modale_window_tooltip\":\"close \",\"play.current_lvl\":\"Level {{level}}/{{max}}\",\"play.menu_label\":\"menu\",\"play.menu_tooltip\":\"Open main menu\",\"play.missed_ball\":\"miss\",\"play.mobile_press_to_play\":\"Press and hold here to play\",\"play.score_tooltip\":\"See your score, upgrades and more\",\"play.stats.coins_catch_rate\":\"Coins catch rate\",\"play.stats.levelMisses\":\"Missed shots, where you hit nothing\",\"play.stats.levelTime\":\"Level time\",\"play.stats.levelWallBounces\":\"Wall bounces\",\"score_panel.close_to_unlock\":\"Next level unlock :\",\"score_panel.get_upgrades_to_unlock\":\"Get {{missingUpgrades}} and score {{points}} more points to unlock level \\\"{{level}}\\\"\",\"score_panel.rerolls_count\":\"You have accumulated {{rerolls}} rerolls\",\"score_panel.score_to_unlock\":\"Score {{points}} more points to unlock level \\\"{{level}}\\\"\",\"score_panel.title\":\"{{score}} points at level {{level}}/{{max}} \",\"score_panel.upcoming_levels\":\"Upcoming levels :\",\"score_panel.upgrades_picked\":\"Upgrades picked in this game run : \",\"settings.autoplay\":\"Auto play\",\"settings.autoplay_help\":\"Start a session with random upgrades and a computer controlled paddle\",\"settings.basic\":\"Basic graphics\",\"settings.basic_help\":\"Better performance.\",\"settings.colorful_coins\":\"Colorful coins\",\"settings.colorful_coins_help\":\"Coins always spawn of the color of the brick\",\"settings.comboIncreaseTexts\":\"Show +X in gold\",\"settings.comboIncreaseTexts_help\":\"When the combo increase\",\"settings.contrast\":\"High Contrast\",\"settings.contrast_help\":\"More colorful and dark rendering\",\"settings.donation_reminder\":\"Remind me to donate\",\"settings.donation_reminder_help\":\"See time played and donation link in main menu\",\"settings.download_save_file\":\"Download score and stats\",\"settings.download_save_file_help\":\"Get a save file\",\"settings.extra_bright\":\"Extra bright\",\"settings.extra_bright_help\":\"Increases the size of the halo around coins and bricks.\",\"settings.fullscreen\":\"Fullscreen\",\"settings.fullscreen_help\":\"Game will try to go full screen before starting\",\"settings.kid\":\"Kids mode\",\"settings.kid_help\":\"Start future games with \\\"slower ball\\\".\",\"settings.language\":\"Language\",\"settings.language_help\":\"Choose the game's language\",\"settings.load_save_file\":\"Load save file\",\"settings.load_save_file_help\":\"Select a save file on your device\",\"settings.max_coins\":\" {{max}} coins on screen maximum\",\"settings.max_coins_help\":\"Cosmetic only, no effect on score\",\"settings.mobile\":\"Mobile mode\",\"settings.mobile_help\":\"Leaves space under the paddle.\",\"settings.pointer_lock\":\"Mouse pointer lock\",\"settings.pointer_lock_help\":\"Locks and hides the mouse cursor.\",\"settings.precise_lighting\":\"Precise lighting\",\"settings.precise_lighting_help\":\"Use a smaller grid for background light effect\",\"settings.probabilistic_lighting\":\"Persistence of vision\",\"settings.probabilistic_lighting_help\":\"Improve performance when there are more than 150 coins by reusing some of the light of the previous frame\",\"settings.record\":\"Record gameplay videos\",\"settings.record_download\":\"Download video ({{size}} MB)\",\"settings.record_help\":\"Get a video of each level.\",\"settings.red_miss\":\"Miss warning\",\"settings.red_miss_help\":\"Show red particles around balls going down without a hit.\",\"settings.reset\":\"Reset Game\",\"settings.reset_cancel\":\"No\",\"settings.reset_confirm\":\"Yes\",\"settings.reset_help\":\"Erase high score, play time and statistics\",\"settings.reset_instruction\":\"You will lose all progress you made in the game, are you sure?\",\"settings.save_file_error\":\"Error loading save file\",\"settings.save_file_loaded\":\"Save file loaded\",\"settings.save_file_loaded_help\":\"The app will now reload to apply your save\",\"settings.save_file_loaded_ok\":\"Ok\",\"settings.show_fps\":\"FPS counter\",\"settings.show_fps_help\":\"Monitor the app's performance\",\"settings.show_stats\":\"Show real time stats\",\"settings.show_stats_help\":\"Coins, time, bounces, misses\",\"settings.smooth_lighting\":\"Smooth lighting\",\"settings.smooth_lighting_help\":\"Blur the background light effects to make them look less square. Increases lag.\",\"settings.sounds\":\"Game sounds\",\"settings.sounds_help\":\"Beeps, bloops and brrrr\",\"settings.storage_granted\":\"Your high scores should now be saved permanently\",\"settings.storage_refused\":\"Storage access refused, your high scores and unlocks might get lost\",\"settings.stress_test\":\"Stress test\",\"settings.stress_test_help\":\"Start a bot controlled game with a very high number of coins, to test the performance limits of your device.\",\"starting_perks.checked\":\"When you start a new game, one of those perks will be given to you. Click a perk to exclude it. \",\"starting_perks.help\":\"Choose possible starting upgrades\",\"starting_perks.random\":\"All benefits have been removed, the choice will be random.\",\"starting_perks.title\":\"Starting perks\",\"starting_perks.unchecked\":\"The perks below are not offered as starting perks, but you can click to add them to the pool. \",\"unlocks.greyed_out_help\":\"The grayed out upgrades can be unlocked by increasing your total score. The total score increases every time you score in game.\",\"unlocks.intro\":\"Your total score is {{ts}}. Below are all the upgrades and levels the games has to offer. Click an upgrade or level below to start a test game with it.\",\"unlocks.just_unlocked\":\"Level unlocked\",\"unlocks.just_unlocked_plural\":\"You just unlocked {{count}} levels\",\"unlocks.level\":\"<h2>You unlocked {{unlocked}} levels out of {{out_of}}</h2>\\n<p>Here are all the game levels, click one to try it out.</p> \",\"unlocks.level_description\":\"A {{size}}x{{size}} level with {{bricks}} bricks, {{colors}} colors and {{bombs}} bombs.\",\"unlocks.minScore\":\"Reach ${{minScore}} in a run to unlock.\",\"unlocks.minScoreWithPerks\":\"Reach ${{minScore}} in a run with {{required}} but without {{forbidden}} to unlock.\",\"unlocks.minTotalScore\":\"Accumulate a total of ${{score}}\",\"unlocks.reached\":\"Your best score was {{reached}}.\",\"unlocks.title_upgrades\":\"You unlocked {{unlocked}} upgrades out of {{out_of}}\",\"upgrades.addiction.name\":\"Addiction\",\"upgrades.addiction.tooltip\":\"+{{lvl}} combo / brick, combo resets {{delay}}s after breaking a brick. \",\"upgrades.addiction.verbose_description\":\"The countdown only starts after breaking the first brick of each level. It stops as soon as all bricks are destroyed.\",\"upgrades.asceticism.name\":\"Asceticism\",\"upgrades.asceticism.tooltip\":\"+{{combo}} combo / brick, - {{combo}} on coin catch\",\"upgrades.asceticism.verbose_description\":\"You'll need to store the coins somewhere while your combo climbs. \",\"upgrades.ball_attract_ball.help_plural\":\"Stronger attraction force\",\"upgrades.ball_attract_ball.name\":\"Gravity\",\"upgrades.ball_attract_ball.tooltip\":\"Balls attract balls\",\"upgrades.ball_attract_ball.verbose_description\":\"Balls that are more than \\\"3/4 of the game area width\\\" away will start attracting each other. \\n\\nThe attraction force is stronger when they are furthest away from each other.\\n\\nRainbow particles will fly to symbolize the attraction force. This perk is only offered if you have more than one ball already.\",\"upgrades.ball_attracts_coins.name\":\"Balls attract coins\",\"upgrades.ball_attracts_coins.tooltip\":\"Coins follow the nearest ball and fall down slower\",\"upgrades.ball_attracts_coins.verbose_description\":\"This could be used to \\\"paint around\\\" the balls with coins if you combined it with \\\"stain\\\" and \\\"ghost coins\\\". It also works as a substitute for coin magnet. \",\"upgrades.ball_repulse_ball.help_plural\":\"Stronger repulsion force\",\"upgrades.ball_repulse_ball.name\":\"Personal space\",\"upgrades.ball_repulse_ball.tooltip\":\"Balls repulse balls\",\"upgrades.ball_repulse_ball.verbose_description\":\"Balls that are less than a quarter screen width away will start repulsing each other. The repulsion force is stronger if they are close to each other. Particles will jet out to symbolize this force being applied. This perk is only offered if you have more than one ball already.\",\"upgrades.base_combo.name\":\"Strong foundations\",\"upgrades.base_combo.tooltip\":\"Combo starts at {{coins}} instead of 1.\",\"upgrades.base_combo.verbose_description\":\"Your combo normally starts at 1 at the beginning of the level, and resets to 1 when you bounce around without hitting anything. With this perk, the combo starts 3 points higher, so you'll always get at least 4 coins per brick. Whenever your combo reset, it will go back to 4 and not 1. Your ball will glitter a bit to indicate that its combo is higher than one.\",\"upgrades.bigger_explosions.name\":\"Kaboom\",\"upgrades.bigger_explosions.tooltip\":\"Bigger explosions\",\"upgrades.bigger_explosions.verbose_description\":\"The default explosion clears a 3x3 square, with this it becomes a 5x5 square, and the blow on the coins is also significantly stronger. The screen will flash after each explosion (except in basic mode)\",\"upgrades.bigger_puck.name\":\"Bigger paddle\",\"upgrades.bigger_puck.tooltip\":\"Easily catch more coins.\",\"upgrades.bigger_puck.verbose_description\":\"A bigger paddle makes it easier to never miss the ball and to catch more coins, and also to precisely angle the bounces (the ball's angle only depends on where it hits the paddle). \",\"upgrades.bricks_attract_ball.name\":\"Bricks attract balls\",\"upgrades.bricks_attract_ball.tooltip\":\"Ball goes toward the first {{count}} bricks it will hit.\",\"upgrades.bricks_attract_ball.verbose_description\":\"The effect is stronger at higher levels. The number of bricks that can hit before the effect stops is also higher. The effect rearms when the ball hits the puck.\",\"upgrades.bricks_attract_coins.name\":\"Bricks attract coins\",\"upgrades.bricks_attract_coins.tooltip\":\"Helps them stay up there\",\"upgrades.bricks_attract_coins.verbose_description\":\"\",\"upgrades.clairvoyant.name\":\"Clairvoyant\",\"upgrades.clairvoyant.tooltip\":\"See upcoming levels, bricks HP and ball direction\",\"upgrades.clairvoyant.verbose_description\":\"Helps you pick the right upgrades and understand what's going on with sturdy bricks. Level 2 and 3 bring additional knowledge of dubious utility (reachable in loop mode)\",\"upgrades.coin_magnet.help_plural\":\"Stronger effect on the coins\",\"upgrades.coin_magnet.name\":\"Coins magnet\",\"upgrades.coin_magnet.tooltip\":\"Paddle attracts coins\",\"upgrades.coin_magnet.verbose_description\":\"Directs the coins to the paddle. The effect is stronger if the coin is close to it already.\",\"upgrades.compound_interest.name\":\"Compound interest\",\"upgrades.compound_interest.tooltip\":\"+{{lvl}} combo per brick broken, resets on coin lost\",\"upgrades.compound_interest.verbose_description\":\"Your combo will grow by one every time you break a brick, spawning more and more coin with every brick you break. \\nBe sure however to catch every one of those coins with your paddle, as any lost coin will reset your combo.\\nOnce your combo is above the minimum, the bottom of the play area will have a red line to remind you that coins should not go there.\",\"upgrades.concave_puck.name\":\"Concave paddle\",\"upgrades.concave_puck.tooltip\":\"Improves vertical aiming precision\",\"upgrades.concave_puck.verbose_description\":\"Balls starts the level going straight up, and bounces with less angle.\",\"upgrades.corner_shot.name\":\"Corner shot\",\"upgrades.corner_shot.tooltip\":\"Lets your paddle overlap with the borders of the screen\",\"upgrades.corner_shot.verbose_description\":\"Helps with aiming in the corners. Further levels let you go further out. \",\"upgrades.etherealcoins.name\":\"Coins, in Space\",\"upgrades.etherealcoins.tooltip\":\"Coins are no longer affected by gravity\",\"upgrades.etherealcoins.verbose_description\":\"The coins will maintain their speed even after several bounces, and will no longer be affected by gravity.\",\"upgrades.extra_levels.name\":\"5 min more\",\"upgrades.extra_levels.tooltip\":\"Play {{count}} levels instead of 7\",\"upgrades.extra_levels.verbose_description\":\"The default game can last a max of 7 levels, after which the game is over. \\n\\nEach level of this perk lets you go one level higher. The last levels are often the ones where you make the most score, so the difference can be dramatic.\",\"upgrades.extra_life.help_plural\":\"Your (last) ball will bounce on the bottom instead of being lost ({{lvl}} times).\",\"upgrades.extra_life.name\":\"Extra Life\",\"upgrades.extra_life.tooltip\":\"The ball will bounce once on the bottom line before being lost.\",\"upgrades.extra_life.verbose_description\":\"Normally, you have one ball, and the game is over as soon as you drop it.\\n\\nThis perk adds a white bar at the bottom of the screen that will save a ball once, and break in the process. \\n\\nYou'll lose one level of that perk every time a ball bounces at the bottom of the screen.\",\"upgrades.forgiving.name\":\"Forgiving\",\"upgrades.forgiving.tooltip\":\"Missing breaks reduces combo progressively instead of all at once.\",\"upgrades.forgiving.verbose_description\":\"The first miss per level is free, then 10% of the combo, then 20% .. \",\"upgrades.fountain_toss.name\":\"Fountain toss\",\"upgrades.fountain_toss.tooltip\":\"Gain some combo when you miss some coins. \",\"upgrades.fountain_toss.verbose_description\":\"When you miss a coin and your combo was under {{max}}, your combo has a probability of {{lvl}}/combo to grow by one.\",\"upgrades.ghost_coins.name\":\"Ghost coins\",\"upgrades.ghost_coins.tooltip\":\"Coins slowly pass through bricks\",\"upgrades.ghost_coins.verbose_description\":\"It's not a bug, it's a feature ! Coins fly through bricks slowly. Higher levels let them move faster. \",\"upgrades.helium.name\":\"Helium\",\"upgrades.helium.tooltip\":\"Gravity reversed left and right of paddle\",\"upgrades.helium.verbose_description\":\"This affects the coins and will let the float up until you are ready to pick them up.\",\"upgrades.hot_start.name\":\"Hot start\",\"upgrades.hot_start.tooltip\":\"Start at combo {{start}}, -{{loss}} combo per second\",\"upgrades.hot_start.verbose_description\":\"At the start of every level, your combo will start at +30 points, but then every second it will be decreased by one. The effect stacks with other perks. \",\"upgrades.hypnosis.name\":\"Hypnosis\",\"upgrades.hypnosis.tooltip\":\"Whenever a brick changes color, teleport that coin to the nearest ball and recharge its ability to stain a brick. \",\"upgrades.hypnosis.verbose_description\":\"\",\"upgrades.implosions.name\":\"Implosions\",\"upgrades.implosions.tooltip\":\"Explosions suck coins in instead of blowing them out\",\"upgrades.implosions.verbose_description\":\"The explosion force is applied the other way. Further levels act as \\\"bigger explosion\\\"\",\"upgrades.instant_upgrade.name\":\"Instant upgrade\",\"upgrades.instant_upgrade.tooltip\":\"+2 upgrade now, -1 choice until game end.\",\"upgrades.instant_upgrade.verbose_description\":\"Immediately pick two upgrades, so that you get one free one and one to repay the one used to get this perk. Every further menu to pick upgrades will have fewer options to choose from.\",\"upgrades.left_is_lava.name\":\"Avoid left side\",\"upgrades.left_is_lava.tooltip\":\"+{{lvl}} combo per brick broken. Combo resets if ball hits the left side of the screen\",\"upgrades.left_is_lava.verbose_description\":\"Whenever you break a brick, your combo will increase by one, so you'll get one more coin from all the next bricks you break.\\n\\nHowever, your combo will reset as soon as your ball hits the left side . \\n\\nAs soon as your combo rises, the left side becomes red to remind you that you should avoid hitting them. \\n\",\"upgrades.limitless.name\":\"Limitless\",\"upgrades.limitless.tooltip\":\"Raise all upgrade's maximum level by {{lvl}} \",\"upgrades.limitless.verbose_description\":\"Choosing this perk also raises his own limit by one, letting you pick it again.\",\"upgrades.metamorphosis.name\":\"Metamorphosis\",\"upgrades.metamorphosis.tooltip\":\"Each coin can stain {{lvl}} brick(s) with its color\",\"upgrades.metamorphosis.verbose_description\":\"With this perk, coins will be of the color of the brick they come from, and will color the first brick they touch in the same color. Coins spawn with the speed of the ball that broke them, which means you can aim a bit in the direction of the bricks you want to \\\"paint\\\". At level 1, each coin can color 1 bricks before it is \\\"spent\\\" and appears hollow. \",\"upgrades.minefield.name\":\"Minefield\",\"upgrades.minefield.tooltip\":\"+{{lvl}} combo per bomb brick on screen\",\"upgrades.minefield.verbose_description\":\"Adds +lvl to the combo when a brick is place, -lvl when it is destroyed, and raises the base combo by the number of bricks times lvl\",\"upgrades.multiball.name\":\"Multi ball\",\"upgrades.multiball.tooltip\":\"Start every levels with {{count}} balls.\",\"upgrades.multiball.verbose_description\":\"As soon as you drop the ball in Breakout 71, you lose. \\n\\nWith this perk, you get two balls, and so you can afford to lose one. \\n\\nThe lost balls come back on the next level. \\n\\nHaving more than one balls makes some further perks available, and of course clears the level faster.\",\"upgrades.nbricks.name\":\"Strict sample size\",\"upgrades.nbricks.tooltip\":\"Hit exactly {{lvl}} bricks per paddle bounce for +{{lvl}} combo, otherwise it resets\",\"upgrades.nbricks.verbose_description\":\"You don't necessarily need to destroy those bricks, but you need to hit them. Bricks destroyed by explosions don't count\",\"upgrades.one_more_choice.name\":\"Extra choice\",\"upgrades.one_more_choice.tooltip\":\"Further level ups will offer {{lvl}} more option(s) in the list\",\"upgrades.one_more_choice.verbose_description\":\"Every upgrade menu will have one more option. Doesn't increase the number of upgrades you can pick.\",\"upgrades.passive_income.name\":\"Passive income\",\"upgrades.passive_income.tooltip\":\"+{{lvl}} combo / brick, unless the paddle moved in the last {{time}}s, then it resets instead\",\"upgrades.passive_income.verbose_description\":\"Some perks can help the balls do what you want without needing to do anything.\",\"upgrades.picky_eater.name\":\"Picky eater\",\"upgrades.picky_eater.tooltip\":\"+{{lvl}} combo per brick broken, resets on ball color change\",\"upgrades.picky_eater.verbose_description\":\"Whenever you break a brick the same color as your ball, your combo increases by one. \\nIf it's a different color, the ball takes that new color, but the combo resets, unless there were no bricks left of the ball's color. \\nOnce you get a combo higher than your minimum, the bricks of the wrong color will get a red border. \\nIf you have more than one ball, they all switch color whenever one of them hits a brick.\",\"upgrades.pierce.name\":\"Piercing\",\"upgrades.pierce.tooltip\":\"Ball pierces {{count}} bricks after a paddle bounce\",\"upgrades.pierce.verbose_description\":\"The ball normally bounces as soon as it touches something. With this perk, it will continue its trajectory for up to 3 bricks broken. \\n\\nAfter that, it will bounce on the 4th brick, and you'll need to touch the paddle to reset the counter.\",\"upgrades.pierce_color.name\":\"Color pierce\",\"upgrades.pierce_color.tooltip\":\"+{{lvl}} damage to bricks of the ball's color\",\"upgrades.pierce_color.verbose_description\":\"Whenever a ball hits a brick of the same color, it will just go through unimpeded. \\n\\nOnce it reaches a brick of a different color, it will break it, take its color and bounce.\\n\\nIf you have sturdy bricks, the ball might still bounce off a brick of the same color.\",\"upgrades.puck_repulse_ball.help_plural\":\"Stronger repulsion force\",\"upgrades.puck_repulse_ball.name\":\"Soft landing\",\"upgrades.puck_repulse_ball.tooltip\":\"Paddle repulses balls\",\"upgrades.puck_repulse_ball.verbose_description\":\"When a ball gets close to the paddle, it will start slowing down, and even potentially bouncing without touching the paddle.\",\"upgrades.rainbow.name\":\"Rainbow\",\"upgrades.rainbow.tooltip\":\"Coins spawn with rainbow color.\",\"upgrades.rainbow.verbose_description\":\"Each level increases the proportion of colored coins. The color depends on level time. \",\"upgrades.reach.name\":\"Top down\",\"upgrades.reach.tooltip\":\" Touching the N bricks of the lowest row resets the combo. Otherwise, +N combo\",\"upgrades.reach.verbose_description\":\"If there is only one row of bricks, or if the lowest row of bricks cover the whole width of the game, then this perk does nothing. Otherwise, breaking this lowest row resets the combo, while breaking anything else increases the combo by the number of bricks present on that lowest row. \\n\\nThe lowest row will be highlighted in red. \",\"upgrades.respawn.name\":\"Re-spawn\",\"upgrades.respawn.tooltip\":\"{{percent}}% of bricks re-spawn after {{delay}}s.\",\"upgrades.respawn.verbose_description\":\"Some particle effect will let you know where bricks will appear. \",\"upgrades.right_is_lava.name\":\"Avoid right side\",\"upgrades.right_is_lava.tooltip\":\"+{{lvl}} combo per brick. Combo resets if ball hits the right side of the screen\",\"upgrades.right_is_lava.verbose_description\":\"Whenever you break a brick, your combo will increase by one, so you'll get one more coin from all the next bricks you break.\\n\\nHowever, your combo will reset as soon as your ball hits the right side. \\n\\nAs soon as your combo rises, the right side becomes red to remind you that you should avoid hitting them.\\n\",\"upgrades.sacrifice.help_l1\":\"Loosing a life clears all bricks\",\"upgrades.sacrifice.help_over\":\"Loosing a life {{lvl}}x the combo then clears all bricks\",\"upgrades.sacrifice.name\":\"Sacrifice\",\"upgrades.sacrifice.verbose_description\":\"This might get the combo pretty high.\",\"upgrades.sapper.help_plural\":\"The first {{lvl}} bricks broken become bombs.\",\"upgrades.sapper.name\":\"Sapper\",\"upgrades.sapper.tooltip\":\"The first brick broken becomes a bomb.\",\"upgrades.sapper.verbose_description\":\"Instead of just disappearing, the first brick you break will be replaced by a bomb brick. Bouncing the ball on the paddle re-arms the effect. Leveling-up this perk will allow you to place more bombs.\",\"upgrades.shocks.name\":\"Shocks\",\"upgrades.shocks.tooltip\":\"Explosive balls collisions\",\"upgrades.shocks.verbose_description\":\"Whenever two balls collide, they exchange their speed, spawn an explosion, and gain added speed to separate them. \",\"upgrades.shunt.name\":\"Shunt\",\"upgrades.shunt.tooltip\":\"Keep {{percent}}% of your combo between levels\",\"upgrades.shunt.verbose_description\":\"If you also have hot start, the hot start is just added to the current combo\",\"upgrades.side_flip.name\":\"Right handed\",\"upgrades.side_flip.tooltip\":\"+{{lvl}} combo per brick broken from the right, -{{loss}} otherwise\",\"upgrades.side_flip.verbose_description\":\"Impact the brick on its right side to gain one combo, but avoid hitting it on the left side as the would remove 2 combo. Hitting from the top and bottom has no effect. \",\"upgrades.side_kick.name\":\"Left handed\",\"upgrades.side_kick.tooltip\":\"+{{lvl}} combo per brick broken from the left, -{{loss}} otherwise\",\"upgrades.side_kick.verbose_description\":\"Impact the brick on its left side to gain one combo, but avoid hitting it on the right side as the would remove 2 combo. Hitting from the top and bottom has no effect. \",\"upgrades.skip_last.help_plural\":\"The last {{lvl}} bricks will explode.\",\"upgrades.skip_last.name\":\"Easy Cleanup\",\"upgrades.skip_last.tooltip\":\"The last brick will explode.\",\"upgrades.skip_last.verbose_description\":\"You need to break all bricks to go to the next level. However, it can be hard to get the last ones. \\n\\nClearing a level early brings extra choices when upgrading. Never missing the bricks is also very beneficial. \\n\\nSo if you find it difficult to break the last bricks, getting this perk a few time can help.\",\"upgrades.slow_down.name\":\"Slower ball\",\"upgrades.slow_down.tooltip\":\"Ball moves more slowly\",\"upgrades.slow_down.verbose_description\":\"The ball starts relatively slow, but every level of your game it will start a bit faster. \\n\\nIt will also accelerate if you spend a lot of time in one level. \\n\\nThis perk makes it more manageable. \\n\\nYou can get it at the start every time by enabling kid mode in the menu.\",\"upgrades.smaller_puck.help_plural\":\"Even smaller paddle and higher base combo\",\"upgrades.smaller_puck.name\":\"Smaller paddle\",\"upgrades.smaller_puck.tooltip\":\"Also gives +5 base combo\",\"upgrades.smaller_puck.verbose_description\":\"This makes the paddle smaller, which in theory makes some corner shots easier, but really just raises the difficulty.\\n\\nThat's why you also get a nice bonus of +5 coins per brick for all bricks you'll break after picking this. \",\"upgrades.soft_reset.name\":\"Soft reset\",\"upgrades.soft_reset.tooltip\":\"Combo resets keeps {{percent}}%\",\"upgrades.soft_reset.verbose_description\":\"Limit the impact of a combo reset.\",\"upgrades.streak_shots.name\":\"Hit streak\",\"upgrades.streak_shots.tooltip\":\"More coins if you break many bricks before bouncing on the paddle.\",\"upgrades.streak_shots.verbose_description\":\"Every time you break a brick, your combo increases by one. \\n\\nHowever, as soon as the ball touches your paddle, the combo is reset to its default value.\\n\\nOnce your combo rises above the base value, your paddle will have a red border to remind you that it will destroy your combo to touch it with the ball.\",\"upgrades.sturdy_bricks.name\":\"Sturdy bricks\",\"upgrades.sturdy_bricks.tooltip\":\"+{{lvl}} bricks HP, +{{percent}}% coins spawned when broken\",\"upgrades.sturdy_bricks.verbose_description\":\"Each level of this perk adds one HP to all bricks. You can see the HP number with the \\\"clairvoyant\\\" perk. You can increase ball damage by getting the \\\"piercing\\\" perk. Each level of the perk adds +50% coins spawn. \",\"upgrades.superhot.name\":\"SUPER HOT\",\"upgrades.superhot.tooltip\":\"Time moves when the paddle moves.\",\"upgrades.superhot.verbose_description\":\"SUPER HOT SUPER HOT SUPER HOT SUPER HOT\",\"upgrades.telekinesis.help_plural\":\"Stronger effect on the ball\",\"upgrades.telekinesis.name\":\"Telekinesis\",\"upgrades.telekinesis.tooltip\":\"Paddle controls the ball's trajectory\",\"upgrades.telekinesis.verbose_description\":\"You control the ball while it's going up. \",\"upgrades.top_is_lava.name\":\"Sky is the limit\",\"upgrades.top_is_lava.tooltip\":\"+{{lvl}} combo per brick, reset when the top is hit\",\"upgrades.top_is_lava.verbose_description\":\"Whenever you break a brick, your combo will increase by one. However, your combo will reset as soon as your ball hit the top of the screen. \\n\\nWhen your combo is above the minimum, a red bar will appear at the top to remind you that you should avoid hitting it. \",\"upgrades.trampoline.name\":\"Trampoline\",\"upgrades.trampoline.tooltip\":\"+{{lvl}} combo per paddle bounce,-{{lvl}} combo per bounce on any border\",\"upgrades.trampoline.verbose_description\":\"One of the rare combo upgrades that don't add a reset condition\",\"upgrades.transparency.name\":\"Transparency\",\"upgrades.transparency.tooltip\":\"The higher the ball is on the screen, the more transparent it becomes, and the more coins it produces (+{{percent}} % at full transparency).\",\"upgrades.transparency.verbose_description\":\"Higher levels make the ball transparent sooner and increase the point bonus.\",\"upgrades.trickledown.name\":\"Trickle down economics\",\"upgrades.trickledown.tooltip\":\"The coins appear at the top of the screen.\",\"upgrades.trickledown.verbose_description\":\"It might help you put some coins aside.\",\"upgrades.unbounded.name\":\"Padding\",\"upgrades.unbounded.tooltip\":\"Adds space left and right of the level, but your paddle can't go that far. \",\"upgrades.unbounded.verbose_description\":\"Another upgrade might help you extends the reach of your paddle. \",\"upgrades.viscosity.name\":\"Viscosity\",\"upgrades.viscosity.tooltip\":\"Slower coin fall\",\"upgrades.viscosity.verbose_description\":\"Coins normally accelerate with gravity and explosions to pretty high speeds. \\n\\nThis perk constantly makes them slow down, as if they were in some sort of viscous liquid. \\n\\nThis makes catching them easier, and combines nicely with perks that influence the coin's movement.\",\"upgrades.wind.help_plural\":\"Stronger wind force\",\"upgrades.wind.name\":\"Wind\",\"upgrades.wind.tooltip\":\"Paddle position creates wind\",\"upgrades.wind.verbose_description\":\"Wind depends on paddle position: left blows left, right blows right. Affects both balls and coins.\",\"upgrades.yoyo.name\":\"Yo-yo\",\"upgrades.yoyo.tooltip\":\"Ball falls toward paddle\",\"upgrades.yoyo.verbose_description\":\"It's the opposite of telekinesis, control the ball while it's falling back down.\",\"upgrades.zen.name\":\"Zen\",\"upgrades.zen.tooltip\":\"+{{lvl}} combo per bricks, reset when there's an explosion\",\"upgrades.zen.verbose_description\":\"After all, this is a non-violent game. \"}");
},{}],"b97sx":[function(require,module,exports,__globalThis) {
module.exports = JSON.parse('{"confirmRestart.no":"Annuler","confirmRestart.text":"Vous \xeates sur le point de commencer une nouvelle partie, est-ce vraiment ce que vous vouliez ?","confirmRestart.title":"D\xe9marrer une nouvelle partie\u202F?","confirmRestart.yes":"Commencer une nouvelle partie","editor.editing.bigger":"Augmenter la taille du niveau","editor.editing.color":"Choisissez une couleur dans la liste des couleurs (max 5 par niveau)","editor.editing.copy":"Copier le code du niveau","editor.editing.copy_help":"Collez-le dans le canal #levels de notre discord","editor.editing.credit":"Cr\xe9dits et source","editor.editing.credit_prompt":"Entrez l\'url source ou l\'explication de votre niveau.","editor.editing.delete":"Supprimer le niveau","editor.editing.down":"D\xe9placez toutes les briques vers le bas","editor.editing.help":"Cliquez ensuite sur une tuile pour la colorier.","editor.editing.left":"D\xe9placer toutes les briques vers la gauche","editor.editing.play":"Jouez \xe0 ce niveau","editor.editing.rename":"Nom du niveau","editor.editing.rename_prompt":"Veuillez saisir un nouveau nom pour le niveau","editor.editing.right":"D\xe9placer toutes les briques vers la droite","editor.editing.smaller":"Diminuer la taille du niveau","editor.editing.title":"Niveau d\'\xe9dition\xa0: {{name}}","editor.editing.up":"D\xe9placez toutes les briques","editor.help":"Cr\xe9ez des niveaux personnalis\xe9s et partagez-les pour les inclure dans le jeu.","editor.import":"Importer un niveau","editor.import_instruction":"Collez un code de niveau pour l\'importer dans votre liste de niveaux","editor.locked":"Atteignez un score total de {{min}} pour d\xe9bloquer","editor.new_level":"Nouveau niveau","editor.title":"\xc9diteur de niveau","gameOver.creative":"Cette partie de test ne sera pas enregistr\xe9e.","gameOver.cumulative_total":"Votre score total cumul\xe9 est pass\xe9 de {{startTs}} \xe0 {{endTs}}.","gameOver.lost.summary":"Vous avez fait tomber la balle apr\xe8s avoir attrap\xe9 {{score}} pi\xe8ces.","gameOver.lost.title":"Balle perdue","gameOver.stats.balls_lost":"Balles perdues","gameOver.stats.bricks_broken":"Briques cass\xe9es","gameOver.stats.bricks_per_minute":"Briques cass\xe9es par minute","gameOver.stats.catch_rate":"Pi\xe8ces attrap\xe9es","gameOver.stats.combo_avg":"Combo moyen","gameOver.stats.combo_max":"Combo maximum","gameOver.stats.duration_per_level":"Dur\xe9e par niveau","gameOver.stats.hit_rate":"Pr\xe9cision","gameOver.stats.intro":"","gameOver.stats.level_reached":"Niveau atteint","gameOver.stats.total_score":"Score total","gameOver.stats.upgrades_applied":"Am\xe9liorations appliqu\xe9es","gameOver.stats_intro":"Vous trouverez ci-dessous les statistiques de cette partie compar\xe9es \xe0 vos {{count}} meilleures parties.","gameOver.unlocked_perk":"Am\xe9lioration d\xe9bloqu\xe9e","gameOver.unlocked_perk_plural":"Vous avez d\xe9bloqu\xe9 {{count}} am\xe9liorations","gameOver.win.summary":"Cette partie est termin\xe9e. Vous avez accumul\xe9 {{score}} pi\xe8ces. ","gameOver.win.title":"Vous avez termin\xe9 cette partie","help.content":"## Objectif\\n\\nAttrapez un maximum de pi\xe8ces au cours des 7 niveaux.\\nLes pi\xe8ces apparaissent lorsque vous cassez des briques.\\nAttrapez-les avec votre palet pour augmenter votre score.\\nVotre score est affich\xe9 en haut \xe0 droite de l\'\xe9cran.\\nNe laissez pas tomber la balle, sinon la partie est termin\xe9e.\\n\\nApr\xe8s avoir d\xe9truit toutes les briques, vous pourrez choisir une am\xe9lioration.\\n\\n## Am\xe9liorations\\n\\nLes am\xe9liorations que vous choisissez seront valables jusqu\'\xe0 la fin de la partie.\\nCertaines peuvent \xeatre s\xe9lectionn\xe9es plusieurs fois pour un effet plus puissant.\\nD\'autres aident \xe0 viser ou simplifient le jeu.\\nCertaines ne sont utiles que lorsqu\'elles sont combin\xe9es.\\n\\nVous obtenez toujours une am\xe9lioration au d\xe9but de chaque partie.\\nSon ic\xf4ne forme les briques du premier niveau.\\nVous pouvez s\xe9lectionner les am\xe9liorations de d\xe9part dans les param\xe8tres.\\n\\nDe nombreuses am\xe9liorations influencent votre combo.\\n\\n## Combo\\n\\nVotre \xab combo \xbb correspond au nombre de pi\xe8ces g\xe9n\xe9r\xe9es lorsqu\'une brique se casse.\\nIl est affich\xe9 sur votre palet. Par exemple, x4 signifie que chaque brique rapporte 4 pi\xe8ces.\\n\\nLa plupart des am\xe9liorations qui augmentent le combo ajoutent \xe9galement une condition pour le r\xe9initialiser.\\nLe combo se r\xe9initialise \xe9galement si la balle revient sur la raquette sans toucher de brique.\\nUn message \xab\xa0Manqu\xe9\xa0\xbb s\'affiche alors.\\n\\nEssayez de viser vers un brique \xe0 chaque rebond.\\n\\n## Vis\xe9e\\n\\nSeule la position de la balle sur la raquette d\xe9termine son angle de rebond.\\nSi la balle touche la raquette en plein centre, elle rebondira verticalement.\\nSi vous frappez sur le c\xf4t\xe9 de la raquette, l\'angle sera plus grand.\\nLa vitesse de la raquette et l\'angle d\'incidence de la balle n\'ont pas d\'effet.\\n\\nDe nombreuses am\xe9liorations facilitant la vis\xe9e peuvent \xeatre d\xe9bloqu\xe9es.\\n\\n## D\xe9blocages\\n\\nLorsque vous jouez \xe0 Breakout 71 pour la premi\xe8re fois, la plupart des am\xe9liorations et des niveaux sont verrouill\xe9s.\\nLes am\xe9liorations se d\xe9bloquent simplement en jouant et en attrapant beaucoup de pi\xe8ces.\\nLes premiers niveaux se d\xe9bloquent en atteignant un score \xe9lev\xe9.\\nLes niveaux suivants ajoutent une condition concernant les avantages s\xe9lectionn\xe9s.\\n\\nAtteindre des scores \xe9lev\xe9s est beaucoup plus facile lorsque vous obtenez plusieurs am\xe9liorations apr\xe8s chaque niveau.\\n\\n## Relances et am\xe9liorations gratuites\\n\\nVous obtiendrez une am\xe9lioration suppl\xe9mentaire si vous jouez bien\xa0:\\n\\n- Terminez le niveau en moins de {{levelTimeGood}} secondes\\n- Touchez les bords ou le haut moins de {{wallBouncedGood}} fois\\n- Attrapez {{catchRateGood}}\xa0% de pi\xe8ces\\n- Manquez les briques moins de {{missesGood}} fois\\n\\nVous b\xe9n\xe9ficierez \xe9galement d\'une relance qui vous permettra d\'ignorer les am\xe9liorations si vous faites encore mieux\xa0:\\n\\n- Terminez un niveau en moins de {{levelTimeBest}} secondes\\n- Touchez les bords ou le haut moins de {{wallBouncedBest}} fois\\n- Attrapez {{catchRateBest}}\xa0% de pi\xe8ces\\n- Manquez les briques moins de {{missesBest}} fois\\n\\nUne option dans les param\xe8tres vous permet d\'afficher ces statistiques ","help.help":"D\xe9couvrez le jeu en d\xe9tail","help.levels":"Niveaux","help.title":"Aide","help.upgrades":"## Am\xe9liorations","history.columns.score":"Score","history.columns.started":"Date","history.help":"Liste vos {{count}} meilleurs parties.","history.locked":"Jouez d\'abord au moins dix parties","history.title":"Historique","lab.help":"Essayez n\'importe quel combinaison d\'am\xe9liorations et de niveaux.","lab.instructions":"S\xe9lectionnez les am\xe9liorations ci-dessous, puis choisissez le niveau \xe0 jouer. .","lab.menu_entry":"Mode cr\xe9atif","lab.reset":"Retirer toutes les am\xe9liorations","lab.select_level":"S\xe9lectionnez un niveau sur lequel jouer","lab.unlocks_at":"D\xe9verrouill\xe9 \xe0 partir d\'un score total de {{score}}","level_up.after_buttons":"Vous venez de terminer le niveau {{level}}/{{max}}.","level_up.before_buttons":"Vous avez attrap\xe9 {{score}} pi\xe8ces {{catchGain}} sur {{levelSpawnedCoins}} en {{time}} secondes {{timeGain}}.\\n\\nVous avez rat\xe9 les briques {{levelMisses}} fois {{missesGain}} et touch\xe9 les bords de la zone de jeu {{levelWallBounces}} fois {{wallHitsGain}}.\\n\\n{{compliment}}","level_up.compliment_advice":"Essayez d\'attraper toutes les pi\xe8ces, de ne jamais rater les briques, de ne pas toucher les murs ou de terminer le niveau en moins de 30 secondes pour obtenir des choix suppl\xe9mentaires et des am\xe9liorations.","level_up.compliment_good":"Bravo !","level_up.compliment_perfect":"Impressionnant, continuez comme \xe7a !","level_up.pick_upgrade_title":"Choisir une am\xe9lioration","level_up.plus_one_upgrade":"(+1 upgrade)","level_up.plus_one_upgrade_and_reroll":"(+1 am\xe9lioration et +1 relance)","level_up.reroll":"Relancer ({{count}})","level_up.reroll_help":"Nouveaux choix","level_up.upgrade_perk_to_level":" niveau {{level}}","main_menu.basic":"","main_menu.basic_help":"","main_menu.colorful_coins":"","main_menu.colorful_coins_help":"","main_menu.comboIncreaseTexts":"","main_menu.comboIncreaseTexts_help":"","main_menu.contrast":"","main_menu.contrast_help":"","main_menu.credit_levels":"","main_menu.donate":"Vous avez jou\xe9 {{hours}} heures","main_menu.donate_help":"Pourriez-vous donner quelques euros ? Vous pouvez masquer ce rappel dans les param\xe8tres.","main_menu.donation_reminder":"","main_menu.donation_reminder_help":"","main_menu.download_save_file":"","main_menu.download_save_file_help":"","main_menu.extra_bright":"","main_menu.extra_bright_help":"","main_menu.fullscreen":"","main_menu.fullscreen_help":"","main_menu.help_content":"","main_menu.help_help":"","main_menu.help_title":"","main_menu.help_upgrades":"","main_menu.high_score":"High score : {{score}}","main_menu.kid":"","main_menu.kid_help":"","main_menu.language":"","main_menu.language_help":"","main_menu.load_save_file":"","main_menu.load_save_file_help":"","main_menu.max_coins":"","main_menu.max_coins_help":"","main_menu.max_particles":"","main_menu.max_particles_help":"","main_menu.mobile":"","main_menu.mobile_help":"","main_menu.normal":"Nouvelle Partie","main_menu.normal_help":"Avec un avantage de d\xe9part al\xe9atoire","main_menu.pointer_lock":"","main_menu.pointer_lock_help":"","main_menu.record":"","main_menu.record_download":"","main_menu.record_help":"","main_menu.red_miss":"","main_menu.red_miss_help":"","main_menu.reset":"","main_menu.reset_cancel":"","main_menu.reset_confirm":"","main_menu.reset_help":"","main_menu.reset_instruction":"","main_menu.save_file_error":"","main_menu.save_file_loaded":"","main_menu.save_file_loaded_help":"","main_menu.save_file_loaded_ok":"","main_menu.settings_help":"Adaptez le jeu \xe0 vos besoins","main_menu.settings_title":"Param\xe8tre","main_menu.show_fps":"","main_menu.show_fps_help":"","main_menu.show_stats":"","main_menu.show_stats_help":"","main_menu.sounds":"","main_menu.sounds_help":"","main_menu.starting_perks":"","main_menu.starting_perks_checked":"","main_menu.starting_perks_full_random":"","main_menu.starting_perks_help":"","main_menu.starting_perks_unchecked":"","main_menu.title":"Breakout 71","main_menu.unlocks":"Contenu d\xe9bloqu\xe9","main_menu.unlocks_help":"Essayez les \xe9l\xe9ments d\xe9bloqu\xe9s","play.close_modale_window_tooltip":"Fermer","play.current_lvl":"Niveau {{level}}/{{max}}","play.menu_label":"Menu","play.menu_tooltip":"Ouvrir le menu principal","play.missed_ball":"rat\xe9","play.mobile_press_to_play":"Gardez le doigt ici pour jouer","play.score_tooltip":"Consultez votre score, am\xe9liorations et plus encore","play.stats.coins_catch_rate":"Taux de capture des pi\xe8ces ","play.stats.levelMisses":"Tirs rat\xe9s, ou vous n\'avez touch\xe9 aucune brique","play.stats.levelTime":"Dur\xe9e du niveau","play.stats.levelWallBounces":"Rebonds sur les murs","score_panel.close_to_unlock":"Prochain niveau d\xe9bloqu\xe9 : ","score_panel.get_upgrades_to_unlock":"Obtenez {{missingUpgrades}} et attrapez {{points}} pi\xe8ces suppl\xe9mentaires pour d\xe9bloquer le niveau \xab\xa0{{level}}\xa0\xbb","score_panel.rerolls_count":"Vous avez accumul\xe9 {{rerolls}} rerolls","score_panel.score_to_unlock":"Attrapez {{points}} pi\xe8ces suppl\xe9mentaires pour d\xe9bloquer le niveau \xab\xa0{{level}}\xa0\xbb","score_panel.title":"{{score}} points au niveau {{level}}/{{max}} ","score_panel.upcoming_levels":"Niveaux de la parties : ","score_panel.upgrades_picked":"Am\xe9liorations choisies pendant la partie :","settings.autoplay":"","settings.autoplay_help":"","settings.basic":"Graphismes simplifi\xe9s","settings.basic_help":"Meilleures performances.","settings.colorful_coins":"Pi\xe8ces color\xe9es","settings.colorful_coins_help":"Les pi\xe8ces apparaissent toujours de la couleur de la brique","settings.comboIncreaseTexts":"Afficher un +X dor\xe9","settings.comboIncreaseTexts_help":"Quand le combo augmente","settings.contrast":"Contraste \xe9lev\xe9","settings.contrast_help":"Affichage plus contrast\xe9 et color\xe9","settings.donation_reminder":"Me rappeler de donner","settings.donation_reminder_help":"Afficher le temps de jeu et un lien pour donner dans le menu principal","settings.download_save_file":"Sauvegarder mes progr\xe8s","settings.download_save_file_help":"Obtenir un fichier de sauvegarde","settings.extra_bright":"Plus de lumi\xe8re","settings.extra_bright_help":"Plus grand halo lumineux autours des briques et pi\xe8ces.","settings.fullscreen":"Plein \xe9cran","settings.fullscreen_help":"Le jeu essaiera de passer en plein \xe9cran quand vous le d\xe9marrez","settings.kid":"Mode enfants","settings.kid_help":"Balle plus lente","settings.language":"Langue","settings.language_help":"Changer la langue d\'affichage","settings.load_save_file":"Charger une sauvegarde","settings.load_save_file_help":"Depuis un fichier ","settings.max_coins":"{{max}} pi\xe8ces affich\xe9es maximum","settings.max_coins_help":"Visuel uniquement, pas d\'impact sur le score","settings.mobile":"Mode mobile","settings.mobile_help":"Laisse un espace sous la raquette.","settings.pointer_lock":"Verrouillage du pointeur","settings.pointer_lock_help":"Cache aussi le curseur de la souris.","settings.precise_lighting":"","settings.precise_lighting_help":"","settings.probabilistic_lighting":"","settings.probabilistic_lighting_help":"","settings.record":"Enregistrer des vid\xe9os de jeu","settings.record_download":"T\xe9l\xe9charger la vid\xe9o ({{size}} MB)","settings.record_help":"Obtenez une vid\xe9o de chaque niveau.","settings.red_miss":"Balles rat\xe9es","settings.red_miss_help":"Afficher des particules rouges autours des balles qui redescendent sans avoir touch\xe9 une brique.","settings.reset":"R\xe9initialiser le jeu","settings.reset_cancel":"Non","settings.reset_confirm":"Oui","settings.reset_help":"Effacer les scores, statistiques et temps de jeu","settings.reset_instruction":"Vous perdrez tous les progr\xe8s que vous avez faits dans le jeu, \xeates-vous s\xfbr ?","settings.save_file_error":"Erreur lors du chargement du fichier de sauvegarde","settings.save_file_loaded":"Sauvegarde charg\xe9e","settings.save_file_loaded_help":"L\'appli va red\xe9marrer","settings.save_file_loaded_ok":"Ok","settings.show_fps":"Compteur de FPS","settings.show_fps_help":"Surveiller la performance du jeu","settings.show_stats":"Statistiques en temps r\xe9el","settings.show_stats_help":"Pi\xe8ces, temps, rebonds, rat\xe9s","settings.smooth_lighting":"","settings.smooth_lighting_help":"","settings.sounds":"Sons du jeu","settings.sounds_help":"Bips, bloops et brrrr","settings.storage_granted":"","settings.storage_refused":"","settings.stress_test":"","settings.stress_test_help":"","starting_perks.checked":"Lorsque vous d\xe9marrez une nouvelle partie, l\'un de ces avantages vous sera attribu\xe9. Cliquez sur un avantage pour l\'exclure.","starting_perks.help":"Choisissez les avantages de d\xe9part","starting_perks.random":"Tous les avantages ont \xe9t\xe9 retir\xe9s, le choix sera al\xe9atoire.","starting_perks.title":"Avantages de d\xe9part","starting_perks.unchecked":"Les avantages ci-dessous ne sont pas propos\xe9s comme avantages de d\xe9part, mais vous pouvez cliquer pour les ajouter aux avantages de d\xe9part possibles.","unlocks.greyed_out_help":"Les \xe9l\xe9ments gris\xe9es peuvent \xeatre d\xe9bloqu\xe9es en augmentant votre score total. Le score total augmente \xe0 chaque fois que vous marquez des points dans le jeu.","unlocks.intro":"Votre score total est de {{ts}}. Vous trouverez ci-dessous toutes les am\xe9liorations et tous les niveaux que le jeu peut offrir. Cliquez sur l\'un d\'entre eux pour les essayer dans une partie de test. ","unlocks.just_unlocked":"Niveau d\xe9bloqu\xe9","unlocks.just_unlocked_plural":"Vous venez de d\xe9bloquer {{count}} niveaux","unlocks.level":"<h2>Vous avez d\xe9bloqu\xe9 {{unlocked}} niveaux sur {{out_of}}</h2>\\n<p>Voici tous les niveaux du jeu, cliquez sur l\'un d\'eux pour l\'essayer. </p> ","unlocks.level_description":"Un niveau {{size}}x{{size}} avec {{bricks}} briques, {{colors}} couleurs et {{bombs}} bombes.","unlocks.minScore":"Atteignez un score de ${{minScore}} dans une partie pour d\xe9bloquer.","unlocks.minScoreWithPerks":"Atteignez ${{minScore}} dans une partie avec {{required}} mais sans {{forbidden}}.","unlocks.minTotalScore":"Accumuler un total de ${{score}}","unlocks.reached":"Votre meilleur score pour l\'instant est {{reached}}.","unlocks.title_upgrades":"Vous avez d\xe9bloqu\xe9 {{unlocked}} am\xe9liorations sur {{out_of}}","upgrades.addiction.name":"Addiction","upgrades.addiction.tooltip":"+{{lvl}} combo / brique, combo perdu apr\xe8s {{delay}}s sans casser de briques","upgrades.addiction.verbose_description":"Le d\xe9compte ne commence qu\'\xe0 parti de la destruction de la premi\xe8re brique du niveau, et s\'arr\xeate d\xe8s qu\'il n\'y a plus de briques. ","upgrades.asceticism.name":"Asc\xe9tisme","upgrades.asceticism.tooltip":"+{{combo}} combo par brique cass\xe9e, - {{combo}} quand une pi\xe8ce est attrap\xe9e","upgrades.asceticism.verbose_description":"Il faudra trouver un moyen de stocker les pi\xe8ces pendant que le combo grandis. ","upgrades.ball_attract_ball.help_plural":"Force d\'attraction plus forte","upgrades.ball_attract_ball.name":"Gravit\xe9","upgrades.ball_attract_ball.tooltip":"Les balles attirent les balles","upgrades.ball_attract_ball.verbose_description":"Les balles qui sont \xe9loign\xe9es de plus de 3/4 de la largeur d\'\xe9cran commencent \xe0 s\'attirer. La force d\'attraction est plus forte lorsque les balles sont plus \xe9loign\xe9es l\'une de l\'autre. Des particules arc-en-ciel voleront pour symboliser la force d\'attraction. Cet avantage n\'est offert que si vous avez d\xe9j\xe0 plus d\'une balle en jeu.","upgrades.ball_attracts_coins.name":"Balles fortun\xe9es","upgrades.ball_attracts_coins.tooltip":"Les pi\xe8ces accompagnent la balle la plus proche ","upgrades.ball_attracts_coins.verbose_description":"Vous pourriez l\'utiliser pour que les pi\xe8ces orbitent autours de la balle et colorent les briques \xe0 proximit\xe9, ou comme une sorte de coin magnet. ","upgrades.ball_repulse_ball.help_plural":"Force de r\xe9pulsion plus forte","upgrades.ball_repulse_ball.name":"Vol en formation","upgrades.ball_repulse_ball.tooltip":"Les balles repoussent les balles","upgrades.ball_repulse_ball.verbose_description":"Les balles qui se trouvent \xe0 moins d\'un quart de largeur d\'\xe9cran commencent \xe0 se repousser les unes les autres. La force de r\xe9pulsion est plus forte si elles sont proches l\'une de l\'autre. Des particules seront affich\xe9es pour symboliser l\'application de cette force. Cet avantage n\'est offert que si vous avez d\xe9j\xe0 plus d\'une balle.","upgrades.base_combo.name":"Meilleur base","upgrades.base_combo.tooltip":"Le combo commence \xe0 {{coins}} au lieu de 1.","upgrades.base_combo.verbose_description":"Votre combo commence normalement \xe0 1 au d\xe9but du niveau et revient \xe0 1 lorsque vous rebondissez sans rien toucher. Avec cette caract\xe9ristique, le combo commence 3 points plus haut, ce qui fait que vous obtiendrez toujours au moins 4 pi\xe8ces par brique. Lorsque votre combo est r\xe9initialis\xe9, il revient \xe0 4 et non \xe0 1. Votre balle scintillera un peu pour indiquer que son combo est sup\xe9rieur \xe0 1.","upgrades.bigger_explosions.name":"Kaboom","upgrades.bigger_explosions.tooltip":"Explosions plus violentes","upgrades.bigger_explosions.verbose_description":"L\'explosion par d\xe9faut efface un carr\xe9 de 3x3 briques, avec cette am\xe9lioration un carr\xe9 de 5x5. Le vent soufflant les pi\xe8ces est \xe9galement beaucoup plus fort. L\'\xe9cran clignotera un peu apr\xe8s chaque explosion (sauf en mode graphismes basiques).","upgrades.bigger_puck.name":"Raquette plus grande","upgrades.bigger_puck.tooltip":"Attrapez facilement plus de pi\xe8ces.","upgrades.bigger_puck.verbose_description":"Une grande raquette permet de ne jamais rater la balle et d\'attraper plus de pi\xe8ces, ainsi que d\'orienter pr\xe9cis\xe9ment les rebonds. Cependant, une grande raquette est plus difficile \xe0 utiliser sur les c\xf4t\xe9s du niveau.","upgrades.bricks_attract_ball.name":"Les briques attirent les balles","upgrades.bricks_attract_ball.tooltip":"La balle se dirige vers les {{count}} premi\xe8res briques qu\'elle touchera.","upgrades.bricks_attract_ball.verbose_description":"L\'effet est plus fort \xe0 des niveaux plus \xe9lev\xe9s. Le nombre de briques pouvant \xeatre touch\xe9es avant que l\'effet ne s\'arr\xeate est \xe9galement plus \xe9lev\xe9. L\'effet se r\xe9arme lorsque la balle touche le palet.","upgrades.bricks_attract_coins.name":"Briques attirent les pi\xe8ces","upgrades.bricks_attract_coins.tooltip":"Aide \xe0 garder les pi\xe8ces en suspension","upgrades.bricks_attract_coins.verbose_description":"","upgrades.clairvoyant.name":"Clairvoyant","upgrades.clairvoyant.tooltip":"R\xe9v\xe8le les niveaux, PV des briques et direction des balles","upgrades.clairvoyant.verbose_description":"Vous aide \xe0 choisir les bonnes am\xe9liorations et \xe0 comprendre ce qu\'il se passe avec \\"briques solides\\". Les niveaux 2 et 3 (en mode loop) am\xe8nent des informations compl\xe9mentaires d\'une utilit\xe9 douteuse. ","upgrades.coin_magnet.help_plural":"Effet plus marqu\xe9 sur les pi\xe8ces","upgrades.coin_magnet.name":"Aimant pour pi\xe8ces","upgrades.coin_magnet.tooltip":"La raquette attire les pi\xe8ces","upgrades.coin_magnet.verbose_description":"Dirige les pi\xe8ces vers la raquette. L\'effet est plus fort sur les pi\xe8ces d\xe9j\xe0 proche de la raquette. ","upgrades.compound_interest.name":"Int\xe9r\xeats compos\xe9s","upgrades.compound_interest.tooltip":"+{{lvl}} combo par brique cass\xe9e, remise \xe0 z\xe9ro quand une pi\xe8ce est perdu","upgrades.compound_interest.verbose_description":"Votre combo augmentera d\'une unit\xe9 \xe0 chaque fois que vous casserez une brique. Toute pi\xe8ce perdue remettra votre combo \xe0 z\xe9ro. \\n\\nSi votre combo est sup\xe9rieure au minimum, une ligne rouge s\'affichera au bas de la zone de jeu pour vous le rappeler que les pi\xe8ces ne doivent pas aller \xe0 cet endroit.","upgrades.concave_puck.name":"Raquette concave","upgrades.concave_puck.tooltip":"Aide \xe0 \xe9viter les bords.","upgrades.concave_puck.verbose_description":"Les balles d\xe9marrent verticalement en d\xe9but de niveau, et rebondi sur la raquette de mani\xe8re plus verticale et invers\xe9e.","upgrades.corner_shot.name":"Tir en coin","upgrades.corner_shot.tooltip":"Laisse votre raquette sortir de la zone encadr\xe9e","upgrades.corner_shot.verbose_description":"Aide \xe0 viser dans les coins","upgrades.etherealcoins.name":"Monnaie spatiale ","upgrades.etherealcoins.tooltip":"Les pi\xe8ces ne subissent plus la gravit\xe9 ou la friction","upgrades.etherealcoins.verbose_description":"Les pi\xe8ces garderont leur vitesse m\xeame apr\xe8s plusieurs rebonds, et ne subirons plus la gravit\xe9. ","upgrades.extra_levels.name":"Encore 5 minutes","upgrades.extra_levels.tooltip":"Jouer {{count}} niveaux au lieu de 7","upgrades.extra_levels.verbose_description":"La partie dure normalement 7 niveaux, apr\xe8s quoi le jeu est termin\xe9 et le score que vous avez atteint est votre score de partie.\\n\\nChoisir cette am\xe9lioration vous permet de prolonger la partie d\'un niveau. Les derniers niveaux sont souvent ceux o\xf9 vous faites le plus de points, la diff\xe9rence peut donc \xeatre spectaculaire.","upgrades.extra_life.help_plural":"La (derni\xe8re) balle rebondit en bas de l\'\xe9cran au lieu d\'\xeatre perdue ( {{lvl}} fois).","upgrades.extra_life.name":"Seconde chance","upgrades.extra_life.tooltip":"La balle rebondit une fois avant d\'\xeatre perdue.","upgrades.extra_life.verbose_description":"Normalement, vous n\'avez qu\'une seule balle par manche, et la manche est termin\xe9e d\xe8s que vous la laissez tomber.\\n\\nCette comp\xe9tence ajoute une barre blanche en bas de l\'\xe9cran qui sauvera une balle une fois, et se brisera au cours du processus.\\n\\nVous pouvez prendre plusieurs vies d\'avances, elle seront utilis\xe9es \xe0 chaque fois qu\'une balle est sur le point d\'\xeatre perdue. ","upgrades.forgiving.name":"L\'erreur est humaine","upgrades.forgiving.tooltip":"Rater les briques fait perdre un portion progressivement plu importante du combo","upgrades.forgiving.verbose_description":" La premi\xe8re brique rat\xe9e par niveau ne co\xfbte rien, la suivante 10%, 20%, etc.","upgrades.fountain_toss.name":"Pi\xe8ce dans la fontaine","upgrades.fountain_toss.tooltip":"Gagnez parfois un peu de combo quand vous perdez des pi\xe8ces.","upgrades.fountain_toss.verbose_description":"Quand une pi\xe8ce est perdue alors que votre combo \xe9tait en dessous de {{max}}, votre combo \xe0 une probabilit\xe9 de {{lvl}}/combo d\'\xeatre incr\xe9ment\xe9","upgrades.ghost_coins.name":"Pi\xe8ces fant\xf4me","upgrades.ghost_coins.tooltip":"Les pi\xe8ces traversent les briques doucement","upgrades.ghost_coins.verbose_description":"Ce n\'est pas une bug, c\'est une fonctionnalit\xe9 ! Les pi\xe8ces passent \xe0 travers les briques doucement. Les niveaux plus \xe9lev\xe9s permettent aux pi\xe8ce de traverser les briques plus vite.","upgrades.helium.name":"H\xe9lium","upgrades.helium.tooltip":"Les pi\xe8ce flottent au lieu de tomber autours de la raquette.","upgrades.helium.verbose_description":"Les pi\xe8ces attendront d\'\xeatre sous la raquette pour tomber. ","upgrades.hot_start.name":"D\xe9marrage \xe0 chaud","upgrades.hot_start.tooltip":"Combo \xe0 {{start}}, -{{loss}} combo par seconde","upgrades.hot_start.verbose_description":"Au d\xe9but de chaque niveau, votre combo commencera \xe0 +30 points, mais \xe0 chaque seconde, il sera diminu\xe9 d\'un point. ","upgrades.hypnosis.name":"Hypnose","upgrades.hypnosis.tooltip":"Chaque fois qu\'une brique change de couleur, t\xe9l\xe9portez cette pi\xe8ce vers la boule la plus proche et rechargez sa capacit\xe9 \xe0 tacher une brique.","upgrades.hypnosis.verbose_description":"","upgrades.implosions.name":"Implosions","upgrades.implosions.tooltip":"Les explosions aspirent les pi\xe8ces au lieu de les faire exploser.","upgrades.implosions.verbose_description":"La force d\u2019explosion est appliqu\xe9e dans l\u2019autre sens. Les niveaux 2+ augmentent la puissance de l\'implosion. ","upgrades.instant_upgrade.name":"Un tiens vaut deux tu l\'auras","upgrades.instant_upgrade.tooltip":"+2 am\xe9liorations, -1 choix jusqu\'\xe0 la fin de la partie.","upgrades.instant_upgrade.verbose_description":"Choisissez imm\xe9diatement deux am\xe9liorations, afin d\'en obtenir une gratuite et une autre pour rembourser celle utilis\xe9e pour obtenir cet avantage. Chaque fois que vous choisirez des am\xe9liorations dans le menu suivant, vous aurez moins de choix.","upgrades.left_is_lava.name":"\xc9viter le c\xf4t\xe9 gauche","upgrades.left_is_lava.tooltip":"+{{lvl}} combo par brique, perdu en touchant le bord gauche","upgrades.left_is_lava.verbose_description":"Chaque fois que vous cassez une brique, votre combo augmente d\'une unit\xe9, ce qui vous permet d\'obtenir une pi\xe8ce de plus \xe0 chaque fois que vous cassez une brique.\\n\\nCependant, votre combinaison se r\xe9initialise d\xe8s que votre balle touche le c\xf4t\xe9 gauche.\\n\\nD\xe8s que votre combo augmente, le c\xf4t\xe9 gauche devient rouge pour vous rappeler que vous devez \xe9viter de le frapper.","upgrades.limitless.name":"Sans limites","upgrades.limitless.tooltip":"Augmenter le niveau maximum de toutes les mises \xe0 niveau de {{lvl}} ","upgrades.limitless.verbose_description":"Choisir cet avantage augmente \xe9galement sa propre limite d\'un point, vous permettant de le choisir \xe0 nouveau.","upgrades.metamorphosis.name":"M\xe9tamorphose","upgrades.metamorphosis.tooltip":"Chaque pi\xe8ce peut tacher {{lvl}} brique(s) avec sa couleur","upgrades.metamorphosis.verbose_description":"Avec cette am\xe9lioration, les pi\xe8ces seront de la couleur de la brique d\'o\xf9 elles proviennent et coloreront la premi\xe8re brique qu\'elles toucheront. Les pi\xe8ces apparaissent \xe0 la vitesse de la balle qui les a cass\xe9es, ce qui signifie que vous pouvez viser un peu dans la direction des briques que vous voulez \\"peindre\\". Au \xe0 chaque niveau, chaque pi\xe8ce peut colorier une brique de plus avant d\'\xeatre \\"\xe9puis\xe9e\\" et d\'appara\xeetre vide.","upgrades.minefield.name":"Terrain min\xe9","upgrades.minefield.tooltip":"+{{lvl}} combo par brique explosive \xe0 l\'\xe9cran","upgrades.minefield.verbose_description":"Ajoute +lvl au combo lorsqu\'une brique est plac\xe9e, -lvl lorsqu\'elle est d\xe9truite et augmente le combo de base du nombre de briques multipli\xe9 par le niveau","upgrades.multiball.name":"Multi balle","upgrades.multiball.tooltip":"Chaque niveau commence avec {{count}} balles.","upgrades.multiball.verbose_description":"D\xe8s que vous laissez tomber la balle dans Breakout 71, vous perdez. \\n\\nAvec cet avantage, vous obtenez deux balles, et vous pouvez donc vous permettre d\'en perdre une.\\n\\nLes balles perdues reviennent au niveau suivant. \\n\\nLe fait d\'avoir plus d\'une balle permet d\'obtenir d\'autres avantages et, bien s\xfbr, de franchir le niveau plus rapidement.","upgrades.nbricks.name":"Pr\xe9l\xe8vement","upgrades.nbricks.tooltip":"Frappez exactement {{lvl}} briques par rebond pour +{{lvl}} combo, sinon combo perdu","upgrades.nbricks.verbose_description":"Si votre balle rebondis sans casser une brique, \xe7a compte quand m\xeame comme une frappe. Les briques d\xe9truites par des explosions ne comptent pas.","upgrades.one_more_choice.name":"La r\xe9ponse D","upgrades.one_more_choice.tooltip":"1 choix suppl\xe9mentaire d\'am\xe9lioration propos\xe9 jusqu\'\xe0 la fin de la partie","upgrades.one_more_choice.verbose_description":"Chaque menu d\'am\xe9lioration comportera une option suppl\xe9mentaire. Cela n\'augmente pas le nombre d\'am\xe9liorations que vous pouvez choisir, mais vous aide \xe0 cr\xe9er le profile id\xe9al. \\"La r\xe9ponse D\\" est une r\xe9f\xe9rence \xe0 un sketch classique. ","upgrades.passive_income.name":"Revenu passif","upgrades.passive_income.tooltip":"+{{lvl}} combo / brique, sauf si la raquette \xe0 boug\xe9 dans les {{time}} derni\xe8res secondes, combo perdu dans ce cas","upgrades.passive_income.verbose_description":"Certaines am\xe9lioration font bouger les balles sans avoir besoin de mettre la raquette en mouvement.","upgrades.picky_eater.name":"Mangeur par couleur","upgrades.picky_eater.tooltip":"+{{lvl}} combo par brique cass\xe9e la couleur de la balle, combo perdu sinon","upgrades.picky_eater.verbose_description":"Chaque fois que vous cassez une brique de la m\xeame couleur que votre balle, votre combo augmente d\'une unit\xe9.\\nS\'il s\'agit d\'une couleur diff\xe9rente, la balle adopte cette nouvelle couleur, mais la combinaison est r\xe9initialis\xe9e, sauf s\'il n\'y avais plus aucune brique de la couleur de la balle. Les briques de la mauvaise couleur sont entour\xe9es en rouge. Si vous avez plus d\'une balle, elles changent toutes de couleur en m\xeame temps lorsque l\'une d\'entre elles touche une brique.","upgrades.pierce.name":"Balle per\xe7ante","upgrades.pierce.tooltip":"La balle perce {{count}} briques apr\xe8s chaque rebond sur la raquette.","upgrades.pierce.verbose_description":"Normalement , la balle rebondit d\xe8s qu\'elle touche une brique. Avec cette am\xe9lioration, elle continuera sa trajectoire jusqu\'\xe0 avoir cass\xe9es 3 briques.\\n\\nApr\xe8s cela, elle rebondira sur la quatri\xe8me brique et devra toucher la raquette pour remettre le compteur \xe0 z\xe9ro.","upgrades.pierce_color.name":"Perceur de couleur","upgrades.pierce_color.tooltip":"+{{lvl}} dommage sur les briques de la couleur de la balle","upgrades.pierce_color.verbose_description":"Chaque fois qu\'une balle touche une brique de la m\xeame couleur, elle la traverse sans encombre.\\n\\nLorsqu\'elle atteint une brique de couleur diff\xe9rente, elle la casse, prend sa couleur et rebondit. \\n\\nSi vous avez des briques solides, le fonctionnement est un peu diff\xe9rent. ","upgrades.puck_repulse_ball.help_plural":"La force de r\xe9pulsion est plus grande","upgrades.puck_repulse_ball.name":"Atterrissage en douceur","upgrades.puck_repulse_ball.tooltip":"La raquette repousse les balles","upgrades.puck_repulse_ball.verbose_description":"Lorsqu\'une balle s\'approche de la raquette, elle commence \xe0 ralentir, voire \xe0 rebondir sans toucher le palet.","upgrades.rainbow.name":"Arc en ciel","upgrades.rainbow.tooltip":"Les pi\xe8ces apparaissent avec la couleur de l\'arc en ciel.","upgrades.rainbow.verbose_description":"Chaque niveau augment la proportion de pi\xe8ces color\xe9e. La couleur d\xe9pends du temps de jeu. ","upgrades.reach.name":"Attaque a\xe9rienne","upgrades.reach.tooltip":"Casser une des N briques de la ligne la plus basse d\xe9truit le combo. Sinon, +N combo.","upgrades.reach.verbose_description":"S\'il n\'y a qu\'une seule rang\xe9e de briques, ou si la rang\xe9e la plus basse couvre toute la largeur du jeu, cet avantage est sans effet. Sinon, briser cette rang\xe9e la plus basse r\xe9initialise le combo\xa0; briser toute autre rang\xe9e augmente le combo du nombre de briques pr\xe9sentes sur cette rang\xe9e.\\n\\nLa rang\xe9e de briques du bas sera entour\xe9e en rouge pour vous rappeler de ne pas la toucher. ","upgrades.respawn.name":"R\xe9apparition ","upgrades.respawn.tooltip":"{{percent}}% des briques r\xe9apparaissent apr\xe8s {{delay}}s.","upgrades.respawn.verbose_description":"Des effets de particules vous indiqueront o\xf9 les briques appara\xeetront. ","upgrades.right_is_lava.name":"\xc9viter le c\xf4t\xe9 droit","upgrades.right_is_lava.tooltip":"+{{lvl}} combo par brique, perdu en cas de choc avec le cot\xe9 droit","upgrades.right_is_lava.verbose_description":"Chaque fois que vous cassez une brique, votre combo augmente d\'une unit\xe9, ce qui vous permet d\'obtenir une pi\xe8ce de plus \xe0 chaque fois que vous cassez les briques suivantes.\\n\\nCependant, votre combinaison se r\xe9initialise d\xe8s que votre balle touche le c\xf4t\xe9 droit de la zone de jeu.\\n\\nD\xe8s que votre combo augmente, le c\xf4t\xe9 droit devient rouge pour vous rappeler que vous devez \xe9viter de le frapper.","upgrades.sacrifice.help_l1":"Perdre une vie d\xe9truit toutes les briques","upgrades.sacrifice.help_over":"Perdre une vie multiplie le combo par {{lvl}} puis d\xe9truit toutes les briques \xe0 l\'\xe9cran","upgrades.sacrifice.name":"Sacrifice","upgrades.sacrifice.verbose_description":"Le combo pourrait monter assez haut.","upgrades.sapper.help_plural":"Les premi\xe8res briques {{lvl}} cass\xe9es deviennent des bombes.","upgrades.sapper.name":"Sapeur","upgrades.sapper.tooltip":"La premi\xe8re brique cass\xe9e devient une bombe.","upgrades.sapper.verbose_description":"Au lieu de dispara\xeetre, la premi\xe8re brique cass\xe9e est remplac\xe9e par une bombe. Faire rebondir la balle sur la raquette r\xe9arme l\'effet. En montant en niveau, vous pourrez placer plus de bombes.","upgrades.shocks.name":"Choc","upgrades.shocks.tooltip":"Collision explosive entre les balles","upgrades.shocks.verbose_description":"Quand deux balles entrent en collision, elles \xe9changent leurs vitesse, cr\xe9ent une explosion et gagnent un peu de vitesse qui les s\xe9pare. ","upgrades.shunt.name":"Shunt","upgrades.shunt.tooltip":"Garer {{percent}}% du combo au changement de niveau ","upgrades.shunt.verbose_description":"D\xe9marrage \xe0 chaud sera simplement ajout\xe9 au combo actuel","upgrades.side_flip.name":"Droitier","upgrades.side_flip.tooltip":"+{{lvl}} combo par brique cass\xe9 de la droite, -{{loss}} sinon","upgrades.side_flip.verbose_description":"Impactez la brique sur son c\xf4t\xe9 droit pour obtenir un combo, mais \xe9vitez de la frapper sur son c\xf4t\xe9 gauche, car cela annulerait deux combos. Frapper du haut et du bas n\'a aucun effet.","upgrades.side_kick.name":"Gaucher","upgrades.side_kick.tooltip":"+{{lvl}} combo par brique cass\xe9 de la gauche, -{{loss}} sinon","upgrades.side_kick.verbose_description":"Impactez la brique sur son c\xf4t\xe9 gauche pour obtenir un combo, mais \xe9vitez de la frapper sur son c\xf4t\xe9 droit, car cela annulerait deux combos. Frapper du haut et du bas n\'a aucun effet.","upgrades.skip_last.help_plural":"Les {{lvl}} derni\xe8res briques restantes s\'autod\xe9truiront","upgrades.skip_last.name":"Nettoyage facile","upgrades.skip_last.tooltip":"La derni\xe8re brique s\'autod\xe9truit.","upgrades.skip_last.verbose_description":"Vous devez casser toutes les briques pour passer au niveau suivant. \\n\\nCependant, il peut \xeatre difficile d\'obtenir les derni\xe8res briques.\\n\\nTerminer un niveau plus t\xf4t permet d\'obtenir des choix suppl\xe9mentaires lors de la mise \xe0 niveau. \\n\\nNe jamais manquer de briques est \xe9galement tr\xe8s avantageux.\\n\\nDonc, si vous avez du mal \xe0 casser les derni\xe8res briques, obtenir cet avantage plusieurs fois peut vous aider.","upgrades.slow_down.name":"Balle lente","upgrades.slow_down.tooltip":"La balle se d\xe9place plus lentement","upgrades.slow_down.verbose_description":"La balle d\xe9marre relativement lentement, mais \xe0 chaque niveau de votre partie, elle d\xe9marre un peu plus vite, et elle acc\xe9l\xe8re \xe9galement si vous passez beaucoup de temps dans un niveau.\\n\\nCet avantage rend la balle plus facile \xe0 g\xe9rer. \\n\\nVous pouvez l\'obtenir au d\xe9but de chaque partie en activant le mode enfant dans le menu.","upgrades.smaller_puck.help_plural":"La raquette r\xe9tr\xe9cie encore et le combo augmente encore.","upgrades.smaller_puck.name":"Raquette plus petite","upgrades.smaller_puck.tooltip":"Donne aussi +5 combo","upgrades.smaller_puck.verbose_description":"Vous b\xe9n\xe9ficiez d\'un bonus permanent de +5 combo pour avoir choisi cette am\xe9lioration.","upgrades.soft_reset.name":"R\xe9initialisation progressive","upgrades.soft_reset.tooltip":"La remise \xe0 z\xe9ro du combo conserve {{percent}}% des points","upgrades.soft_reset.verbose_description":"Limite l\'impact d\'une r\xe9initialisation du combo.","upgrades.streak_shots.name":"S\xe9quence de destruction","upgrades.streak_shots.tooltip":"Plus de pi\xe8ces si vous cassez plusieurs briques \xe0 la fois.","upgrades.streak_shots.verbose_description":"Chaque fois que vous cassez une brique, votre combo augmente. Le combo est remis \xe0 z\xe9ro quand la balle touche la raquette. Une fois que votre combo d\xe9passe la valeur de base, votre raquette devient rouge pour vous rappeler que le fait de la toucher avec la balle d\xe9truira votre combo.","upgrades.sturdy_bricks.name":"Briques solides","upgrades.sturdy_bricks.tooltip":"+{{lvl}} points de vie des briques, +{{percent}}% pi\xe8ces quand elles sont d\xe9truites","upgrades.sturdy_bricks.verbose_description":"Chaque niveau de cet am\xe9lioration ajoute un PV \xe0 toutes les briques. Vous pouvez consulter le nombre de PV avec l\'avantage \\"clairvoyant\\". Vous pouvez augmenter les d\xe9g\xe2ts des balles en obtenant l\'am\xe9lioration \\"Balle per\xe7ante\\". Chaque niveau de cet am\xe9lioration ajoute 50% de pi\xe8ces en plus.","upgrades.superhot.name":"SUPER HOT","upgrades.superhot.tooltip":"Le temps avance quand la raquette bouge. ","upgrades.superhot.verbose_description":"SUPER HOT SUPER HOT SUPER HOT SUPER HOT","upgrades.telekinesis.help_plural":"Effet plus fort sur la balle","upgrades.telekinesis.name":"T\xe9l\xe9kin\xe9sie","upgrades.telekinesis.tooltip":"Contr\xf4ler la trajectoire de la balle","upgrades.telekinesis.verbose_description":"Vous contr\xf4lez la balle pendant qu\'elle monte.","upgrades.top_is_lava.name":"Icare ","upgrades.top_is_lava.tooltip":"+{{lvl}} combo par brique, perdu en cas de rebond au plafond","upgrades.top_is_lava.verbose_description":"Chaque fois que vous cassez une brique, votre combo augmente d\'une unit\xe9. Cependant, votre combo sera r\xe9initialis\xe9 d\xe8s que votre balle atteindra le haut de l\'\xe9cran.\\n\\nLorsque votre combo est sup\xe9rieur au minimum, une barre rouge appara\xeet en haut de l\'\xe9cran pour vous rappeler que vous devez \xe9viter de la frapper.","upgrades.trampoline.name":"Trampoline","upgrades.trampoline.tooltip":"+{{lvl}} combo \xe0 chaque rebond d\'une balle sur la raquette,-{{lvl}} combo \xe0 chaque rebond sur un des bords","upgrades.trampoline.verbose_description":"Une des rares am\xe9liorations \xe0 ne pas avoir de condition de remise \xe0 z\xe9ro","upgrades.transparency.name":"Camouflage","upgrades.transparency.tooltip":"Plus la balle est haut \xe0 l\'\xe9cran, plus elle devient transparente et plus elle produit de pi\xe8ces (+{{percent}} % \xe0 transparence maximum).","upgrades.transparency.verbose_description":"Les niveaux plus \xe9lev\xe9s rendent la balle transparente plus t\xf4t et augmentent le bonus de points.","upgrades.trickledown.name":"Ruissellement","upgrades.trickledown.tooltip":"Les pi\xe8ces apparaissent en haut de l\'\xe9cran.","upgrades.trickledown.verbose_description":"\xc7a pourrait vous aider \xe0 mettre des pi\xe8ces de cot\xe9. ","upgrades.unbounded.name":"Besoin d\'espace","upgrades.unbounded.tooltip":"Plus d\'espace autour des briques, mais la raquette ne peut pas aller aussi loin.","upgrades.unbounded.verbose_description":"Une autre am\xe9lioration pourrait vous permettre d\'\xe9tendre la port\xe9e de votre raquette.","upgrades.viscosity.name":"Fluide visqueux ","upgrades.viscosity.tooltip":"Chute plus lente des pi\xe8ces","upgrades.viscosity.verbose_description":"Les pi\xe8ces acc\xe9l\xe8rent normalement avec la gravit\xe9 et les explosions pour atteindre des vitesses assez \xe9lev\xe9es. \\n\\nCette comp\xe9tence les ralentit constamment, comme si elles se trouvaient dans une sorte de liquide visqueux.\\n\\nCela permet de les attraper plus facilement et se combine bien avec les am\xe9liorations qui influencent le mouvement de la pi\xe8ce.","upgrades.wind.help_plural":"Force du vent plus importante","upgrades.wind.name":"Vive le vent","upgrades.wind.tooltip":"La position de la raquette cr\xe9e du vent","upgrades.wind.verbose_description":"Le vent d\xe9pend de la position de la raquette \xe0 l\'\xe9cran, vers la gauche s\'il est \xe0 gauche, vers la droite s\'il est \xe0 droite. \\nAffecte les balles et les pi\xe8ces.","upgrades.yoyo.name":"Yo-yo","upgrades.yoyo.tooltip":"La balle se dirige vers la raquette en descendant.","upgrades.yoyo.verbose_description":"C\'est l\'inverse de T\xe9l\xe9kin\xe9sie, contr\xf4lez la balle alors qu\'elle redescend vers la raquette.","upgrades.zen.name":"Zen","upgrades.zen.tooltip":"+{{lvl}} combo par brique, jusqu\'\xe0 ce qu\'il y ait une explosion","upgrades.zen.verbose_description":"C\'est quand m\xeame un jeu non violent \xe0 la base."}');
},{}],"aDOut":[function(require,module,exports,__globalThis) {
module.exports = JSON.parse('{"confirmRestart.no":"\u064A\u0644\u063A\u064A","confirmRestart.text":"\u0623\u0646\u062A \u0639\u0644\u0649 \u0648\u0634\u0643 \u0628\u062F\u0621 \u0644\u0639\u0628\u0629 \u062C\u062F\u064A\u062F\u0629. \u0647\u0644 \u0623\u0646\u062A \u0645\u062A\u0623\u0643\u062F \u0645\u0646 \u0631\u063A\u0628\u062A\u0643 \u0641\u064A \u0627\u0644\u0645\u062A\u0627\u0628\u0639\u0629\u061F","confirmRestart.title":"\u0628\u062F\u0621 \u0644\u0639\u0628\u0629 \u062C\u062F\u064A\u062F\u0629\u061F","confirmRestart.yes":"\u0625\u0639\u0627\u062F\u0629 \u062A\u0634\u063A\u064A\u0644 \u0627\u0644\u0644\u0639\u0628\u0629","editor.editing.bigger":"\u0632\u064A\u0627\u062F\u0629 \u062D\u062C\u0645 \u0627\u0644\u0645\u0633\u062A\u0648\u0649","editor.editing.color":"\u0627\u062E\u062A\u0631 \u0644\u0648\u0646\u064B\u0627 \u0645\u0646 \u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0623\u0644\u0648\u0627\u0646 (\u0628\u062D\u062F \u0623\u0642\u0635\u0649 5 \u0644\u0643\u0644 \u0645\u0633\u062A\u0648\u0649)","editor.editing.copy":"\u0646\u0633\u062E \u0631\u0645\u0632 \u0627\u0644\u0645\u0633\u062A\u0648\u0649","editor.editing.copy_help":"\u0623\u0644\u0635\u0642\u0647 \u0641\u064A \u0642\u0646\u0627\u0629 #levels \u0641\u064A Discord \u0627\u0644\u062E\u0627\u0635 \u0628\u0646\u0627","editor.editing.credit":"\u0627\u0644\u0627\u0639\u062A\u0645\u0627\u062F\u0627\u062A \u0648\u0627\u0644\u0645\u0635\u062F\u0631","editor.editing.credit_prompt":"\u0623\u062F\u062E\u0644 \u0639\u0646\u0648\u0627\u0646 URL \u0627\u0644\u0645\u0635\u062F\u0631 \u0623\u0648 \u0634\u0631\u062D\u064B\u0627 \u0644\u0645\u0633\u062A\u0648\u0627\u0643.","editor.editing.delete":"\u062D\u0630\u0641 \u0627\u0644\u0645\u0633\u062A\u0648\u0649","editor.editing.down":"\u0627\u0646\u0632\u0644 \u0643\u0644 \u0627\u0644\u0637\u0648\u0628 \u0625\u0644\u0649 \u0627\u0644\u0623\u0633\u0641\u0644","editor.editing.help":"\u062B\u0645 \u0627\u0646\u0642\u0631 \u0639\u0644\u0649 \u0627\u0644\u0628\u0644\u0627\u0637 \u0644\u062A\u0644\u0648\u064A\u0646\u0647.","editor.editing.left":"\u0646\u0642\u0644 \u062C\u0645\u064A\u0639 \u0627\u0644\u0637\u0648\u0628 \u0625\u0644\u0649 \u0627\u0644\u064A\u0633\u0627\u0631","editor.editing.play":"\u0627\u0644\u0639\u0628 \u0647\u0630\u0627 \u0627\u0644\u0645\u0633\u062A\u0648\u0649","editor.editing.rename":"\u0627\u0633\u0645 \u0627\u0644\u0645\u0633\u062A\u0648\u0649","editor.editing.rename_prompt":"\u0627\u0644\u0631\u062C\u0627\u0621 \u0625\u062F\u062E\u0627\u0644 \u0627\u0633\u0645 \u062C\u062F\u064A\u062F \u0644\u0644\u0645\u0633\u062A\u0648\u0649","editor.editing.right":"\u062D\u0631\u0643 \u0643\u0644 \u0627\u0644\u0637\u0648\u0628 \u0625\u0644\u0649 \u0627\u0644\u064A\u0645\u064A\u0646","editor.editing.smaller":"\u062A\u0642\u0644\u064A\u0644 \u062D\u062C\u0645 \u0627\u0644\u0645\u0633\u062A\u0648\u0649","editor.editing.title":"\u0645\u0633\u062A\u0648\u0649 \u0627\u0644\u062A\u062D\u0631\u064A\u0631: {{name}}","editor.editing.up":"\u062D\u0631\u0643 \u0643\u0644 \u0627\u0644\u0637\u0648\u0628 \u0644\u0623\u0639\u0644\u0649","editor.help":"\u0625\u0646\u0634\u0627\u0621 \u0645\u0633\u062A\u0648\u064A\u0627\u062A \u0645\u062E\u0635\u0635\u0629 \u0648\u0645\u0634\u0627\u0631\u0643\u062A\u0647\u0627 \u0644\u062A\u0636\u0645\u064A\u0646\u0647\u0627 \u0641\u064A \u0627\u0644\u0644\u0639\u0628\u0629.","editor.import":"\u0627\u0633\u062A\u064A\u0631\u0627\u062F \u0627\u0644\u0645\u0633\u062A\u0648\u0649","editor.import_instruction":"\u0627\u0644\u0635\u0642 \u0631\u0645\u0632 \u0627\u0644\u0645\u0633\u062A\u0648\u0649 \u0644\u0627\u0633\u062A\u064A\u0631\u0627\u062F\u0647 \u0641\u064A \u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0645\u0633\u062A\u0648\u064A\u0627\u062A \u0627\u0644\u062E\u0627\u0635\u0629 \u0628\u0643","editor.locked":"\u0627\u062D\u0635\u0644 \u0639\u0644\u0649 \u0645\u062C\u0645\u0648\u0639 \u0646\u0642\u0627\u0637 \u0642\u062F\u0631\u0647 {{min}} \u0644\u0641\u062A\u062D \u0627\u0644\u0642\u0641\u0644","editor.new_level":"\u0645\u0633\u062A\u0648\u0649 \u062C\u062F\u064A\u062F","editor.title":"\u0645\u062D\u0631\u0631 \u0627\u0644\u0645\u0633\u062A\u0648\u064A\u0627\u062A","gameOver.creative":"\u0644\u0646 \u064A\u062A\u0645 \u062A\u0633\u062C\u064A\u0644 \u0647\u0630\u0627 \u0627\u0644\u062A\u0634\u063A\u064A\u0644.","gameOver.cumulative_total":"\u0644\u0642\u062F \u0627\u0631\u062A\u0641\u0639 \u0645\u062C\u0645\u0648\u0639 \u062F\u0631\u062C\u0627\u062A\u0643 \u0627\u0644\u062A\u0631\u0627\u0643\u0645\u064A\u0629 \u0645\u0646 {{startTs}} \u0625\u0644\u0649 {{endTs}}.","gameOver.lost.summary":"\u0644\u0642\u062F \u0623\u0633\u0642\u0637\u062A \u0627\u0644\u0643\u0631\u0629 \u0628\u0639\u062F \u0627\u0644\u062A\u0642\u0627\u0637 {{score}} \u0642\u0637\u0639\u0629 \u0646\u0642\u062F\u064A\u0629.","gameOver.lost.title":"\u0627\u0646\u062A\u0647\u062A \u0627\u0644\u0644\u0639\u0628\u0629","gameOver.stats.balls_lost":"\u0627\u0644\u0643\u0631\u0627\u062A \u0627\u0644\u0645\u0641\u0642\u0648\u062F\u0629","gameOver.stats.bricks_broken":"\u0627\u0644\u0637\u0648\u0628 \u0627\u0644\u0645\u0643\u0633\u0648\u0631","gameOver.stats.bricks_per_minute":"\u0639\u062F\u062F \u0627\u0644\u0637\u0648\u0628 \u0627\u0644\u0645\u0643\u0633\u0648\u0631 \u0641\u064A \u0627\u0644\u062F\u0642\u064A\u0642\u0629","gameOver.stats.catch_rate":"\u0645\u0639\u062F\u0644 \u0627\u0644\u0635\u064A\u062F","gameOver.stats.combo_avg":"\u0645\u062C\u0645\u0648\u0639\u0629 \u0645\u062A\u0648\u0633\u0637\u0629","gameOver.stats.combo_max":"\u0623\u0642\u0635\u0649 \u0645\u062C\u0645\u0648\u0639\u0629","gameOver.stats.duration_per_level":"\u0627\u0644\u0645\u062F\u0629 \u0644\u0643\u0644 \u0645\u0633\u062A\u0648\u0649","gameOver.stats.hit_rate":"\u0645\u0639\u062F\u0644 \u0627\u0644\u0625\u0635\u0627\u0628\u0629","gameOver.stats.intro":"","gameOver.stats.level_reached":"\u0627\u0644\u0645\u0633\u062A\u0648\u0649 \u0627\u0644\u0630\u064A \u062A\u0645 \u0627\u0644\u0648\u0635\u0648\u0644 \u0625\u0644\u064A\u0647","gameOver.stats.total_score":"\u0645\u062C\u0645\u0648\u0639 \u0627\u0644\u0646\u0642\u0627\u0637","gameOver.stats.upgrades_applied":"\u062A\u0645 \u062A\u0637\u0628\u064A\u0642 \u0627\u0644\u062A\u0631\u0642\u064A\u0627\u062A","gameOver.stats_intro":"\u0627\u0628\u062D\u062B \u0623\u062F\u0646\u0627\u0647 \u0639\u0646 \u0625\u062D\u0635\u0627\u0626\u064A\u0627\u062A \u0644\u0639\u0628\u062A\u0643 \u0645\u0642\u0627\u0631\u0646\u0629\u064B \u0628\u0623\u0641\u0636\u0644 {{count}} \u0623\u0644\u0639\u0627\u0628 \u0644\u062F\u064A\u0643.","gameOver.unlocked_perk":"\u062A\u0645 \u0625\u0644\u063A\u0627\u0621 \u0642\u0641\u0644 \u0627\u0644\u062A\u0631\u0642\u064A\u0629","gameOver.unlocked_perk_plural":"\u0644\u0642\u062F \u0642\u0645\u062A \u0644\u0644\u062A\u0648 \u0628\u0641\u062A\u062D {{count}} \u0645\u0646 \u0627\u0644\u0627\u0645\u062A\u064A\u0627\u0632\u0627\u062A","gameOver.win.summary":"\u0627\u0646\u062A\u0647\u062A \u0627\u0644\u0644\u0639\u0628\u0629. \u0644\u0642\u062F \u062C\u0645\u0639\u062A {{score}} \u0639\u0645\u0644\u0629.","gameOver.win.title":"\u0644\u0642\u062F \u0623\u0643\u0645\u0644\u062A \u0647\u0630\u0647 \u0627\u0644\u0644\u0639\u0628\u0629","help.content":"## \u0627\u0644\u0647\u062F\u0641\\n\\n\u0627\u062C\u0645\u0639 \u0623\u0643\u0628\u0631 \u0639\u062F\u062F \u0645\u0645\u0643\u0646 \u0645\u0646 \u0627\u0644\u0639\u0645\u0644\u0627\u062A \u0627\u0644\u0645\u0639\u062F\u0646\u064A\u0629 \u062E\u0644\u0627\u0644 7 \u0645\u0633\u062A\u0648\u064A\u0627\u062A.\\n\\n\u062A\u0638\u0647\u0631 \u0627\u0644\u0639\u0645\u0644\u0627\u062A \u0627\u0644\u0645\u0639\u062F\u0646\u064A\u0629 \u0639\u0646\u062F \u0643\u0633\u0631 \u0627\u0644\u0637\u0648\u0628.\\n\\n\u0627\u062C\u0645\u0639\u0647\u0627 \u0628\u0645\u062C\u062F\u0627\u0641\u0643 \u0644\u0632\u064A\u0627\u062F\u0629 \u0646\u0642\u0627\u0637\u0643.\\n\\n\u062A\u0638\u0647\u0631 \u0646\u0642\u0627\u0637\u0643 \u0641\u064A \u0627\u0644\u0632\u0627\u0648\u064A\u0629 \u0627\u0644\u0639\u0644\u0648\u064A\u0629 \u0627\u0644\u064A\u0645\u0646\u0649 \u0645\u0646 \u0627\u0644\u0634\u0627\u0634\u0629.\\n\\n\u0644\u0627 \u062A\u0633\u0642\u0637 \u0627\u0644\u0643\u0631\u0629 \u0648\u0625\u0644\u0627 \u0633\u062A\u0646\u062A\u0647\u064A \u0627\u0644\u0644\u0639\u0628\u0629.\\n\\n\u0628\u0639\u062F \u062A\u062F\u0645\u064A\u0631 \u062C\u0645\u064A\u0639 \u0627\u0644\u0637\u0648\u0628\u060C \u0633\u062A\u062A\u0645\u0643\u0646 \u0645\u0646 \u0627\u062E\u062A\u064A\u0627\u0631 \u062A\u0631\u0642\u064A\u0629.\\n\\n## \u0627\u0644\u062A\u0631\u0642\u064A\u0627\u062A\\n\\n\u0633\u062A\u064F\u0637\u0628\u0642 \u0627\u0644\u062A\u0631\u0642\u064A\u0627\u062A \u0627\u0644\u062A\u064A \u062A\u062E\u062A\u0627\u0631\u0647\u0627 \u062D\u062A\u0649 \u0646\u0647\u0627\u064A\u0629 \u0627\u0644\u062C\u0648\u0644\u0629.\\n\\n\u064A\u0645\u0643\u0646 \u0627\u062E\u062A\u064A\u0627\u0631 \u0628\u0639\u0636\u0647\u0627 \u0639\u062F\u0629 \u0645\u0631\u0627\u062A \u0644\u062A\u0623\u062B\u064A\u0631 \u0623\u0642\u0648\u0649.\\n\\n\u0628\u0639\u0636\u0647\u0627 \u064A\u064F\u0633\u0627\u0639\u062F \u0641\u064A \u0627\u0644\u062A\u0635\u0648\u064A\u0628\u060C \u0623\u0648 \u064A\u064F\u0633\u0647\u0651\u0644 \u0627\u0644\u0644\u0639\u0628\u0629 \u0628\u0637\u0631\u0642 \u0623\u062E\u0631\u0649.\\n\\n\u0628\u0639\u0636\u0647\u0627 \u0644\u0627 \u064A\u064F\u0641\u064A\u062F \u0625\u0644\u0627 \u0639\u0646\u062F \u062F\u0645\u062C\u0647.\\n\\n\u0633\u062A\u062D\u0635\u0644 \u062F\u0627\u0626\u0645\u064B\u0627 \u0639\u0644\u0649 \u062A\u0631\u0642\u064A\u0629 \u0648\u0627\u062D\u062F\u0629 \u0641\u064A \u0628\u062F\u0627\u064A\u0629 \u0643\u0644 \u0644\u0639\u0628\u0629.\\n\\n\u0633\u064A\u0643\u0648\u0646 \u0631\u0645\u0632\u0647\u0627 \u0628\u0645\u062B\u0627\u0628\u0629 \u0637\u0648\u0628 \u0627\u0644\u0645\u0633\u062A\u0648\u0649 \u0627\u0644\u0623\u0648\u0644.\\n\\n\u064A\u0645\u0643\u0646\u0643 \u0627\u062E\u062A\u064A\u0627\u0631 \u062A\u0631\u0642\u064A\u0627\u062A \u0627\u0644\u0628\u062F\u0621 \u0645\u0646 \u0627\u0644\u0625\u0639\u062F\u0627\u062F\u0627\u062A.\\n\\n\u062A\u0624\u062B\u0631 \u0627\u0644\u0639\u062F\u064A\u062F \u0645\u0646 \u0627\u0644\u062A\u0631\u0642\u064A\u0627\u062A \u0639\u0644\u0649 \u0645\u062C\u0645\u0648\u0639\u062A\u0643.\\n\\n## \u0627\u0644\u0645\u062C\u0645\u0648\u0639\u0629\\n\\n\\"\u0645\u062C\u0645\u0648\u0639\u062A\u0643\\" \u0647\u064A \u0639\u062F\u062F \u0627\u0644\u0639\u0645\u0644\u0627\u062A \u0627\u0644\u0645\u0639\u062F\u0646\u064A\u0629 \u0627\u0644\u062A\u064A \u062A\u0638\u0647\u0631 \u0639\u0646\u062F \u0643\u0633\u0631 \u0637\u0648\u0628\u0629.\\n\u064A\u0638\u0647\u0631 \u0630\u0644\u0643 \u0639\u0644\u0649 \u0645\u062C\u062F\u0627\u0641\u0643\u060C \u0639\u0644\u0649 \u0633\u0628\u064A\u0644 \u0627\u0644\u0645\u062B\u0627\u0644\u060C x4 \u064A\u0639\u0646\u064A \u0623\u0646 \u0643\u0644 \u0645\u0643\u0639\u0628 \u0633\u064A\u064F\u0646\u062A\u062C 4 \u0639\u0645\u0644\u0627\u062A.\\n\\n\u0645\u0639\u0638\u0645 \u0627\u0644\u062A\u0631\u0642\u064A\u0627\u062A \u0627\u0644\u062A\u064A \u062A\u0632\u064A\u062F \u0645\u0646 \u0642\u0648\u0629 \u0627\u0644\u0645\u062C\u0645\u0648\u0639\u0629 \u062A\u064F\u0636\u064A\u0641 \u0634\u0631\u0637\u064B\u0627 \u0644\u0625\u0639\u0627\u062F\u0629 \u0636\u0628\u0637\u0647\u0627.\\n\\n\u0643\u0645\u0627 \u064A\u064F\u0639\u0627\u062F \u0636\u0628\u0637 \u0627\u0644\u0645\u062C\u0645\u0648\u0639\u0629 \u0625\u0630\u0627 \u0639\u0627\u062F\u062A \u0627\u0644\u0643\u0631\u0629 \u0625\u0644\u0649\\n\\n\u062F\u0648\u0646 \u0623\u0646 \u062A\u0635\u0637\u062F\u0645 \u0628\u0623\u064A \u0645\u0643\u0639\u0628.\\n\\n\u0633\u062A\u0638\u0647\u0631 \u0631\u0633\u0627\u0644\u0629 \\"\u062E\u0637\u0623\\" \u0639\u0646\u062F \u062D\u062F\u0648\u062B \u0630\u0644\u0643.\\n\\n\u062D\u0627\u0648\u0644 \u0627\u0644\u062A\u0635\u0648\u064A\u0628 \u0646\u062D\u0648 \u0645\u0643\u0639\u0628 \u0641\u064A \u0643\u0644 \u0645\u0631\u0629.\\n\\n## \u0627\u0644\u062A\u0635\u0648\u064A\u0628\\n\\n\u0645\u0648\u0636\u0639 \u0627\u0644\u0643\u0631\u0629 \u0639\u0644\u0649 \u0627\u0644\u0645\u062C\u062F\u0627\u0641 \u0647\u0648 \u0645\u0627 \u064A\u064F\u062D\u062F\u062F \u0643\u064A\u0641\u064A\u0629 \u0627\u0631\u062A\u062F\u0627\u062F\u0647\u0627.\\n\\n\u0625\u0630\u0627 \u0627\u0635\u0637\u062F\u0645\u062A \u0627\u0644\u0643\u0631\u0629 \u0628\u0627\u0644\u0645\u062C\u062F\u0627\u0641 \u0641\u064A \u0645\u0646\u062A\u0635\u0641\u0647 \u062A\u0645\u0627\u0645\u064B\u0627\u060C \u0633\u062A\u0631\u062A\u062F \u0639\u0645\u0648\u062F\u064A\u064B\u0627.\\n\\n\u0625\u0630\u0627 \u0636\u0631\u0628\u062A \u0623\u0643\u062B\u0631 \u0639\u0644\u0649 \u062C\u0627\u0646\u0628 \u0648\u0627\u062D\u062F\u060C \u0633\u062A\u0643\u0648\u0646 \u0632\u0627\u0648\u064A\u0629 \u0627\u0631\u062A\u062F\u0627\u062F\u0647\u0627 \u0623\u0643\u0628\u0631.\\n\\n\u0644\u0627 \u062A\u0624\u062B\u0631 \u0633\u0631\u0639\u0629 \u0627\u0644\u0645\u062C\u062F\u0627\u0641 \u0648\u0632\u0627\u0648\u064A\u0629 \u062F\u062E\u0648\u0644\u0647 \u0639\u0644\u0649 \u0627\u062A\u062C\u0627\u0647 \u0627\u0644\u0643\u0631\u0629 \u0628\u0639\u062F \u0627\u0631\u062A\u062F\u0627\u062F\u0647\u0627.\\n\\n\u064A\u0645\u0643\u0646 \u0641\u062A\u062D \u0627\u0644\u0639\u062F\u064A\u062F \u0645\u0646 \u0627\u0644\u062A\u0631\u0642\u064A\u0627\u062A \u0627\u0644\u062A\u064A \u062A\u064F\u0633\u0627\u0639\u062F \u0641\u064A \u0627\u0644\u062A\u0635\u0648\u064A\u0628.\\n\\n## \u0627\u0644\u0641\u062A\u062D\\n\\n\u0639\u0646\u062F \u0644\u0639\u0628 Breakout 71 \u0644\u0623\u0648\u0644 \u0645\u0631\u0629\u060C \u062A\u0643\u0648\u0646 \u0645\u0639\u0638\u0645 \u0627\u0644\u062A\u0631\u0642\u064A\u0627\u062A \u0648\u0627\u0644\u0645\u0633\u062A\u0648\u064A\u0627\u062A \u0645\u0642\u0641\u0644\u0629.\\n\\n\u064A\u062A\u0645 \u0641\u062A\u062D \u0627\u0644\u062A\u0631\u0642\u064A\u0627\u062A \u0628\u0645\u062C\u0631\u062F \u0627\u0644\u0644\u0639\u0628 \u0648\u062C\u0645\u0639 \u0627\u0644\u0639\u062F\u064A\u062F \u0645\u0646 \u0627\u0644\u0639\u0645\u0644\u0627\u062A.\\n\u062A\u064F\u0641\u062A\u062D \u0627\u0644\u0645\u0633\u062A\u0648\u064A\u0627\u062A \u0627\u0644\u0623\u0648\u0644\u0649 \u0639\u0646\u062F \u062A\u062D\u0642\u064A\u0642 \u0623\u0639\u0644\u0649 \u0646\u062A\u064A\u062C\u0629.\\n\\n\u062A\u064F\u0636\u064A\u0641 \u0627\u0644\u0645\u0633\u062A\u0648\u064A\u0627\u062A \u0627\u0644\u0644\u0627\u062D\u0642\u0629 \u0634\u0631\u0637\u064B\u0627 \u0644\u0627\u062E\u062A\u064A\u0627\u0631 \u0627\u0644\u0645\u0632\u0627\u064A\u0627.\\n\\n\u064A\u0635\u0628\u062D \u062A\u062D\u0642\u064A\u0642 \u0623\u0639\u0644\u0649 \u0627\u0644\u0646\u062A\u0627\u0626\u062C \u0623\u0633\u0647\u0644 \u0628\u0643\u062B\u064A\u0631 \u0639\u0646\u062F \u062D\u0635\u0648\u0644\u0643 \u0639\u0644\u0649 \u062A\u0631\u0642\u064A\u0627\u062A \u0645\u062A\u0639\u062F\u062F\u0629 \u0628\u0639\u062F \u0643\u0644 \u0645\u0633\u062A\u0648\u0649.\\n\\n## \u0625\u0639\u0627\u062F\u0629 \u0631\u0645\u064A \u0627\u0644\u0646\u0631\u062F \u0648\u0627\u0644\u062A\u0631\u0642\u064A\u0627\u062A \u0627\u0644\u0645\u062C\u0627\u0646\u064A\u0629\\n\\n\u0633\u062A\u062D\u0635\u0644 \u0639\u0644\u0649 \u062A\u0631\u0642\u064A\u0629 \u0625\u0636\u0627\u0641\u064A\u0629 \u0644\u0627\u062E\u062A\u064A\u0627\u0631\u0647\u0627 \u0639\u0646\u062F \u0644\u0639\u0628\u0643 \u0627\u0644\u062C\u064A\u062F:\\n\\n- \u0625\u0643\u0645\u0627\u0644 \u0627\u0644\u0645\u0633\u062A\u0648\u0649 \u0641\u064A \u0623\u0642\u0644 \u0645\u0646 {{levelTimeGood}} \u062B\u0627\u0646\u064A\u0629\\n- \u0636\u0631\u0628 \u0627\u0644\u062C\u0648\u0627\u0646\u0628 \u0623\u0648 \u0627\u0644\u0642\u0645\u0629 \u0623\u0642\u0644 \u0645\u0646 {{wallBouncedGood}} \u0645\u0631\u0629\\n- \u0627\u0644\u062A\u0642\u0627\u0637 {{catchRateGood}}% \u0645\u0646 \u0627\u0644\u0639\u0645\u0644\u0627\u062A\\n- \u062A\u0641\u0648\u064A\u062A \u0627\u0644\u0637\u0648\u0628 \u0623\u0642\u0644 \u0645\u0646 {{missesGood}} \u0645\u0631\u0627\u062A\\n\\n\u0633\u062A\u062D\u0635\u0644 \u0623\u064A\u0636\u064B\u0627 \u0639\u0644\u0649 \u0625\u0639\u0627\u062F\u0629 \u0631\u0645\u064A \u0646\u0631\u062F \u062A\u062A\u064A\u062D \u0644\u0643 \u062A\u062E\u0637\u064A \u0627\u0644\u062A\u0631\u0642\u064A\u0627\u062A \u0625\u0630\u0627 \u0643\u0627\u0646 \u0623\u062F\u0627\u0624\u0643 \u0623\u0641\u0636\u0644:\\n\\n- \u0625\u0643\u0645\u0627\u0644 \u0627\u0644\u0645\u0633\u062A\u0648\u0649 \u0641\u064A \u0623\u0642\u0644 \u0645\u0646 {{levelTimeBest}} \u062B\u0627\u0646\u064A\u0629\\n- \u0636\u0631\u0628 \u0627\u0644\u062C\u0648\u0627\u0646\u0628 \u0623\u0648 \u0627\u0644\u0642\u0645\u0629 \u0623\u0642\u0644 \u0645\u0646 {{wallBouncedBest}} \u0645\u0631\u0627\u062A\\n- \u0627\u0644\u062A\u0642\u0627\u0637 {{catchRateBest}}% \u0645\u0646 \u0627\u0644\u0639\u0645\u0644\u0627\u062A\\n- \u062A\u0641\u0648\u064A\u062A \u0627\u0644\u0637\u0648\u0628 \u0623\u0642\u0644 \u0645\u0646 {{missesBest}} \u0645\u0631\u0627\u062A\\n\\n\u064A\u064F\u062A\u064A\u062D \u0644\u0643 \u062E\u064A\u0627\u0631 \u0641\u064A \u0627\u0644\u0625\u0639\u062F\u0627\u062F\u0627\u062A \u0639\u0631\u0636 \u0647\u0630\u0647 \u0627\u0644\u0625\u062D\u0635\u0627\u0626\u064A\u0627\u062A","help.help":"\u062A\u0639\u0631\u0641 \u0639\u0644\u0649 \u0627\u0644\u0645\u0632\u064A\u062F \u062D\u0648\u0644 \u0627\u0644\u0644\u0639\u0628\u0629","help.levels":"\u0627\u0644\u0645\u0633\u062A\u0648\u064A\u0627\u062A","help.title":"\u064A\u0633\u0627\u0639\u062F","help.upgrades":"## \u0627\u0644\u062A\u0631\u0642\u064A\u0627\u062A","history.columns.score":"\u0646\u062A\u064A\u062C\u0629","history.columns.started":"\u062A\u0627\u0631\u064A\u062E","history.help":"\u0634\u0627\u0647\u062F \u0623\u0641\u0636\u0644 \u0623\u0644\u0639\u0627\u0628\u0643 {{count}} .","history.locked":"\u0627\u0644\u0639\u0628 \u0639\u0634\u0631 \u0645\u0628\u0627\u0631\u064A\u0627\u062A \u0639\u0644\u0649 \u0627\u0644\u0623\u0642\u0644 \u0644\u0641\u062A\u062D \u0627\u0644\u0642\u0641\u0644","history.title":"\u0633\u062C\u0644 \u0627\u0644\u062A\u0634\u063A\u064A\u0644","lab.help":"\u062C\u0631\u0628 \u0623\u064A \u0628\u0646\u0627\u0621 \u062A\u0631\u064A\u062F\u0647","lab.instructions":"\u0642\u0645 \u0628\u062A\u062D\u062F\u064A\u062F \u0627\u0644\u062A\u0631\u0642\u064A\u0627\u062A \u0623\u062F\u0646\u0627\u0647\u060C \u062B\u0645 \u0627\u062E\u062A\u0631 \u0627\u0644\u0645\u0633\u062A\u0648\u0649 \u0644\u0644\u0639\u0628.","lab.menu_entry":"\u0627\u0644\u0648\u0636\u0639 \u0627\u0644\u0625\u0628\u062F\u0627\u0639\u064A","lab.reset":"\u0625\u0639\u0627\u062F\u0629 \u062A\u0639\u064A\u064A\u0646 \u0627\u0644\u0643\u0644 \u0625\u0644\u0649 0","lab.select_level":"\u062D\u062F\u062F \u0627\u0644\u0645\u0633\u062A\u0648\u0649 \u0644\u0644\u0639\u0628 \u0639\u0644\u064A\u0647","lab.unlocks_at":"\u064A\u062A\u0645 \u0641\u062A\u062D\u0647 \u0639\u0646\u062F \u0625\u062C\u0645\u0627\u0644\u064A \u0627\u0644\u0646\u062A\u064A\u062C\u0629 {{score}}","level_up.after_buttons":"\u0644\u0642\u062F \u0627\u0646\u062A\u0647\u064A\u062A \u0644\u0644\u062A\u0648 \u0645\u0646 \u0627\u0644\u0645\u0633\u062A\u0648\u0649 {{level}}/{{max}}.","level_up.before_buttons":"\u0644\u0642\u062F \u0627\u0635\u0637\u062F\u062A {{score}} \u0639\u0645\u0644\u0629 {{catchGain}} \u0645\u0646 \u0623\u0635\u0644 {{levelSpawnedCoins}} \u0641\u064A {{time}} \u062B\u0627\u0646\u064A\u0629 {{timeGain}}.\\n\\n\u0623\u062E\u0637\u0623\u062A {{levelMisses}} \u0645\u0631\u0627\u062A {{missesGain}} \u0648\u0627\u0635\u0637\u062F\u0645\u062A \u0628\u0627\u0644\u062C\u062F\u0631\u0627\u0646 \u0623\u0648 \u0627\u0644\u0633\u0642\u0641 {{levelWallBounces}} \u0645\u0631\u0627\u062A{{wallHitsGain}}.\\n{{compliment}}","level_up.compliment_advice":"\u062D\u0627\u0648\u0644 \u0627\u0644\u062A\u0642\u0627\u0637 \u062C\u0645\u064A\u0639 \u0627\u0644\u0639\u0645\u0644\u0627\u062A \u0627\u0644\u0645\u0639\u062F\u0646\u064A\u0629\u060C \u0648\u0644\u0627 \u062A\u0641\u0648\u062A \u0627\u0644\u0637\u0648\u0628 \u0623\u0628\u062F\u064B\u0627\u060C \u0648\u0644\u0627 \u062A\u0635\u0637\u062F\u0645 \u0623\u0628\u062F\u064B\u0627 \u0628\u0627\u0644\u062C\u062F\u0631\u0627\u0646/\u0627\u0644\u0633\u0642\u0641 \u0623\u0648 \u0642\u0645 \u0628\u062A\u062C\u0627\u0648\u0632 \u0627\u0644\u0645\u0633\u062A\u0648\u0649 \u0641\u064A \u0623\u0642\u0644 \u0645\u0646 30 \u062B\u0627\u0646\u064A\u0629 \u0644\u0644\u062D\u0635\u0648\u0644 \u0639\u0644\u0649 \u062A\u0631\u0642\u064A\u0627\u062A \u0625\u0636\u0627\u0641\u064A\u0629.","level_up.compliment_good":"\u0623\u062D\u0633\u0646\u062A !","level_up.compliment_perfect":"\u0631\u0627\u0626\u0639\u060C \u0627\u0633\u062A\u0645\u0631 \u0641\u064A \u0630\u0644\u0643!","level_up.pick_upgrade_title":"\u0627\u062E\u062A\u0631 \u062A\u0631\u0642\u064A\u0629","level_up.plus_one_upgrade":"(+1 \u062A\u0631\u0642\u064A\u0629)","level_up.plus_one_upgrade_and_reroll":"(+1 \u062A\u0631\u0642\u064A\u0629 \u0648+1 \u0625\u0639\u0627\u062F\u0629 \u0631\u0645\u064A)","level_up.reroll":"\u0625\u0639\u0627\u062F\u0629 \u0627\u0644\u0631\u0645\u064A ({{count}})","level_up.reroll_help":"\u062A\u0642\u062F\u064A\u0645 \u062E\u064A\u0627\u0631\u0627\u062A \u062C\u062F\u064A\u062F\u0629","level_up.upgrade_perk_to_level":"\u0627\u0644\u0645\u0633\u062A\u0648\u0649 {{level}}","main_menu.basic":"","main_menu.basic_help":"","main_menu.colorful_coins":"","main_menu.colorful_coins_help":"","main_menu.comboIncreaseTexts":"","main_menu.comboIncreaseTexts_help":"","main_menu.contrast":"","main_menu.contrast_help":"","main_menu.credit_levels":"","main_menu.donate":"\u0644\u0642\u062F \u0644\u0639\u0628\u062A \u0644\u0645\u062F\u0629 {{hours}} \u0633\u0627\u0639\u0629","main_menu.donate_help":"\u0645\u0627\u0630\u0627 \u0639\u0646 \u0627\u0644\u062A\u0628\u0631\u0639\u061F \u064A\u0645\u0643\u0646\u0643 \u0625\u062E\u0641\u0627\u0621 \u0647\u0630\u0627 \u0627\u0644\u062A\u0630\u0643\u064A\u0631 \u0641\u064A \u0627\u0644\u0625\u0639\u062F\u0627\u062F\u0627\u062A.","main_menu.donation_reminder":"","main_menu.donation_reminder_help":"","main_menu.download_save_file":"","main_menu.download_save_file_help":"","main_menu.extra_bright":"","main_menu.extra_bright_help":"","main_menu.fullscreen":"","main_menu.fullscreen_help":"","main_menu.help_content":"","main_menu.help_help":"","main_menu.help_title":"","main_menu.help_upgrades":"","main_menu.high_score":"\u0623\u0639\u0644\u0649 \u0646\u062A\u064A\u062C\u0629 : {{score}}","main_menu.kid":"","main_menu.kid_help":"","main_menu.language":"","main_menu.language_help":"","main_menu.load_save_file":"","main_menu.load_save_file_help":"","main_menu.max_coins":"","main_menu.max_coins_help":"","main_menu.max_particles":"","main_menu.max_particles_help":"","main_menu.mobile":"","main_menu.mobile_help":"","main_menu.normal":"\u0644\u0639\u0628\u0629 \u062C\u062F\u064A\u062F\u0629","main_menu.normal_help":"\u0627\u0644\u0639\u0628 7 \u0645\u0633\u062A\u0648\u064A\u0627\u062A \u0645\u0639 \u0645\u064A\u0632\u0629 \u0627\u0644\u0628\u062F\u0621 \u0627\u0644\u0639\u0634\u0648\u0627\u0626\u064A\u0629","main_menu.pointer_lock":"","main_menu.pointer_lock_help":"","main_menu.record":"","main_menu.record_download":"","main_menu.record_help":"","main_menu.red_miss":"","main_menu.red_miss_help":"","main_menu.reset":"","main_menu.reset_cancel":"","main_menu.reset_confirm":"","main_menu.reset_help":"","main_menu.reset_instruction":"","main_menu.save_file_error":"","main_menu.save_file_loaded":"","main_menu.save_file_loaded_help":"","main_menu.save_file_loaded_ok":"","main_menu.settings_help":"\u0642\u0645 \u0628\u062A\u062E\u0635\u064A\u0635 \u0637\u0631\u064A\u0642\u0629 \u0627\u0644\u0644\u0639\u0628 \u0644\u062A\u0646\u0627\u0633\u0628 \u0627\u062D\u062A\u064A\u0627\u062C\u0627\u062A\u0643 \u0648\u0630\u0648\u0642\u0643","main_menu.settings_title":"\u0625\u0639\u062F\u0627\u062F\u0627\u062A","main_menu.show_fps":"","main_menu.show_fps_help":"","main_menu.show_stats":"","main_menu.show_stats_help":"","main_menu.sounds":"","main_menu.sounds_help":"","main_menu.starting_perks":"","main_menu.starting_perks_checked":"","main_menu.starting_perks_full_random":"","main_menu.starting_perks_help":"","main_menu.starting_perks_unchecked":"","main_menu.title":"\u0627\u0644\u0627\u062E\u062A\u0631\u0627\u0642 71","main_menu.unlocks":"\u0627\u0644\u0645\u062D\u062A\u0648\u0649 \u063A\u064A\u0631 \u0627\u0644\u0645\u0642\u0641\u0644","main_menu.unlocks_help":"\u062C\u0631\u0628 \u0627\u0644\u0627\u0645\u062A\u064A\u0627\u0632\u0627\u062A \u0648\u0627\u0644\u0645\u0633\u062A\u0648\u064A\u0627\u062A \u0627\u0644\u062A\u064A \u0641\u062A\u062D\u062A\u0647\u0627","play.close_modale_window_tooltip":"\u064A\u063A\u0644\u0642","play.current_lvl":"\u0627\u0644\u0645\u0633\u062A\u0648\u0649 {{level}}/{{max}}","play.menu_label":"\u0642\u0627\u0626\u0645\u0629 \u0637\u0639\u0627\u0645","play.menu_tooltip":"\u0641\u062A\u062D \u0627\u0644\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0631\u0626\u064A\u0633\u064A\u0629","play.missed_ball":"\u064A\u0641\u062A\u0642\u062F","play.mobile_press_to_play":"\u0627\u0636\u063A\u0637 \u0645\u0639 \u0627\u0644\u0627\u0633\u062A\u0645\u0631\u0627\u0631 \u0647\u0646\u0627 \u0644\u0644\u0639\u0628","play.score_tooltip":"\u0634\u0627\u0647\u062F \u0646\u062A\u064A\u062C\u062A\u0643 \u0648\u062A\u0631\u0642\u064A\u0627\u062A\u0643 \u0648\u0627\u0644\u0645\u0632\u064A\u062F","play.stats.coins_catch_rate":"\u0645\u0639\u062F\u0644 \u0635\u064A\u062F \u0627\u0644\u0639\u0645\u0644\u0627\u062A \u0627\u0644\u0645\u0639\u062F\u0646\u064A\u0629","play.stats.levelMisses":"\u0627\u0644\u0636\u0631\u0628\u0627\u062A \u0627\u0644\u0636\u0627\u0626\u0639\u0629\u060C \u062D\u064A\u062B \u0644\u0645 \u062A\u0635\u0628 \u0623\u064A \u0634\u064A\u0621","play.stats.levelTime":"\u0648\u0642\u062A \u0627\u0644\u0645\u0633\u062A\u0648\u0649","play.stats.levelWallBounces":"\u0627\u0631\u062A\u062F\u0627\u062F\u0627\u062A \u0627\u0644\u062D\u0627\u0626\u0637","score_panel.close_to_unlock":"\u0641\u062A\u062D \u0627\u0644\u0645\u0633\u062A\u0648\u0649 \u0627\u0644\u062A\u0627\u0644\u064A:","score_panel.get_upgrades_to_unlock":"\u0627\u062D\u0635\u0644 \u0639\u0644\u0649 {{missingUpgrades}} \u0648\u0627\u062D\u0635\u0644 \u0639\u0644\u0649 {{points}} \u0646\u0642\u0637\u0629 \u0625\u0636\u0627\u0641\u064A\u0629 \u0644\u0641\u062A\u062D \u0627\u0644\u0645\u0633\u062A\u0648\u0649 \\"{{level}}\\"","score_panel.rerolls_count":"\u0644\u0642\u062F \u062C\u0645\u0639\u062A {{rerolls}} \u0625\u0639\u0627\u062F\u0629 \u062A\u0633\u062C\u064A\u0644","score_panel.score_to_unlock":"\u0627\u062D\u0635\u0644 \u0639\u0644\u0649 {{points}} \u0646\u0642\u0637\u0629 \u0625\u0636\u0627\u0641\u064A\u0629 \u0644\u0641\u062A\u062D \u0627\u0644\u0645\u0633\u062A\u0648\u0649 \\"{{level}}\\"","score_panel.title":"{{score}} \u0646\u0642\u0637\u0629 \u0641\u064A \u0627\u0644\u0645\u0633\u062A\u0648\u0649 {{level}}/{{max}} ","score_panel.upcoming_levels":"\u0627\u0644\u0645\u0633\u062A\u0648\u064A\u0627\u062A \u0627\u0644\u0642\u0627\u062F\u0645\u0629 :","score_panel.upgrades_picked":"\u0627\u0644\u062A\u0631\u0642\u064A\u0627\u062A \u0627\u0644\u062A\u064A \u062A\u0645 \u0627\u062E\u062A\u064A\u0627\u0631\u0647\u0627 \u0641\u064A \u0647\u0630\u0647 \u0627\u0644\u0644\u0639\u0628\u0629:","settings.autoplay":"","settings.autoplay_help":"","settings.basic":"\u0627\u0644\u0631\u0633\u0648\u0645\u0627\u062A \u0627\u0644\u0623\u0633\u0627\u0633\u064A\u0629","settings.basic_help":"\u0623\u062F\u0627\u0621 \u0623\u0641\u0636\u0644.","settings.colorful_coins":"\u0639\u0645\u0644\u0627\u062A \u0645\u0639\u062F\u0646\u064A\u0629 \u0645\u0644\u0648\u0646\u0629","settings.colorful_coins_help":"\u062A\u0638\u0647\u0631 \u0627\u0644\u0639\u0645\u0644\u0627\u062A \u0627\u0644\u0645\u0639\u062F\u0646\u064A\u0629 \u062F\u0627\u0626\u0645\u064B\u0627 \u0628\u0644\u0648\u0646 \u0627\u0644\u0637\u0648\u0628","settings.comboIncreaseTexts":"\u0625\u0638\u0647\u0627\u0631 +X \u0628\u0627\u0644\u0644\u0648\u0646 \u0627\u0644\u0630\u0647\u0628\u064A","settings.comboIncreaseTexts_help":"\u0639\u0646\u062F\u0645\u0627 \u062A\u0632\u064A\u062F \u0627\u0644\u0645\u062C\u0645\u0648\u0639\u0629","settings.contrast":"\u062A\u0628\u0627\u064A\u0646 \u0639\u0627\u0644\u064A","settings.contrast_help":"\u062A\u0642\u062F\u064A\u0645 \u0623\u0643\u062B\u0631 \u0623\u0644\u0648\u0627\u0646\u064B\u0627 \u0648\u0638\u0644\u0627\u0645\u064B\u0627","settings.donation_reminder":"\u0630\u0643\u0651\u0631\u0646\u064A \u0628\u0627\u0644\u062A\u0628\u0631\u0639","settings.donation_reminder_help":"\u0634\u0627\u0647\u062F \u0648\u0642\u062A \u0627\u0644\u0644\u0639\u0628 \u0648\u0631\u0627\u0628\u0637 \u0627\u0644\u062A\u0628\u0631\u0639 \u0641\u064A \u0627\u0644\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0631\u0626\u064A\u0633\u064A\u0629","settings.download_save_file":"\u062A\u0646\u0632\u064A\u0644 \u0627\u0644\u0646\u062A\u064A\u062C\u0629 \u0648\u0627\u0644\u0625\u062D\u0635\u0627\u0626\u064A\u0627\u062A","settings.download_save_file_help":"\u0627\u062D\u0635\u0644 \u0639\u0644\u0649 \u0645\u0644\u0641 \u0627\u0644\u062D\u0641\u0638","settings.extra_bright":"\u0645\u0634\u0631\u0642 \u0644\u0644\u063A\u0627\u064A\u0629","settings.extra_bright_help":"\u064A\u0632\u064A\u062F \u0645\u0646 \u062D\u062C\u0645 \u0627\u0644\u0647\u0627\u0644\u0629 \u062D\u0648\u0644 \u0627\u0644\u0639\u0645\u0644\u0627\u062A \u0627\u0644\u0645\u0639\u062F\u0646\u064A\u0629 \u0648\u0627\u0644\u0637\u0648\u0628.","settings.fullscreen":"\u062A\u0643\u0628\u064A\u0631 \u0627\u0644\u0634\u0627\u0634\u0629","settings.fullscreen_help":"\u0633\u062A\u062D\u0627\u0648\u0644 \u0627\u0644\u0644\u0639\u0628\u0629 \u0627\u0644\u0627\u0646\u062A\u0642\u0627\u0644 \u0625\u0644\u0649 \u0648\u0636\u0639 \u0645\u0644\u0621 \u0627\u0644\u0634\u0627\u0634\u0629 \u0642\u0628\u0644 \u0627\u0644\u0628\u062F\u0621","settings.kid":"\u0648\u0636\u0639 \u0627\u0644\u0623\u0637\u0641\u0627\u0644","settings.kid_help":"\u0627\u0628\u062F\u0623 \u0627\u0644\u0623\u0644\u0639\u0627\u0628 \u0627\u0644\u0645\u0633\u062A\u0642\u0628\u0644\u064A\u0629 \u0628\u0640 \\"\u0627\u0644\u0643\u0631\u0629 \u0627\u0644\u0623\u0628\u0637\u0623\\".","settings.language":"\u0644\u063A\u0629","settings.language_help":"\u0627\u062E\u062A\u0631 \u0644\u063A\u0629 \u0627\u0644\u0644\u0639\u0628\u0629","settings.load_save_file":"\u062A\u062D\u0645\u064A\u0644 \u0645\u0644\u0641 \u0627\u0644\u062D\u0641\u0638","settings.load_save_file_help":"\u062D\u062F\u062F \u0645\u0644\u0641 \u0627\u0644\u062D\u0641\u0638 \u0639\u0644\u0649 \u062C\u0647\u0627\u0632\u0643","settings.max_coins":" {{max}} \u0639\u0645\u0644\u0627\u062A \u0645\u0639\u062F\u0646\u064A\u0629 \u0639\u0644\u0649 \u0627\u0644\u0634\u0627\u0634\u0629 \u0643\u062D\u062F \u0623\u0642\u0635\u0649","settings.max_coins_help":"\u062A\u062C\u0645\u064A\u0644\u064A \u0641\u0642\u0637\u060C \u0644\u0627 \u064A\u0624\u062B\u0631 \u0639\u0644\u0649 \u0627\u0644\u0646\u062A\u064A\u062C\u0629","settings.mobile":"\u0627\u0644\u0648\u0636\u0639 \u0627\u0644\u0645\u062D\u0645\u0648\u0644","settings.mobile_help":"\u064A\u062A\u0631\u0643 \u0645\u0633\u0627\u062D\u0629 \u062A\u062D\u062A \u0627\u0644\u0645\u062C\u062F\u0627\u0641.","settings.pointer_lock":"\u0642\u0641\u0644 \u0645\u0624\u0634\u0631 \u0627\u0644\u0645\u0627\u0648\u0633","settings.pointer_lock_help":"\u064A\u0642\u0648\u0645 \u0628\u0642\u0641\u0644 \u0648\u0625\u062E\u0641\u0627\u0621 \u0645\u0624\u0634\u0631 \u0627\u0644\u0645\u0627\u0648\u0633.","settings.precise_lighting":"","settings.precise_lighting_help":"","settings.probabilistic_lighting":"","settings.probabilistic_lighting_help":"","settings.record":"\u062A\u0633\u062C\u064A\u0644 \u0645\u0642\u0627\u0637\u0639 \u0641\u064A\u062F\u064A\u0648 \u0644\u0644\u0639\u0628\u0629","settings.record_download":"\u062A\u0646\u0632\u064A\u0644 \u0627\u0644\u0641\u064A\u062F\u064A\u0648 ({{size}} \u0645\u064A\u062C\u0627\u0628\u0627\u064A\u062A)","settings.record_help":"\u0627\u062D\u0635\u0644 \u0639\u0644\u0649 \u0641\u064A\u062F\u064A\u0648 \u0644\u0643\u0644 \u0645\u0633\u062A\u0648\u0649.","settings.red_miss":"\u062A\u062D\u0630\u064A\u0631 \u0645\u0644\u0643\u0629 \u062C\u0645\u0627\u0644","settings.red_miss_help":"\u0625\u0638\u0647\u0627\u0631 \u0627\u0644\u062C\u0633\u064A\u0645\u0627\u062A \u0627\u0644\u062D\u0645\u0631\u0627\u0621 \u062D\u0648\u0644 \u0627\u0644\u0643\u0631\u0627\u062A \u0627\u0644\u062A\u064A \u062A\u0647\u0628\u0637 \u062F\u0648\u0646 \u0625\u0635\u0627\u0628\u0629.","settings.reset":"\u0625\u0639\u0627\u062F\u0629 \u062A\u0639\u064A\u064A\u0646 \u0627\u0644\u0644\u0639\u0628\u0629","settings.reset_cancel":"\u0644\u0627","settings.reset_confirm":"\u0646\u0639\u0645","settings.reset_help":"\u0645\u0633\u062D \u0623\u0639\u0644\u0649 \u0627\u0644\u062F\u0631\u062C\u0627\u062A \u0648\u0648\u0642\u062A \u0627\u0644\u0644\u0639\u0628 \u0648\u0627\u0644\u0625\u062D\u0635\u0627\u0626\u064A\u0627\u062A","settings.reset_instruction":"\u0633\u0648\u0641 \u062A\u0641\u0642\u062F \u0643\u0644 \u0627\u0644\u062A\u0642\u062F\u0645 \u0627\u0644\u0630\u064A \u0623\u062D\u0631\u0632\u062A\u0647 \u0641\u064A \u0627\u0644\u0644\u0639\u0628\u0629\u060C \u0647\u0644 \u0623\u0646\u062A \u0645\u062A\u0623\u0643\u062F\u061F","settings.save_file_error":"\u062E\u0637\u0623 \u0641\u064A \u062A\u062D\u0645\u064A\u0644 \u0645\u0644\u0641 \u0627\u0644\u062D\u0641\u0638","settings.save_file_loaded":"\u062D\u0641\u0638 \u0627\u0644\u0645\u0644\u0641 \u0627\u0644\u0645\u062D\u0645\u0651\u0644","settings.save_file_loaded_help":"\u0633\u064A\u062A\u0645 \u0627\u0644\u0622\u0646 \u0625\u0639\u0627\u062F\u0629 \u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u062A\u0637\u0628\u064A\u0642 \u0644\u062A\u0637\u0628\u064A\u0642 \u0627\u0644\u062D\u0641\u0638 \u0627\u0644\u062E\u0627\u0635 \u0628\u0643","settings.save_file_loaded_ok":"\u0646\u0639\u0645","settings.show_fps":"\u0639\u062F\u0627\u062F FPS","settings.show_fps_help":"\u0645\u0631\u0627\u0642\u0628\u0629 \u0623\u062F\u0627\u0621 \u0627\u0644\u062A\u0637\u0628\u064A\u0642","settings.show_stats":"\u0639\u0631\u0636 \u0627\u0644\u0625\u062D\u0635\u0627\u0626\u064A\u0627\u062A \u0641\u064A \u0627\u0644\u0648\u0642\u062A \u0627\u0644\u062D\u0642\u064A\u0642\u064A","settings.show_stats_help":"\u0627\u0644\u0639\u0645\u0644\u0627\u062A \u0627\u0644\u0645\u0639\u062F\u0646\u064A\u0629\u060C \u0627\u0644\u0648\u0642\u062A\u060C \u0627\u0644\u0627\u0631\u062A\u062F\u0627\u062F\u0627\u062A\u060C \u0627\u0644\u0623\u062E\u0637\u0627\u0621","settings.smooth_lighting":"","settings.smooth_lighting_help":"","settings.sounds":"\u0623\u0635\u0648\u0627\u062A \u0627\u0644\u0644\u0639\u0628\u0629","settings.sounds_help":"\u0623\u0635\u0648\u0627\u062A \u0635\u0641\u064A\u0631 \u0648\u0628\u0644\u0628\u0644 \u0648 \u0628\u0631\u0631\u0631\u0631","settings.storage_granted":"","settings.storage_refused":"","settings.stress_test":"","settings.stress_test_help":"","starting_perks.checked":"\u0639\u0646\u062F \u0628\u062F\u0621 \u0644\u0639\u0628\u0629 \u062C\u062F\u064A\u062F\u0629\u060C \u0633\u062A\u064F\u0645\u0646\u062D \u0625\u062D\u062F\u0649 \u0647\u0630\u0647 \u0627\u0644\u0645\u0632\u0627\u064A\u0627. \u0627\u0646\u0642\u0631 \u0639\u0644\u0649 \u0623\u064A \u0645\u064A\u0632\u0629 \u0644\u0627\u0633\u062A\u0628\u0639\u0627\u062F\u0647\u0627.","starting_perks.help":"\u0627\u062E\u062A\u0631 \u0627\u0644\u062A\u0631\u0642\u064A\u0627\u062A \u0627\u0644\u0623\u0648\u0644\u064A\u0629 \u0627\u0644\u0645\u0645\u0643\u0646\u0629","starting_perks.random":"\u0644\u0642\u062F \u062A\u0645 \u0625\u0632\u0627\u0644\u0629 \u062C\u0645\u064A\u0639 \u0627\u0644\u0645\u0632\u0627\u064A\u0627\u060C \u0648\u0633\u064A\u0643\u0648\u0646 \u0627\u0644\u0627\u062E\u062A\u064A\u0627\u0631 \u0639\u0634\u0648\u0627\u0626\u064A\u064B\u0627.","starting_perks.title":"\u0627\u0645\u062A\u064A\u0627\u0632\u0627\u062A \u0627\u0644\u0628\u062F\u0627\u064A\u0629","starting_perks.unchecked":"\u0644\u0627 \u064A\u062A\u0645 \u062A\u0642\u062F\u064A\u0645 \u0627\u0644\u0627\u0645\u062A\u064A\u0627\u0632\u0627\u062A \u0627\u0644\u0645\u0630\u0643\u0648\u0631\u0629 \u0623\u062F\u0646\u0627\u0647 \u0643\u0627\u0645\u062A\u064A\u0627\u0632\u0627\u062A \u0627\u0628\u062A\u062F\u0627\u0626\u064A\u0629\u060C \u0648\u0644\u0643\u0646 \u064A\u0645\u0643\u0646\u0643 \u0627\u0644\u0646\u0642\u0631 \u0639\u0644\u064A\u0647\u0627 \u0644\u0625\u0636\u0627\u0641\u062A\u0647\u0627 \u0625\u0644\u0649 \u0627\u0644\u0645\u062C\u0645\u0648\u0639\u0629.","unlocks.greyed_out_help":"\u064A\u0645\u0643\u0646 \u0641\u062A\u062D \u0627\u0644\u062A\u0631\u0642\u064A\u0627\u062A \u063A\u064A\u0631 \u0627\u0644\u0645\u0641\u0639\u0651\u0644\u0629 \u0628\u0632\u064A\u0627\u062F\u0629 \u0645\u062C\u0645\u0648\u0639 \u0646\u0642\u0627\u0637\u0643. \u064A\u0632\u062F\u0627\u062F \u0645\u062C\u0645\u0648\u0639 \u0627\u0644\u0646\u0642\u0627\u0637 \u0645\u0639 \u0643\u0644 \u0646\u0642\u0637\u0629 \u062A\u064F\u0633\u062C\u0651\u0644\u0647\u0627 \u0641\u064A \u0627\u0644\u0644\u0639\u0628\u0629.","unlocks.intro":"\u0645\u062C\u0645\u0648\u0639 \u0646\u0642\u0627\u0637\u0643 \u0647\u0648 {{ts}}. \u062A\u062C\u062F \u0623\u062F\u0646\u0627\u0647 \u062C\u0645\u064A\u0639 \u0627\u0644\u062A\u0631\u0642\u064A\u0627\u062A \u0648\u0627\u0644\u0645\u0633\u062A\u0648\u064A\u0627\u062A \u0627\u0644\u062A\u064A \u062A\u0642\u062F\u0645\u0647\u0627 \u0627\u0644\u0644\u0639\u0628\u0629. \u0627\u0646\u0642\u0631 \u0639\u0644\u0649 \u062A\u0631\u0642\u064A\u0629 \u0623\u0648 \u0645\u0633\u062A\u0648\u0649 \u0623\u062F\u0646\u0627\u0647 \u0644\u0628\u062F\u0621 \u0644\u0639\u0628\u0629 \u062A\u062C\u0631\u064A\u0628\u064A\u0629 \u0628\u0647\u0627.","unlocks.just_unlocked":"\u062A\u0645 \u0641\u062A\u062D \u0627\u0644\u0645\u0633\u062A\u0648\u0649","unlocks.just_unlocked_plural":"\u0644\u0642\u062F \u0642\u0645\u062A \u0644\u0644\u062A\u0648 \u0628\u0641\u062A\u062D {{count}} \u0645\u0633\u062A\u0648\u0649","unlocks.level":"<h2>\u0644\u0642\u062F \u0642\u0645\u062A \u0628\u0641\u062A\u062D {{unlocked}} \u0645\u0633\u062A\u0648\u0649 \u0645\u0646 \u0623\u0635\u0644 {{out_of}}</h2>\\n<p>\u0625\u0644\u064A\u0643 \u062C\u0645\u064A\u0639 \u0645\u0633\u062A\u0648\u064A\u0627\u062A \u0627\u0644\u0644\u0639\u0628\u0629\u060C \u0627\u0646\u0642\u0631 \u0639\u0644\u0649 \u0623\u062D\u062F\u0647\u0627 \u0644\u062A\u062C\u0631\u0628\u062A\u0647.</p> ","unlocks.level_description":"\u0645\u0633\u062A\u0648\u0649 {{size}}\xd7{{size}} \u0645\u0639 {{bricks}} \u0637\u0648\u0628\u0629 \u0648 {{colors}} \u0644\u0648\u0646 \u0648 {{bombs}} \u0642\u0646\u0628\u0644\u0629.","unlocks.minScore":"\u0627\u062D\u0635\u0644 \u0639\u0644\u0649 ${{minScore}} \u0641\u064A \u062C\u0648\u0644\u0629 \u0644\u0641\u062A\u062D \u0627\u0644\u0642\u0641\u0644.","unlocks.minScoreWithPerks":"\u0627\u062D\u0635\u0644 \u0639\u0644\u0649 ${{minScore}} \u0641\u064A \u062C\u0648\u0644\u0629 \u0645\u0639 {{required}} \u0648\u0644\u0643\u0646 \u0628\u062F\u0648\u0646 {{forbidden}} \u0644\u0641\u062A\u062D \u0627\u0644\u0642\u0641\u0644.","unlocks.minTotalScore":"\u062A\u062C\u0645\u064A\u0639 \u0625\u062C\u0645\u0627\u0644\u064A \u0642\u062F\u0631\u0647{{score}}\u062F\u0648\u0644\u0627\u0631","unlocks.reached":"\u0623\u0641\u0636\u0644 \u0646\u062A\u064A\u062C\u0629 \u062D\u0635\u0644\u062A \u0639\u0644\u064A\u0647\u0627 \u0643\u0627\u0646\u062A {{reached}}.","unlocks.title_upgrades":"\u0644\u0642\u062F \u0642\u0645\u062A \u0628\u0641\u062A\u062D {{unlocked}} \u062A\u0631\u0642\u064A\u0627\u062A \u0645\u0646 \u0623\u0635\u0644 {{out_of}}","upgrades.addiction.name":"\u0645\u062F\u0645\u0646","upgrades.addiction.tooltip":"+{{lvl}} \u0645\u062C\u0645\u0648\u0639\u0629 / \u0644\u0628\u0646\u0629\u060C \u064A\u062A\u0645 \u0625\u0639\u0627\u062F\u0629 \u062A\u0639\u064A\u064A\u0646 \u0627\u0644\u0645\u062C\u0645\u0648\u0639\u0629 \u0644\u0645\u062F\u0629 {{delay}}\u062B\u0627\u0646\u064A\u0629 \u0628\u0639\u062F \u0643\u0633\u0631 \u0644\u0628\u0646\u0629.","upgrades.addiction.verbose_description":"\u064A\u0628\u062F\u0623 \u0627\u0644\u0639\u062F \u0627\u0644\u062A\u0646\u0627\u0632\u0644\u064A \u0628\u0639\u062F \u0643\u0633\u0631 \u0623\u0648\u0644 \u0644\u0628\u0646\u0629 \u0645\u0646 \u0643\u0644 \u0645\u0633\u062A\u0648\u0649\u060C \u0648\u064A\u062A\u0648\u0642\u0641 \u0639\u0646\u062F \u062A\u062F\u0645\u064A\u0631 \u062C\u0645\u064A\u0639 \u0627\u0644\u0637\u0648\u0628.","upgrades.asceticism.name":"\u0627\u0644\u0632\u0647\u062F","upgrades.asceticism.tooltip":"+{{combo}} \u0645\u062C\u0645\u0648\u0639\u0629 / \u0644\u0628\u0646\u0629\u060C - {{combo}} \u0639\u0646\u062F \u0627\u0644\u062A\u0642\u0627\u0637 \u0627\u0644\u0639\u0645\u0644\u0629 \u0627\u0644\u0645\u0639\u062F\u0646\u064A\u0629","upgrades.asceticism.verbose_description":"\u0633\u0648\u0641 \u062A\u062D\u062A\u0627\u062C \u0625\u0644\u0649 \u062A\u062E\u0632\u064A\u0646 \u0627\u0644\u0639\u0645\u0644\u0627\u062A \u0627\u0644\u0645\u0639\u062F\u0646\u064A\u0629 \u0641\u064A \u0645\u0643\u0627\u0646 \u0645\u0627 \u0623\u062B\u0646\u0627\u0621 \u0635\u0639\u0648\u062F \u0645\u062C\u0645\u0648\u0639\u062A\u0643.","upgrades.ball_attract_ball.help_plural":"\u0642\u0648\u0629 \u062C\u0630\u0628 \u0623\u0642\u0648\u0649","upgrades.ball_attract_ball.name":"\u062C\u0627\u0630\u0628\u064A\u0629","upgrades.ball_attract_ball.tooltip":"\u0627\u0644\u0643\u0631\u0627\u062A \u062A\u062C\u0630\u0628 \u0627\u0644\u0643\u0631\u0627\u062A","upgrades.ball_attract_ball.verbose_description":"\u0627\u0644\u0643\u0631\u0627\u062A \u0627\u0644\u062A\u064A \u062A\u0628\u0639\u062F \u0623\u0643\u062B\u0631 \u0645\u0646 \u062B\u0644\u0627\u062B\u0629 \u0623\u0631\u0628\u0627\u0639 \u0645\u0633\u0627\u062D\u0629 \u0627\u0644\u0644\u0639\u0628\u0629 \u0633\u062A\u0628\u062F\u0623 \u0628\u0627\u0644\u062A\u062C\u0627\u0630\u0628.\\n\\n\u062A\u0632\u062F\u0627\u062F \u0642\u0648\u0629 \u0627\u0644\u062A\u062C\u0627\u0630\u0628 \u0643\u0644\u0645\u0627 \u0627\u0628\u062A\u0639\u062F\u062A \u0627\u0644\u0643\u0631\u0627\u062A \u0639\u0646 \u0628\u0639\u0636\u0647\u0627.\\n\\n\u0633\u062A\u062A\u0637\u0627\u064A\u0631 \u062C\u0632\u064A\u0626\u0627\u062A \u0642\u0648\u0633 \u0642\u0632\u062D \u0631\u0645\u0632\u064B\u0627 \u0644\u0642\u0648\u0629 \u0627\u0644\u062A\u062C\u0627\u0630\u0628. \u0647\u0630\u0647 \u0627\u0644\u0645\u064A\u0632\u0629 \u0645\u062A\u0627\u062D\u0629 \u0641\u0642\u0637 \u0625\u0630\u0627 \u0643\u0627\u0646 \u0644\u062F\u064A\u0643 \u0623\u0643\u062B\u0631 \u0645\u0646 \u0643\u0631\u0629 \u0648\u0627\u062D\u062F\u0629.","upgrades.ball_attracts_coins.name":"\u0627\u0644\u0643\u0631\u0627\u062A \u062A\u062C\u0630\u0628 \u0627\u0644\u0639\u0645\u0644\u0627\u062A \u0627\u0644\u0645\u0639\u062F\u0646\u064A\u0629","upgrades.ball_attracts_coins.tooltip":"\u062A\u062A\u0628\u0639 \u0627\u0644\u0639\u0645\u0644\u0627\u062A \u0627\u0644\u0645\u0639\u062F\u0646\u064A\u0629 \u0627\u0644\u0643\u0631\u0629 \u0627\u0644\u0623\u0642\u0631\u0628 \u0648\u062A\u0633\u0642\u0637 \u0628\u0634\u0643\u0644 \u0623\u0628\u0637\u0623","upgrades.ball_attracts_coins.verbose_description":"\u064A\u0645\u0643\u0646 \u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0647\u0630\u0627 \u0627\u0644\u0645\u0646\u062A\u062C \u0644\u0637\u0644\u0627\u0621 \u0627\u0644\u0643\u0631\u0627\u062A \u0628\u0627\u0644\u0639\u0645\u0644\u0627\u062A \u0627\u0644\u0645\u0639\u062F\u0646\u064A\u0629 \u0625\u0630\u0627 \u062A\u0645 \u062F\u0645\u062C\u0647 \u0645\u0639 \\"\u0627\u0644\u0635\u0628\u063A\u0629\\" \u0648\\"\u0639\u0645\u0644\u0627\u062A \u0627\u0644\u0623\u0634\u0628\u0627\u062D\\". \u0643\u0645\u0627 \u0623\u0646\u0647 \u0628\u062F\u064A\u0644 \u0644\u0645\u063A\u0646\u0627\u0637\u064A\u0633 \u0627\u0644\u0639\u0645\u0644\u0627\u062A \u0627\u0644\u0645\u0639\u062F\u0646\u064A\u0629.","upgrades.ball_repulse_ball.help_plural":"\u0642\u0648\u0629 \u062A\u0646\u0627\u0641\u0631 \u0623\u0642\u0648\u0649","upgrades.ball_repulse_ball.name":"\u0627\u0644\u0645\u0633\u0627\u062D\u0629 \u0627\u0644\u0634\u062E\u0635\u064A\u0629","upgrades.ball_repulse_ball.tooltip":"\u0627\u0644\u0643\u0631\u0627\u062A \u062A\u0635\u062F \u0627\u0644\u0643\u0631\u0627\u062A","upgrades.ball_repulse_ball.verbose_description":"\u0627\u0644\u0643\u0631\u0627\u062A \u0627\u0644\u062A\u064A \u062A\u0628\u0639\u062F \u0623\u0642\u0644 \u0645\u0646 \u0631\u0628\u0639 \u0639\u0631\u0636 \u0627\u0644\u0634\u0627\u0634\u0629 \u0633\u062A\u0628\u062F\u0623 \u0628\u0627\u0644\u062A\u0646\u0627\u0641\u0631. \u062A\u0632\u062F\u0627\u062F \u0642\u0648\u0629 \u0627\u0644\u062A\u0646\u0627\u0641\u0631 \u0643\u0644\u0645\u0627 \u0643\u0627\u0646\u062A \u0627\u0644\u0643\u0631\u0627\u062A \u0642\u0631\u064A\u0628\u0629 \u0645\u0646 \u0628\u0639\u0636\u0647\u0627. \u0633\u062A\u0646\u0637\u0644\u0642 \u0627\u0644\u062C\u0633\u064A\u0645\u0627\u062A \u0644\u0644\u062E\u0627\u0631\u062C \u0644\u062A\u0631\u0645\u0632 \u0625\u0644\u0649 \u062A\u0637\u0628\u064A\u0642 \u0647\u0630\u0647 \u0627\u0644\u0642\u0648\u0629. \u0647\u0630\u0647 \u0627\u0644\u0645\u064A\u0632\u0629 \u0645\u062A\u0627\u062D\u0629 \u0641\u0642\u0637 \u0625\u0630\u0627 \u0643\u0627\u0646 \u0644\u062F\u064A\u0643 \u0623\u0643\u062B\u0631 \u0645\u0646 \u0643\u0631\u0629 \u0648\u0627\u062D\u062F\u0629.","upgrades.base_combo.name":"\u0623\u0633\u0633 \u0642\u0648\u064A\u0629","upgrades.base_combo.tooltip":"\u062A\u0628\u062F\u0623 \u0627\u0644\u0645\u062C\u0645\u0648\u0639\u0629 \u0639\u0646\u062F {{coins}} \u0628\u062F\u0644\u0627\u064B \u0645\u0646 1.","upgrades.base_combo.verbose_description":"\u0639\u0627\u062F\u0629\u064B \u0645\u0627 \u062A\u0628\u062F\u0623 \u0645\u062C\u0645\u0648\u0639\u062A\u0643 \u0645\u0646 \u0661 \u0641\u064A \u0628\u062F\u0627\u064A\u0629 \u0627\u0644\u0645\u0633\u062A\u0648\u0649\u060C \u0648\u062A\u064F\u0639\u0627\u062F \u0636\u0628\u0637\u0647\u0627 \u0625\u0644\u0649 \u0661 \u0639\u0646\u062F\u0645\u0627 \u062A\u0642\u0641\u0632 \u062F\u0648\u0646 \u0623\u0646 \u062A\u0635\u0637\u062F\u0645 \u0628\u0623\u064A \u0634\u064A\u0621. \u0645\u0639 \u0647\u0630\u0647 \u0627\u0644\u0645\u064A\u0632\u0629\u060C \u062A\u0628\u062F\u0623 \u0627\u0644\u0645\u062C\u0645\u0648\u0639\u0629 \u0623\u0639\u0644\u0649 \u0628\u062B\u0644\u0627\u062B \u0646\u0642\u0627\u0637\u060C \u0644\u0630\u0627 \u0633\u062A\u062D\u0635\u0644 \u062F\u0627\u0626\u0645\u064B\u0627 \u0639\u0644\u0649 \u0664 \u0639\u0645\u0644\u0627\u062A \u0639\u0644\u0649 \u0627\u0644\u0623\u0642\u0644 \u0644\u0643\u0644 \u0645\u0643\u0639\u0628. \u0639\u0646\u062F \u0625\u0639\u0627\u062F\u0629 \u0636\u0628\u0637 \u0645\u062C\u0645\u0648\u0639\u062A\u0643\u060C \u062A\u0639\u0648\u062F \u0625\u0644\u0649 \u0664 \u0648\u0644\u064A\u0633 \u0661. \u0633\u062A\u062A\u0623\u0644\u0642 \u0643\u0631\u062A\u0643 \u0642\u0644\u064A\u0644\u0627\u064B \u0644\u0644\u0625\u0634\u0627\u0631\u0629 \u0625\u0644\u0649 \u0623\u0646 \u0645\u062C\u0645\u0648\u0639\u062A\u0647\u0627 \u0623\u0639\u0644\u0649 \u0645\u0646 \u0661.","upgrades.bigger_explosions.name":"\u0643\u0627\u0628\u0648\u0645","upgrades.bigger_explosions.tooltip":"\u0627\u0646\u0641\u062C\u0627\u0631\u0627\u062A \u0623\u0643\u0628\u0631","upgrades.bigger_explosions.verbose_description":"\u0627\u0644\u0627\u0646\u0641\u062C\u0627\u0631 \u0627\u0644\u0627\u0641\u062A\u0631\u0627\u0636\u064A \u064A\u064F\u0632\u064A\u0644 \u0645\u0631\u0628\u0639\u064B\u0627 3\xd73\u060C \u0648\u064A\u0635\u0628\u062D \u0645\u0631\u0628\u0639\u064B\u0627 5\xd75\u060C \u0643\u0645\u0627 \u0623\u0646 \u062A\u0623\u062B\u064A\u0631 \u0627\u0644\u0636\u0631\u0628\u0629 \u0639\u0644\u0649 \u0627\u0644\u0639\u0645\u0644\u0627\u062A \u0627\u0644\u0645\u0639\u062F\u0646\u064A\u0629 \u0623\u0642\u0648\u0649 \u0628\u0643\u062B\u064A\u0631. \u0633\u062A\u0648\u0645\u0636 \u0627\u0644\u0634\u0627\u0634\u0629 \u0628\u0639\u062F \u0643\u0644 \u0627\u0646\u0641\u062C\u0627\u0631 (\u0628\u0627\u0633\u062A\u062B\u0646\u0627\u0621 \u0627\u0644\u0648\u0636\u0639 \u0627\u0644\u0623\u0633\u0627\u0633\u064A).","upgrades.bigger_puck.name":"\u0645\u062C\u062F\u0627\u0641 \u0623\u0643\u0628\u0631","upgrades.bigger_puck.tooltip":"\u0627\u062D\u0635\u0644 \u0639\u0644\u0649 \u0627\u0644\u0645\u0632\u064A\u062F \u0645\u0646 \u0627\u0644\u0639\u0645\u0644\u0627\u062A \u0627\u0644\u0645\u0639\u062F\u0646\u064A\u0629 \u0628\u0633\u0647\u0648\u0644\u0629.","upgrades.bigger_puck.verbose_description":"\u064A\u062C\u0639\u0644 \u0627\u0644\u0645\u0636\u0631\u0628 \u0627\u0644\u0623\u0643\u0628\u0631 \u0645\u0646 \u0627\u0644\u0633\u0647\u0644 \u0639\u062F\u0645 \u062A\u0641\u0648\u064A\u062A \u0627\u0644\u0643\u0631\u0629 \u0648\u0627\u0644\u062A\u0642\u0627\u0637 \u0627\u0644\u0645\u0632\u064A\u062F \u0645\u0646 \u0627\u0644\u0639\u0645\u0644\u0627\u062A \u0627\u0644\u0645\u0639\u062F\u0646\u064A\u0629\u060C \u0643\u0645\u0627 \u064A\u0633\u0627\u0639\u062F \u0623\u064A\u0636\u064B\u0627 \u0639\u0644\u0649 \u062A\u062D\u062F\u064A\u062F \u0632\u0627\u0648\u064A\u0629 \u0627\u0644\u0627\u0631\u062A\u062F\u0627\u062F\u0627\u062A \u0628\u062F\u0642\u0629 (\u062A\u0639\u062A\u0645\u062F \u0632\u0627\u0648\u064A\u0629 \u0627\u0644\u0643\u0631\u0629 \u0641\u0642\u0637 \u0639\u0644\u0649 \u0627\u0644\u0645\u0643\u0627\u0646 \u0627\u0644\u0630\u064A \u062A\u0635\u0637\u062F\u0645 \u0641\u064A\u0647 \u0628\u0627\u0644\u0645\u0636\u0631\u0628).","upgrades.bricks_attract_ball.name":"\u0627\u0644\u0637\u0648\u0628 \u064A\u062C\u0630\u0628 \u0627\u0644\u0643\u0631\u0627\u062A","upgrades.bricks_attract_ball.tooltip":"\u062A\u062A\u062C\u0647 \u0627\u0644\u0643\u0631\u0629 \u0646\u062D\u0648 \u0623\u0648\u0644 {{count}} \u0645\u0646 \u0627\u0644\u0637\u0648\u0628 \u0627\u0644\u062A\u064A \u0633\u062A\u0635\u0637\u062F\u0645 \u0628\u0647\u0627.","upgrades.bricks_attract_ball.verbose_description":"\u064A\u0643\u0648\u0646 \u0627\u0644\u062A\u0623\u062B\u064A\u0631 \u0623\u0642\u0648\u0649 \u0641\u064A \u0627\u0644\u0645\u0633\u062A\u0648\u064A\u0627\u062A \u0627\u0644\u0623\u0639\u0644\u0649. \u0643\u0645\u0627 \u0623\u0646 \u0639\u062F\u062F \u0627\u0644\u0637\u0648\u0628 \u0627\u0644\u0630\u064A \u064A\u0645\u0643\u0646 \u0623\u0646 \u064A\u0635\u064A\u0628 \u0642\u0628\u0644 \u062A\u0648\u0642\u0641 \u0627\u0644\u062A\u0623\u062B\u064A\u0631 \u064A\u0643\u0648\u0646 \u0623\u0643\u0628\u0631. \u0648\u064A\u0639\u0648\u062F \u0627\u0644\u062A\u0623\u062B\u064A\u0631 \u0625\u0644\u0649 \u0642\u0648\u062A\u0647 \u0639\u0646\u062F\u0645\u0627 \u062A\u0635\u0637\u062F\u0645 \u0627\u0644\u0643\u0631\u0629 \u0628\u0627\u0644\u0642\u0631\u0635.","upgrades.bricks_attract_coins.name":"\u0627\u0644\u0637\u0648\u0628 \u064A\u062C\u0630\u0628 \u0627\u0644\u0639\u0645\u0644\u0627\u062A \u0627\u0644\u0645\u0639\u062F\u0646\u064A\u0629","upgrades.bricks_attract_coins.tooltip":"\u064A\u0633\u0627\u0639\u062F\u0647\u0645 \u0639\u0644\u0649 \u0627\u0644\u0628\u0642\u0627\u0621 \u0647\u0646\u0627\u0643","upgrades.bricks_attract_coins.verbose_description":"","upgrades.clairvoyant.name":"\u0645\u0633\u062A\u0628\u0635\u0631","upgrades.clairvoyant.tooltip":"\u0634\u0627\u0647\u062F \u0627\u0644\u0645\u0633\u062A\u0648\u064A\u0627\u062A \u0627\u0644\u0642\u0627\u062F\u0645\u0629\u060C \u0646\u0642\u0627\u0637 \u0627\u0644\u0635\u062D\u0629 \u0644\u0644\u0637\u0648\u0628 \u0648\u0627\u062A\u062C\u0627\u0647 \u0627\u0644\u0643\u0631\u0629","upgrades.clairvoyant.verbose_description":"\u064A\u0633\u0627\u0639\u062F\u0643 \u0639\u0644\u0649 \u0627\u062E\u062A\u064A\u0627\u0631 \u0627\u0644\u062A\u0631\u0642\u064A\u0627\u062A \u0627\u0644\u0645\u0646\u0627\u0633\u0628\u0629 \u0648\u0641\u0647\u0645 \u0643\u064A\u0641\u064A\u0629 \u0639\u0645\u0644 \u0627\u0644\u0637\u0648\u0628 \u0627\u0644\u0645\u062A\u064A\u0646. \u064A\u064F\u0636\u064A\u0641 \u0627\u0644\u0645\u0633\u062A\u0648\u064A\u0627\u0646 2 \u06483 \u0645\u0639\u0644\u0648\u0645\u0627\u062A \u0625\u0636\u0627\u0641\u064A\u0629 \u062D\u0648\u0644 \u0641\u0627\u0626\u062F\u0629 \u0645\u0634\u0643\u0648\u0643 \u0641\u064A\u0647\u0627 (\u0645\u062A\u0648\u0641\u0631\u0629 \u0641\u064A \u0648\u0636\u0639 \u0627\u0644\u062D\u0644\u0642\u0629).","upgrades.coin_magnet.help_plural":"\u062A\u0623\u062B\u064A\u0631 \u0623\u0642\u0648\u0649 \u0639\u0644\u0649 \u0627\u0644\u0639\u0645\u0644\u0627\u062A \u0627\u0644\u0645\u0639\u062F\u0646\u064A\u0629","upgrades.coin_magnet.name":"\u0645\u063A\u0646\u0627\u0637\u064A\u0633 \u0627\u0644\u0639\u0645\u0644\u0627\u062A \u0627\u0644\u0645\u0639\u062F\u0646\u064A\u0629","upgrades.coin_magnet.tooltip":"\u0627\u0644\u0645\u062C\u062F\u0627\u0641 \u064A\u062C\u0630\u0628 \u0627\u0644\u0639\u0645\u0644\u0627\u062A \u0627\u0644\u0645\u0639\u062F\u0646\u064A\u0629","upgrades.coin_magnet.verbose_description":"\u064A\u064F\u0648\u062C\u0650\u0651\u0647 \u0627\u0644\u0639\u0645\u0644\u0627\u062A \u0627\u0644\u0645\u0639\u062F\u0646\u064A\u0629 \u0646\u062D\u0648 \u0627\u0644\u0645\u062C\u062F\u0627\u0641. \u064A\u0643\u0648\u0646 \u0627\u0644\u062A\u0623\u062B\u064A\u0631 \u0623\u0642\u0648\u0649 \u0625\u0630\u0627 \u0643\u0627\u0646\u062A \u0627\u0644\u0639\u0645\u0644\u0629 \u0642\u0631\u064A\u0628\u0629 \u0645\u0646\u0647 \u0628\u0627\u0644\u0641\u0639\u0644.","upgrades.compound_interest.name":"\u0627\u0644\u0641\u0627\u0626\u062F\u0629 \u0627\u0644\u0645\u0631\u0643\u0628\u0629","upgrades.compound_interest.tooltip":"+{{lvl}} \u0645\u062C\u0645\u0648\u0639\u0629 \u0644\u0643\u0644 \u0644\u0628\u0646\u0629 \u0645\u0643\u0633\u0648\u0631\u0629\u060C \u064A\u062A\u0645 \u0625\u0639\u0627\u062F\u0629 \u062A\u0639\u064A\u064A\u0646\u0647\u0627 \u0639\u0646\u062F \u0641\u0642\u062F\u0627\u0646 \u0627\u0644\u0639\u0645\u0644\u0629 \u0627\u0644\u0645\u0639\u062F\u0646\u064A\u0629","upgrades.compound_interest.verbose_description":"\u0633\u062A\u0632\u062F\u0627\u062F \u0645\u062C\u0645\u0648\u0639\u062A\u0643 \u0642\u0637\u0639\u0629\u064B \u0642\u0637\u0639\u0629\u064B \u0641\u064A \u0643\u0644 \u0645\u0631\u0629 \u062A\u0643\u0633\u0631 \u0641\u064A\u0647\u0627 \u0644\u0628\u0646\u0629\u060C \u0645\u0645\u0627 \u064A\u064F\u0646\u062A\u062C \u0627\u0644\u0645\u0632\u064A\u062F \u0645\u0646 \u0627\u0644\u0639\u0645\u0644\u0627\u062A \u0645\u0639 \u0643\u0644 \u0642\u0637\u0639\u0629 \u062A\u0643\u0633\u0631\u0647\u0627.\\n\\n\u0645\u0639 \u0630\u0644\u0643\u060C \u0627\u062D\u0631\u0635 \u0639\u0644\u0649 \u0627\u0644\u062A\u0642\u0627\u0637 \u062C\u0645\u064A\u0639 \u0647\u0630\u0647 \u0627\u0644\u0639\u0645\u0644\u0627\u062A \u0628\u0645\u062C\u062F\u0627\u0641\u0643\u060C \u0644\u0623\u0646 \u0623\u064A \u0639\u0645\u0644\u0629 \u0645\u0641\u0642\u0648\u062F\u0629 \u0633\u062A\u064F\u0639\u064A\u062F \u0636\u0628\u0637 \u0645\u062C\u0645\u0648\u0639\u062A\u0643.\\n\\n\u0628\u0645\u062C\u0631\u062F \u0623\u0646 \u062A\u062A\u062C\u0627\u0648\u0632 \u0645\u062C\u0645\u0648\u0639\u062A\u0643 \u0627\u0644\u062D\u062F \u0627\u0644\u0623\u062F\u0646\u0649\u060C \u0633\u064A\u0638\u0647\u0631 \u062E\u0637 \u0623\u062D\u0645\u0631 \u0641\u064A \u0623\u0633\u0641\u0644 \u0645\u0646\u0637\u0642\u0629 \u0627\u0644\u0644\u0639\u0628 \u0644\u062A\u0630\u0643\u064A\u0631\u0643 \u0628\u0639\u062F\u0645 \u0648\u0636\u0639 \u0627\u0644\u0639\u0645\u0644\u0627\u062A \u0647\u0646\u0627\u0643.","upgrades.concave_puck.name":"\u0645\u062C\u062F\u0627\u0641 \u0645\u0642\u0639\u0631","upgrades.concave_puck.tooltip":"\u062A\u062D\u0633\u064A\u0646 \u062F\u0642\u0629 \u0627\u0644\u062A\u0635\u0648\u064A\u0628 \u0627\u0644\u0639\u0645\u0648\u062F\u064A","upgrades.concave_puck.verbose_description":"\u062A\u0628\u062F\u0623 \u0627\u0644\u0643\u0631\u0627\u062A \u0627\u0644\u0645\u0633\u062A\u0648\u0649 \u0628\u0627\u0644\u0635\u0639\u0648\u062F \u0645\u0628\u0627\u0634\u0631\u0629 \u0625\u0644\u0649 \u0627\u0644\u0623\u0639\u0644\u0649\u060C \u0648\u062A\u0631\u062A\u062F \u0628\u0632\u0627\u0648\u064A\u0629 \u0623\u0642\u0644.","upgrades.corner_shot.name":"\u0636\u0631\u0628\u0629 \u0631\u0643\u0646\u064A\u0629","upgrades.corner_shot.tooltip":"\u064A\u0633\u0645\u062D \u0644\u0644\u0645\u062C\u062F\u0627\u0641 \u0627\u0644\u062E\u0627\u0635 \u0628\u0643 \u0628\u0627\u0644\u062A\u062F\u0627\u062E\u0644 \u0645\u0639 \u062D\u062F\u0648\u062F \u0627\u0644\u0634\u0627\u0634\u0629","upgrades.corner_shot.verbose_description":"\u064A\u064F\u0633\u0627\u0639\u062F\u0643 \u0639\u0644\u0649 \u0627\u0644\u062A\u0635\u0648\u064A\u0628 \u0641\u064A \u0627\u0644\u0632\u0648\u0627\u064A\u0627. \u0627\u0644\u0645\u0633\u062A\u0648\u064A\u0627\u062A \u0627\u0644\u0623\u0639\u0644\u0649 \u062A\u064F\u062A\u064A\u062D \u0644\u0643 \u0627\u0644\u0648\u0635\u0648\u0644 \u0625\u0644\u0649 \u0645\u0633\u0627\u0641\u0627\u062A \u0623\u0628\u0639\u062F.","upgrades.etherealcoins.name":"\u0627\u0644\u0639\u0645\u0644\u0627\u062A \u0627\u0644\u0645\u0639\u062F\u0646\u064A\u0629 \u0641\u064A \u0627\u0644\u0641\u0636\u0627\u0621","upgrades.etherealcoins.tooltip":"\u0644\u0645 \u062A\u0639\u062F \u0627\u0644\u0639\u0645\u0644\u0627\u062A \u0627\u0644\u0645\u0639\u062F\u0646\u064A\u0629 \u062A\u062A\u0623\u062B\u0631 \u0628\u0627\u0644\u062C\u0627\u0630\u0628\u064A\u0629","upgrades.etherealcoins.verbose_description":"\u0633\u062A\u062D\u0627\u0641\u0638 \u0627\u0644\u0639\u0645\u0644\u0627\u062A \u0627\u0644\u0645\u0639\u062F\u0646\u064A\u0629 \u0639\u0644\u0649 \u0633\u0631\u0639\u062A\u0647\u0627 \u062D\u062A\u0649 \u0628\u0639\u062F \u0639\u062F\u0629 \u0627\u0631\u062A\u062F\u0627\u062F\u0627\u062A\u060C \u0648\u0644\u0646 \u062A\u062A\u0623\u062B\u0631 \u0628\u0627\u0644\u062C\u0627\u0630\u0628\u064A\u0629 \u0628\u0639\u062F \u0627\u0644\u0622\u0646.","upgrades.extra_levels.name":"5 \u062F\u0642\u0627\u0626\u0642 \u0625\u0636\u0627\u0641\u064A\u0629","upgrades.extra_levels.tooltip":"\u0627\u0644\u0639\u0628 {{count}} \u0645\u0633\u062A\u0648\u0649 \u0628\u062F\u0644\u0627\u064B \u0645\u0646 7","upgrades.extra_levels.verbose_description":"\u064A\u0645\u0643\u0646 \u0623\u0646 \u062A\u0633\u062A\u0645\u0631 \u0627\u0644\u0644\u0639\u0628\u0629 \u0627\u0644\u0627\u0641\u062A\u0631\u0627\u0636\u064A\u0629 \u0644\u0633\u0628\u0639\u0629 \u0645\u0633\u062A\u0648\u064A\u0627\u062A \u0643\u062D\u062F \u0623\u0642\u0635\u0649\u060C \u062A\u0646\u062A\u0647\u064A \u0628\u0639\u062F\u0647\u0627.\\n\\n\u064A\u062A\u064A\u062D \u0644\u0643 \u0643\u0644 \u0645\u0633\u062A\u0648\u0649 \u0645\u0646 \u0647\u0630\u0647 \u0627\u0644\u0645\u064A\u0632\u0629 \u0627\u0644\u0627\u0646\u062A\u0642\u0627\u0644 \u0625\u0644\u0649 \u0645\u0633\u062A\u0648\u0649 \u0623\u0639\u0644\u0649. \u063A\u0627\u0644\u0628\u064B\u0627 \u0645\u0627 \u062A\u0643\u0648\u0646 \u0627\u0644\u0645\u0633\u062A\u0648\u064A\u0627\u062A \u0627\u0644\u0623\u062E\u064A\u0631\u0629 \u0647\u064A \u0627\u0644\u062A\u064A \u062A\u062D\u0642\u0642 \u0641\u064A\u0647\u0627 \u0623\u0639\u0644\u0649 \u0627\u0644\u0646\u0642\u0627\u0637\u060C \u0644\u0630\u0627 \u0642\u062F \u064A\u0643\u0648\u0646 \u0627\u0644\u0641\u0631\u0642 \u0643\u0628\u064A\u0631\u064B\u0627.","upgrades.extra_life.help_plural":"\u0633\u062A\u0631\u062A\u062F \u0627\u0644\u0643\u0631\u0629 (\u0627\u0644\u0623\u062E\u064A\u0631\u0629) \u0625\u0644\u0649 \u0627\u0644\u0623\u0633\u0641\u0644 \u0628\u062F\u0644\u0627\u064B \u0645\u0646 \u0623\u0646 \u062A\u0636\u064A\u0639 ({{lvl}} \u0645\u0631\u0629).","upgrades.extra_life.name":"\u062D\u064A\u0627\u0629 \u0625\u0636\u0627\u0641\u064A\u0629","upgrades.extra_life.tooltip":"\u0633\u062A\u0631\u062A\u062F \u0627\u0644\u0643\u0631\u0629 \u0645\u0631\u0629 \u0648\u0627\u062D\u062F\u0629 \u0639\u0644\u0649 \u0627\u0644\u062E\u0637 \u0627\u0644\u0633\u0641\u0644\u064A \u0642\u0628\u0644 \u0623\u0646 \u062A\u0636\u064A\u0639.","upgrades.extra_life.verbose_description":"\u0639\u0627\u062F\u0629\u064B\u060C \u0644\u062F\u064A\u0643 \u0643\u0631\u0629 \u0648\u0627\u062D\u062F\u0629\u060C \u0648\u062A\u0646\u062A\u0647\u064A \u0627\u0644\u0644\u0639\u0628\u0629 \u0628\u0645\u062C\u0631\u062F \u0625\u0633\u0642\u0627\u0637\u0647\u0627.\\n\\n\u062A\u0636\u064A\u0641 \u0647\u0630\u0647 \u0627\u0644\u0645\u064A\u0632\u0629 \u0634\u0631\u064A\u0637\u064B\u0627 \u0623\u0628\u064A\u0636 \u0623\u0633\u0641\u0644 \u0627\u0644\u0634\u0627\u0634\u0629 \u064A\u062D\u0641\u0638 \u0627\u0644\u0643\u0631\u0629 \u0645\u0631\u0629 \u0648\u0627\u062D\u062F\u0629\u060C \u062B\u0645 \u064A\u0646\u0643\u0633\u0631 \u0623\u062B\u0646\u0627\u0621 \u0630\u0644\u0643.\\n\\n\u0633\u062A\u062E\u0633\u0631 \u0645\u0633\u062A\u0648\u0649 \u0648\u0627\u062D\u062F\u064B\u0627 \u0645\u0646 \u0647\u0630\u0647 \u0627\u0644\u0645\u064A\u0632\u0629 \u0641\u064A \u0643\u0644 \u0645\u0631\u0629 \u062A\u0631\u062A\u062F \u0641\u064A\u0647\u0627 \u0643\u0631\u0629 \u0623\u0633\u0641\u0644 \u0627\u0644\u0634\u0627\u0634\u0629.","upgrades.forgiving.name":"\u063A\u0641\u0648\u0631","upgrades.forgiving.tooltip":"\u064A\u0624\u062F\u064A \u0641\u0642\u062F\u0627\u0646 \u0627\u0644\u0641\u0648\u0627\u0635\u0644 \u0625\u0644\u0649 \u062A\u0642\u0644\u064A\u0644 \u0627\u0644\u0645\u062C\u0645\u0648\u0639\u0629 \u062A\u062F\u0631\u064A\u062C\u064A\u064B\u0627 \u0628\u062F\u0644\u0627\u064B \u0645\u0646 \u062A\u0642\u0644\u064A\u0644\u0647\u0627 \u062F\u0641\u0639\u0629 \u0648\u0627\u062D\u062F\u0629.","upgrades.forgiving.verbose_description":"\u0623\u0648\u0644 \u062E\u0637\u0623 \u0641\u064A \u0643\u0644 \u0645\u0633\u062A\u0648\u0649 \u0645\u062C\u0627\u0646\u064A\u060C \u062B\u0645 10% \u0645\u0646 \u0627\u0644\u0645\u062C\u0645\u0648\u0639\u0629\u060C \u062B\u0645 20% ..","upgrades.fountain_toss.name":"\u0631\u0645\u064A \u0627\u0644\u0646\u0627\u0641\u0648\u0631\u0629","upgrades.fountain_toss.tooltip":"\u0627\u062D\u0635\u0644 \u0639\u0644\u0649 \u0628\u0639\u0636 \u0627\u0644\u0645\u062C\u0645\u0648\u0639\u0627\u062A \u0639\u0646\u062F\u0645\u0627 \u062A\u0641\u0648\u062A \u0628\u0639\u0636 \u0627\u0644\u0639\u0645\u0644\u0627\u062A \u0627\u0644\u0645\u0639\u062F\u0646\u064A\u0629.","upgrades.fountain_toss.verbose_description":"\u0639\u0646\u062F\u0645\u0627 \u062A\u0641\u0648\u062A\u0643 \u0639\u0645\u0644\u0629 \u0645\u0639\u062F\u0646\u064A\u0629 \u0648\u0643\u0627\u0646 \u0645\u062C\u0645\u0648\u0639\u062A\u0643 \u0623\u0642\u0644 \u0645\u0646 {{max}}\u060C \u0641\u0625\u0646 \u0645\u062C\u0645\u0648\u0639\u062A\u0643 \u0644\u062F\u064A\u0647\u0627 \u0627\u062D\u062A\u0645\u0627\u0644\u064A\u0629 {{lvl}}/\u0645\u062C\u0645\u0648\u0639\u0629 \u0644\u062A\u0646\u0645\u0648 \u0628\u0645\u0642\u062F\u0627\u0631 \u0648\u0627\u062D\u062F.","upgrades.ghost_coins.name":"\u0639\u0645\u0644\u0627\u062A \u0627\u0644\u0623\u0634\u0628\u0627\u062D","upgrades.ghost_coins.tooltip":"\u062A\u0645\u0631 \u0627\u0644\u0639\u0645\u0644\u0627\u062A \u0627\u0644\u0645\u0639\u062F\u0646\u064A\u0629 \u0628\u0628\u0637\u0621 \u0639\u0628\u0631 \u0627\u0644\u0637\u0648\u0628","upgrades.ghost_coins.verbose_description":"\u0625\u0646\u0647\u0627 \u0644\u064A\u0633\u062A \u0645\u0634\u0643\u0644\u0629\u060C \u0628\u0644 \u0645\u064A\u0632\u0629! \u062A\u062A\u062D\u0631\u0643 \u0627\u0644\u0639\u0645\u0644\u0627\u062A \u0627\u0644\u0645\u0639\u062F\u0646\u064A\u0629 \u0628\u0628\u0637\u0621 \u0639\u0628\u0631 \u0627\u0644\u0637\u0648\u0628. \u0627\u0644\u0645\u0633\u062A\u0648\u064A\u0627\u062A \u0627\u0644\u0623\u0639\u0644\u0649 \u062A\u0633\u0645\u062D \u0644\u0647\u0627 \u0628\u0627\u0644\u062A\u062D\u0631\u0643 \u0628\u0634\u0643\u0644 \u0623\u0633\u0631\u0639.","upgrades.helium.name":"\u0627\u0644\u0647\u064A\u0644\u064A\u0648\u0645","upgrades.helium.tooltip":"\u0627\u0646\u0639\u0643\u0633\u062A \u0627\u0644\u062C\u0627\u0630\u0628\u064A\u0629 \u0625\u0644\u0649 \u0627\u0644\u064A\u0633\u0627\u0631 \u0648\u0627\u0644\u064A\u0645\u064A\u0646 \u0645\u0646 \u0627\u0644\u0645\u062C\u062F\u0627\u0641","upgrades.helium.verbose_description":"\u064A\u0624\u062B\u0631 \u0647\u0630\u0627 \u0639\u0644\u0649 \u0627\u0644\u0639\u0645\u0644\u0627\u062A \u0627\u0644\u0645\u0639\u062F\u0646\u064A\u0629 \u0648\u0633\u064A\u0633\u0645\u062D \u0644\u0647\u0627 \u0628\u0627\u0644\u0637\u0641\u0648 \u062D\u062A\u0649 \u062A\u0635\u0628\u062D \u062C\u0627\u0647\u0632\u064B\u0627 \u0644\u0627\u0644\u062A\u0642\u0627\u0637\u0647\u0627.","upgrades.hot_start.name":"\u0628\u062F\u0627\u064A\u0629 \u0633\u0627\u062E\u0646\u0629","upgrades.hot_start.tooltip":"\u0627\u0628\u062F\u0623 \u0639\u0646\u062F \u0627\u0644\u0645\u062C\u0645\u0648\u0639\u0629 {{start}}\u060C -{{loss}} \u0645\u062C\u0645\u0648\u0639\u0629 \u0641\u064A \u0627\u0644\u062B\u0627\u0646\u064A\u0629","upgrades.hot_start.verbose_description":"\u0641\u064A \u0628\u062F\u0627\u064A\u0629 \u0643\u0644 \u0645\u0633\u062A\u0648\u0649\u060C \u062A\u0628\u062F\u0623 \u0645\u062C\u0645\u0648\u0639\u062A\u0643 \u0628\u0640 +\u0663\u0660 \u0646\u0642\u0637\u0629\u060C \u062B\u0645 \u062A\u0646\u062E\u0641\u0636 \u0646\u0642\u0637\u0629 \u0648\u0627\u062D\u062F\u0629 \u0643\u0644 \u062B\u0627\u0646\u064A\u0629. \u064A\u062A\u0631\u0627\u0643\u0645 \u0647\u0630\u0627 \u0627\u0644\u062A\u0623\u062B\u064A\u0631 \u0645\u0639 \u0645\u0632\u0627\u064A\u0627 \u0623\u062E\u0631\u0649.","upgrades.hypnosis.name":"\u0627\u0644\u062A\u0646\u0648\u064A\u0645 \u0627\u0644\u0645\u063A\u0646\u0627\u0637\u064A\u0633\u064A","upgrades.hypnosis.tooltip":"\u0639\u0646\u062F\u0645\u0627 \u064A\u062A\u063A\u064A\u0631 \u0644\u0648\u0646 \u0627\u0644\u0637\u0648\u0628\u060C \u0642\u0645 \u0628\u0646\u0642\u0644 \u062A\u0644\u0643 \u0627\u0644\u0639\u0645\u0644\u0629 \u0625\u0644\u0649 \u0627\u0644\u0643\u0631\u0629 \u0627\u0644\u0623\u0642\u0631\u0628 \u0648\u0642\u0645 \u0628\u0625\u0639\u0627\u062F\u0629 \u0634\u062D\u0646 \u0642\u062F\u0631\u062A\u0647\u0627 \u0639\u0644\u0649 \u062A\u0644\u0637\u064A\u062E \u0627\u0644\u0637\u0648\u0628.","upgrades.hypnosis.verbose_description":"","upgrades.implosions.name":"\u0627\u0644\u0627\u0646\u0641\u062C\u0627\u0631\u0627\u062A","upgrades.implosions.tooltip":"\u062A\u0624\u062F\u064A \u0627\u0644\u0627\u0646\u0641\u062C\u0627\u0631\u0627\u062A \u0625\u0644\u0649 \u0627\u0645\u062A\u0635\u0627\u0635 \u0627\u0644\u0639\u0645\u0644\u0627\u062A \u0627\u0644\u0645\u0639\u062F\u0646\u064A\u0629 \u0628\u062F\u0644\u0627\u064B \u0645\u0646 \u062A\u0641\u062C\u064A\u0631\u0647\u0627","upgrades.implosions.verbose_description":"\u062A\u064F\u0637\u0628\u0651\u0642 \u0642\u0648\u0629 \u0627\u0644\u0627\u0646\u0641\u062C\u0627\u0631 \u0628\u0637\u0631\u064A\u0642\u0629 \u0623\u062E\u0631\u0649. \u0627\u0644\u0645\u0633\u062A\u0648\u064A\u0627\u062A \u0627\u0644\u0623\u062E\u0631\u0649 \u062A\u064F\u0634\u0643\u0651\u0644 \\"\u0627\u0646\u0641\u062C\u0627\u0631\u064B\u0627 \u0623\u0643\u0628\u0631\\".","upgrades.instant_upgrade.name":"\u062A\u0631\u0642\u064A\u0629 \u0641\u0648\u0631\u064A\u0629","upgrades.instant_upgrade.tooltip":"+2 \u062A\u0631\u0642\u064A\u0629 \u0627\u0644\u0622\u0646\u060C -1 \u0627\u062E\u062A\u064A\u0627\u0631 \u062D\u062A\u0649 \u0646\u0647\u0627\u064A\u0629 \u0627\u0644\u0644\u0639\u0628\u0629.","upgrades.instant_upgrade.verbose_description":"\u0627\u062E\u062A\u0631 \u062A\u0631\u0642\u064A\u062A\u064A\u0646 \u0641\u0648\u0631\u064B\u0627\u060C \u0644\u062A\u062D\u0635\u0644 \u0639\u0644\u0649 \u0648\u0627\u062D\u062F\u0629 \u0645\u062C\u0627\u0646\u064A\u0629 \u0648\u0623\u062E\u0631\u0649 \u0644\u0627\u0633\u062A\u0631\u062F\u0627\u062F \u0642\u064A\u0645\u0629 \u0627\u0644\u0645\u064A\u0632\u0629 \u0627\u0644\u062A\u064A \u0627\u0633\u062A\u062E\u062F\u0645\u062A\u0647\u0627. \u0645\u0639 \u0643\u0644 \u0642\u0627\u0626\u0645\u0629 \u062A\u0627\u0644\u064A\u0629 \u0644\u0627\u062E\u062A\u064A\u0627\u0631 \u0627\u0644\u062A\u0631\u0642\u064A\u0627\u062A\u060C \u0633\u062A\u062C\u062F \u062E\u064A\u0627\u0631\u0627\u062A \u0623\u0642\u0644.","upgrades.left_is_lava.name":"\u062A\u062C\u0646\u0628 \u0627\u0644\u062C\u0627\u0646\u0628 \u0627\u0644\u0623\u064A\u0633\u0631","upgrades.left_is_lava.tooltip":"+{{lvl}} \u0645\u062C\u0645\u0648\u0639\u0629 \u0644\u0643\u0644 \u0637\u0648\u0628\u0629 \u0645\u0643\u0633\u0648\u0631\u0629. \u062A\u064F\u0639\u0627\u062F \u0627\u0644\u0645\u062C\u0645\u0648\u0639\u0629 \u0625\u0644\u0649 \u0648\u0636\u0639\u0647\u0627 \u0627\u0644\u0637\u0628\u064A\u0639\u064A \u0625\u0630\u0627 \u0636\u0631\u0628\u062A \u0627\u0644\u0643\u0631\u0629 \u0627\u0644\u062C\u0627\u0646\u0628 \u0627\u0644\u0623\u064A\u0633\u0631 \u0645\u0646 \u0627\u0644\u0634\u0627\u0634\u0629.","upgrades.left_is_lava.verbose_description":"\u0643\u0644\u0645\u0627 \u0643\u0633\u0631\u062A\u064E \u0644\u0628\u0646\u0629\u060C \u0633\u062A\u0632\u062F\u0627\u062F \u0645\u062C\u0645\u0648\u0639\u062A\u0643\u064E \u0628\u0648\u0627\u062D\u062F\u0629\u060C \u0645\u0627 \u064A\u0639\u0646\u064A \u0623\u0646\u0643 \u0633\u062A\u062D\u0635\u0644 \u0639\u0644\u0649 \u0639\u0645\u0644\u0629 \u0625\u0636\u0627\u0641\u064A\u0629 \u0645\u0646 \u0643\u0644 \u0644\u0628\u0646\u0629 \u062A\u0643\u0633\u0631\u0647\u0627 \u0644\u0627\u062D\u0642\u064B\u0627.\\n\\n\u0645\u0639 \u0630\u0644\u0643\u060C \u0633\u062A\u064F\u0639\u0627\u062F \u0636\u0628\u0637 \u0645\u062C\u0645\u0648\u0639\u062A\u0643\u064E \u0628\u0645\u062C\u0631\u062F \u0623\u0646 \u062A\u0635\u0637\u062F\u0645 \u0643\u0631\u062A\u0643\u064E \u0628\u0627\u0644\u062C\u0627\u0646\u0628 \u0627\u0644\u0623\u064A\u0633\u0631.\\n\\n\u0628\u0645\u062C\u0631\u062F \u0623\u0646 \u062A\u0631\u062A\u0641\u0639 \u0645\u062C\u0645\u0648\u0639\u062A\u0643\u064E\u060C \u064A\u0635\u0628\u062D \u0627\u0644\u062C\u0627\u0646\u0628 \u0627\u0644\u0623\u064A\u0633\u0631 \u0623\u062D\u0645\u0631 \u0644\u062A\u0630\u0643\u064A\u0631\u0643 \u0628\u0636\u0631\u0648\u0631\u0629 \u062A\u062C\u0646\u0628 \u0636\u0631\u0628\u0647\u0627.\\n\\n","upgrades.limitless.name":"\u0628\u0644\u0627 \u062D\u062F\u0648\u062F","upgrades.limitless.tooltip":"\u0631\u0641\u0639 \u0627\u0644\u0645\u0633\u062A\u0648\u0649 \u0627\u0644\u0623\u0642\u0635\u0649 \u0644\u062C\u0645\u064A\u0639 \u0627\u0644\u062A\u0631\u0642\u064A\u0627\u062A \u0628\u0645\u0642\u062F\u0627\u0631 {{lvl}} ","upgrades.limitless.verbose_description":"\u064A\u0624\u062F\u064A \u0627\u062E\u062A\u064A\u0627\u0631 \u0647\u0630\u0647 \u0627\u0644\u0645\u064A\u0632\u0629 \u0623\u064A\u0636\u064B\u0627 \u0625\u0644\u0649 \u0631\u0641\u0639 \u0627\u0644\u062D\u062F \u0627\u0644\u0623\u0642\u0635\u0649 \u0627\u0644\u062E\u0627\u0635 \u0628\u0647 \u0628\u0645\u0642\u062F\u0627\u0631 \u0648\u0627\u062D\u062F\u060C \u0645\u0645\u0627 \u064A\u062A\u064A\u062D \u0644\u0643 \u0627\u062E\u062A\u064A\u0627\u0631\u0647\u0627 \u0645\u0631\u0629 \u0623\u062E\u0631\u0649.","upgrades.metamorphosis.name":"\u0627\u0644\u062A\u062D\u0648\u0644","upgrades.metamorphosis.tooltip":"\u064A\u0645\u0643\u0646 \u0644\u0643\u0644 \u0639\u0645\u0644\u0629 \u0623\u0646 \u062A\u0635\u0628\u063A {{lvl}} \u0645\u0646 \u0627\u0644\u0637\u0648\u0628 \u0628\u0644\u0648\u0646\u0647\u0627","upgrades.metamorphosis.verbose_description":"\u0645\u0639 \u0647\u0630\u0647 \u0627\u0644\u0645\u064A\u0632\u0629\u060C \u0633\u062A\u0643\u0648\u0646 \u0627\u0644\u0639\u0645\u0644\u0627\u062A \u0628\u0644\u0648\u0646 \u0627\u0644\u0637\u0648\u0628\u0629 \u0627\u0644\u062A\u064A \u0623\u062A\u062A \u0645\u0646\u0647\u0627\u060C \u0648\u0633\u062A\u064F\u0644\u0648\u0651\u0646 \u0623\u0648\u0644 \u0637\u0648\u0628\u0629 \u062A\u0644\u0645\u0633\u0647\u0627 \u0628\u0646\u0641\u0633 \u0627\u0644\u0644\u0648\u0646. \u062A\u0638\u0647\u0631 \u0627\u0644\u0639\u0645\u0644\u0627\u062A \u0628\u0633\u0631\u0639\u0629 \u0627\u0644\u0643\u0631\u0629 \u0627\u0644\u062A\u064A \u0643\u0633\u0631\u062A\u0647\u0627\u060C \u0645\u0627 \u064A\u0639\u0646\u064A \u0623\u0646\u0647 \u064A\u0645\u0643\u0646\u0643 \u0627\u0644\u062A\u0635\u0648\u064A\u0628 \u0642\u0644\u064A\u0644\u0627\u064B \u0628\u0627\u062A\u062C\u0627\u0647 \u0627\u0644\u0637\u0648\u0628 \u0627\u0644\u0630\u064A \u062A\u0631\u064A\u062F \\"\u0637\u0644\u0627\u0626\u0647\\". \u0641\u064A \u0627\u0644\u0645\u0633\u062A\u0648\u0649 1\u060C \u064A\u064F\u0645\u0643\u0646 \u0644\u0643\u0644 \u0639\u0645\u0644\u0629 \u062A\u0644\u0648\u064A\u0646 \u0637\u0648\u0628\u0629 \u0648\u0627\u062D\u062F\u0629 \u0642\u0628\u0644 \u0623\u0646 \\"\u062A\u064F\u0633\u062A\u0647\u0644\u0643\\" \u0648\u062A\u0638\u0647\u0631 \u0641\u0627\u0631\u063A\u0629.","upgrades.minefield.name":"\u062D\u0642\u0644 \u0623\u0644\u063A\u0627\u0645","upgrades.minefield.tooltip":"+{{lvl}} \u0645\u062C\u0645\u0648\u0639\u0629 \u0644\u0643\u0644 \u0642\u0646\u0628\u0644\u0629 \u0639\u0644\u0649 \u0627\u0644\u0634\u0627\u0634\u0629","upgrades.minefield.verbose_description":"\u064A\u0636\u064A\u0641 +lvl \u0625\u0644\u0649 \u0627\u0644\u0645\u062C\u0645\u0648\u0639\u0629 \u0639\u0646\u062F \u0648\u0636\u0639 \u0644\u0628\u0646\u0629\u060C \u0648-lvl \u0639\u0646\u062F \u062A\u062F\u0645\u064A\u0631\u0647\u0627\u060C \u0648\u064A\u0631\u0641\u0639 \u0627\u0644\u0645\u062C\u0645\u0648\u0639\u0629 \u0627\u0644\u0623\u0633\u0627\u0633\u064A\u0629 \u0628\u0645\u0642\u062F\u0627\u0631 \u0639\u062F\u062F \u0627\u0644\u0637\u0648\u0628 \u0645\u0636\u0631\u0648\u0628\u064B\u0627 \u0641\u064A \u0627\u0644\u0645\u0633\u062A\u0648\u0649","upgrades.multiball.name":"\u0643\u0631\u0629 \u0645\u062A\u0639\u062F\u062F\u0629","upgrades.multiball.tooltip":"\u0627\u0628\u062F\u0623 \u0643\u0644 \u0627\u0644\u0645\u0633\u062A\u0648\u064A\u0627\u062A \u0628\u0640 {{count}} \u0643\u0631\u0629.","upgrades.multiball.verbose_description":"\u0628\u0645\u062C\u0631\u062F \u0623\u0646 \u062A\u0633\u0642\u0637 \u0627\u0644\u0643\u0631\u0629 \u0641\u064A Breakout 71\u060C \u0633\u062A\u062E\u0633\u0631.\\n\\n\u0645\u0639 \u0647\u0630\u0647 \u0627\u0644\u0645\u064A\u0632\u0629\u060C \u0633\u062A\u062D\u0635\u0644 \u0639\u0644\u0649 \u0643\u0631\u062A\u064A\u0646\u060C \u0645\u0627 \u064A\u0639\u0646\u064A \u0623\u0646\u0643 \u0642\u0627\u062F\u0631 \u0639\u0644\u0649 \u062A\u062D\u0645\u0644 \u062E\u0633\u0627\u0631\u0629 \u0625\u062D\u062F\u0627\u0647\u0645\u0627.\\n\\n\u062A\u0639\u0648\u062F \u0627\u0644\u0643\u0631\u0627\u062A \u0627\u0644\u0645\u0641\u0642\u0648\u062F\u0629 \u0641\u064A \u0627\u0644\u0645\u0633\u062A\u0648\u0649 \u0627\u0644\u062A\u0627\u0644\u064A.\\n\\n\u0627\u0645\u062A\u0644\u0627\u0643 \u0623\u0643\u062B\u0631 \u0645\u0646 \u0643\u0631\u0629 \u0648\u0627\u062D\u062F\u0629 \u064A\u062A\u064A\u062D \u0644\u0643 \u0627\u0644\u062D\u0635\u0648\u0644 \u0639\u0644\u0649 \u0645\u0632\u0627\u064A\u0627 \u0625\u0636\u0627\u0641\u064A\u0629\u060C \u0648\u0628\u0627\u0644\u0637\u0628\u0639 \u064A\u064F\u0633\u0631\u0651\u0639 \u0645\u0646 \u0625\u0646\u0647\u0627\u0621 \u0627\u0644\u0645\u0633\u062A\u0648\u0649.","upgrades.nbricks.name":"\u062D\u062C\u0645 \u0627\u0644\u0639\u064A\u0646\u0629 \u0627\u0644\u0635\u0627\u0631\u0645","upgrades.nbricks.tooltip":"\u0627\u0636\u0631\u0628 {{lvl}} \u0637\u0648\u0628\u0629 \u0628\u0627\u0644\u0636\u0628\u0637 \u0644\u0643\u0644 \u0627\u0631\u062A\u062F\u0627\u062F \u0644\u0644\u0645\u062C\u062F\u0627\u0641 \u0644\u0644\u062D\u0635\u0648\u0644 \u0639\u0644\u0649 +{{lvl}} \u0645\u062C\u0645\u0648\u0639\u0629\u060C \u0648\u0625\u0644\u0627 \u0641\u0633\u064A\u062A\u0645 \u0625\u0639\u0627\u062F\u0629 \u062A\u0639\u064A\u064A\u0646\u0647\u0627","upgrades.nbricks.verbose_description":"\u0644\u064A\u0633 \u0628\u0627\u0644\u0636\u0631\u0648\u0631\u0629 \u062A\u062F\u0645\u064A\u0631 \u062A\u0644\u0643 \u0627\u0644\u0637\u0648\u0628\u060C \u0644\u0643\u0646 \u0639\u0644\u064A\u0643 \u0636\u0631\u0628\u0647\u0627. \u0627\u0644\u0637\u0648\u0628 \u0627\u0644\u0645\u062F\u0645\u0631 \u0628\u0627\u0644\u0627\u0646\u0641\u062C\u0627\u0631\u0627\u062A \u0644\u0627 \u064A\u064F\u062D\u062A\u0633\u0628.","upgrades.one_more_choice.name":"\u062E\u064A\u0627\u0631 \u0625\u0636\u0627\u0641\u064A","upgrades.one_more_choice.tooltip":"\u0633\u062A\u0648\u0641\u0631 \u0639\u0645\u0644\u064A\u0627\u062A \u0631\u0641\u0639 \u0627\u0644\u0645\u0633\u062A\u0648\u0649 \u0627\u0644\u0625\u0636\u0627\u0641\u064A\u0629 {{lvl}} \u062E\u064A\u0627\u0631\u064B\u0627 \u0625\u0636\u0627\u0641\u064A\u064B\u0627 \u0641\u064A \u0627\u0644\u0642\u0627\u0626\u0645\u0629","upgrades.one_more_choice.verbose_description":"\u0633\u062A\u062D\u062A\u0648\u064A \u0643\u0644 \u0642\u0627\u0626\u0645\u0629 \u062A\u0631\u0642\u064A\u0629 \u0639\u0644\u0649 \u062E\u064A\u0627\u0631 \u0625\u0636\u0627\u0641\u064A. \u0647\u0630\u0627 \u0644\u0627 \u064A\u0632\u064A\u062F \u0645\u0646 \u0639\u062F\u062F \u0627\u0644\u062A\u0631\u0642\u064A\u0627\u062A \u0627\u0644\u0645\u062A\u0627\u062D\u0629.","upgrades.passive_income.name":"\u0627\u0644\u062F\u062E\u0644 \u0627\u0644\u0633\u0644\u0628\u064A","upgrades.passive_income.tooltip":"+{{lvl}} \u0645\u062C\u0645\u0648\u0639\u0629 / \u0644\u0628\u0646\u0629\u060C \u0645\u0627 \u0644\u0645 \u064A\u062A\u0645 \u062A\u062D\u0631\u064A\u0643 \u0627\u0644\u0645\u062C\u062F\u0627\u0641 \u0641\u064A \u0622\u062E\u0631 {{time}}\u062B\u0627\u0646\u064A\u0629\u060C \u062B\u0645 \u064A\u062A\u0645 \u0625\u0639\u0627\u062F\u0629 \u062A\u0639\u064A\u064A\u0646\u0647 \u0628\u062F\u0644\u0627\u064B \u0645\u0646 \u0630\u0644\u0643","upgrades.passive_income.verbose_description":"\u064A\u0645\u0643\u0646 \u0644\u0628\u0639\u0636 \u0627\u0644\u0627\u0645\u062A\u064A\u0627\u0632\u0627\u062A \u0623\u0646 \u062A\u0633\u0627\u0639\u062F \u0627\u0644\u0643\u0631\u0627\u062A \u0639\u0644\u0649 \u0627\u0644\u0642\u064A\u0627\u0645 \u0628\u0645\u0627 \u062A\u0631\u064A\u062F \u062F\u0648\u0646 \u0627\u0644\u062D\u0627\u062C\u0629 \u0625\u0644\u0649 \u0627\u0644\u0642\u064A\u0627\u0645 \u0628\u0623\u064A \u0634\u064A\u0621.","upgrades.picky_eater.name":"\u0622\u0643\u0644 \u0627\u0646\u062A\u0642\u0627\u0626\u064A","upgrades.picky_eater.tooltip":"+{{lvl}} \u0645\u062C\u0645\u0648\u0639\u0629 \u0644\u0643\u0644 \u0644\u0628\u0646\u0629 \u0645\u0643\u0633\u0648\u0631\u0629\u060C \u064A\u062A\u0645 \u0625\u0639\u0627\u062F\u0629 \u062A\u0639\u064A\u064A\u0646\u0647\u0627 \u0639\u0646\u062F \u062A\u063A\u064A\u0631 \u0644\u0648\u0646 \u0627\u0644\u0643\u0631\u0629","upgrades.picky_eater.verbose_description":"\u0643\u0644\u0645\u0627 \u0643\u0633\u0631\u062A\u064E \u0644\u0628\u0646\u0629 \u0645\u0646 \u0646\u0641\u0633 \u0644\u0648\u0646 \u0643\u0631\u062A\u0643\u060C \u062A\u0632\u062F\u0627\u062F \u0645\u062C\u0645\u0648\u0639\u062A\u0643 \u0628\u0645\u0642\u062F\u0627\u0631 \u0643\u0631\u0629 \u0648\u0627\u062D\u062F\u0629.\\n\\n\u0625\u0630\u0627 \u0643\u0627\u0646 \u0644\u0648\u0646\u0647\u0627 \u0645\u062E\u062A\u0644\u0641\u064B\u0627\u060C \u062A\u0623\u062E\u0630 \u0627\u0644\u0643\u0631\u0629 \u0627\u0644\u0644\u0648\u0646 \u0627\u0644\u062C\u062F\u064A\u062F\u060C \u0644\u0643\u0646 \u0627\u0644\u0645\u062C\u0645\u0648\u0639\u0629 \u062A\u064F\u0639\u0627\u062F \u0636\u0628\u0637\u0647\u0627\u060C \u0625\u0644\u0627 \u0641\u064A \u062D\u0627\u0644 \u0639\u062F\u0645 \u0648\u062C\u0648\u062F \u0623\u064A \u0637\u0648\u0628 \u0645\u062A\u0628\u0642\u064A \u0645\u0646 \u0644\u0648\u0646 \u0627\u0644\u0643\u0631\u0629.\\n\\n\u0628\u0645\u062C\u0631\u062F \u062D\u0635\u0648\u0644\u0643 \u0639\u0644\u0649 \u0645\u062C\u0645\u0648\u0639\u0629 \u0623\u0639\u0644\u0649 \u0645\u0646 \u0627\u0644\u062D\u062F \u0627\u0644\u0623\u062F\u0646\u0649\u060C \u0633\u062A\u064F\u062D\u0627\u0637 \u0627\u0644\u0637\u0648\u0628 \u0630\u0627\u062A \u0627\u0644\u0644\u0648\u0646 \u063A\u064A\u0631 \u0627\u0644\u0645\u0646\u0627\u0633\u0628 \u0628\u0625\u0637\u0627\u0631 \u0623\u062D\u0645\u0631.\\n\\n\u0625\u0630\u0627 \u0643\u0627\u0646 \u0644\u062F\u064A\u0643 \u0623\u0643\u062B\u0631 \u0645\u0646 \u0643\u0631\u0629\u060C \u0641\u0633\u064A\u062A\u063A\u064A\u0631 \u0644\u0648\u0646\u0647\u0627 \u062C\u0645\u064A\u0639\u064B\u0627 \u0639\u0646\u062F \u0627\u0635\u0637\u062F\u0627\u0645 \u0625\u062D\u062F\u0627\u0647\u0627 \u0628\u0637\u0648\u0628\u0629.","upgrades.pierce.name":"\u062B\u0642\u0628","upgrades.pierce.tooltip":"\u0627\u0644\u0643\u0631\u0629 \u062A\u062E\u062A\u0631\u0642 {{count}} \u0637\u0648\u0628\u0629 \u0628\u0639\u062F \u0627\u0631\u062A\u062F\u0627\u062F \u0627\u0644\u0645\u0636\u0631\u0628","upgrades.pierce.verbose_description":"\u0639\u0627\u062F\u0629\u064B \u0645\u0627 \u062A\u0631\u062A\u062F \u0627\u0644\u0643\u0631\u0629 \u0628\u0645\u062C\u0631\u062F \u0645\u0644\u0627\u0645\u0633\u062A\u0647\u0627 \u0644\u0623\u064A \u0634\u064A\u0621. \u0645\u0639 \u0647\u0630\u0647 \u0627\u0644\u0645\u064A\u0632\u0629\u060C \u0633\u062A\u0648\u0627\u0635\u0644 \u0645\u0633\u0627\u0631\u0647\u0627 \u062D\u062A\u0649 \u0643\u0633\u0631 \u062B\u0644\u0627\u062B \u0637\u0648\u0628\u0627\u062A.\\n\\n\u0628\u0639\u062F \u0630\u0644\u0643\u060C \u062A\u0631\u062A\u062F \u0639\u0644\u0649 \u0627\u0644\u0637\u0648\u0628\u0629 \u0627\u0644\u0631\u0627\u0628\u0639\u0629\u060C \u0648\u0633\u062A\u062D\u062A\u0627\u062C \u0625\u0644\u0649 \u0644\u0645\u0633 \u0627\u0644\u0645\u0636\u0631\u0628 \u0644\u0625\u0639\u0627\u062F\u0629 \u0636\u0628\u0637 \u0627\u0644\u0639\u062F\u0627\u062F.","upgrades.pierce_color.name":"\u062B\u0642\u0628 \u0627\u0644\u0644\u0648\u0646","upgrades.pierce_color.tooltip":"+{{lvl}} \u0636\u0631\u0631 \u0644\u0644\u0637\u0648\u0628 \u0645\u0646 \u0644\u0648\u0646 \u0627\u0644\u0643\u0631\u0629","upgrades.pierce_color.verbose_description":"\u0643\u0644\u0645\u0627 \u0627\u0635\u0637\u062F\u0645\u062A \u0627\u0644\u0643\u0631\u0629 \u0628\u0642\u0637\u0639\u0629 \u0645\u0646 \u0646\u0641\u0633 \u0627\u0644\u0644\u0648\u0646\u060C \u0633\u062A\u0645\u0631\u0651 \u062F\u0648\u0646 \u0639\u0627\u0626\u0642.\\n\\n\u0648\u0625\u0630\u0627 \u0627\u0635\u0637\u062F\u0645\u062A \u0628\u0642\u0637\u0639\u0629 \u0645\u0646 \u0644\u0648\u0646 \u0645\u062E\u062A\u0644\u0641\u060C \u0641\u0633\u062A\u0643\u0633\u0631\u0647\u0627\u060C \u0648\u062A\u0623\u062E\u0630 \u0644\u0648\u0646\u0647\u0627\u060C \u0648\u062A\u0631\u062A\u062F.\\n\\n\u0625\u0630\u0627 \u0643\u0627\u0646\u062A \u0644\u062F\u064A\u0643 \u0642\u0637\u0639 \u0645\u062A\u064A\u0646\u0629\u060C \u0641\u0642\u062F \u062A\u0631\u062A\u062F \u0627\u0644\u0643\u0631\u0629 \u0639\u0646 \u0642\u0637\u0639\u0629 \u0645\u0646 \u0646\u0641\u0633 \u0627\u0644\u0644\u0648\u0646.","upgrades.puck_repulse_ball.help_plural":"\u0642\u0648\u0629 \u062A\u0646\u0627\u0641\u0631 \u0623\u0642\u0648\u0649","upgrades.puck_repulse_ball.name":"\u0647\u0628\u0648\u0637 \u0646\u0627\u0639\u0645","upgrades.puck_repulse_ball.tooltip":"\u0627\u0644\u0645\u062C\u062F\u0627\u0641 \u064A\u0635\u062F \u0627\u0644\u0643\u0631\u0627\u062A","upgrades.puck_repulse_ball.verbose_description":"\u0639\u0646\u062F\u0645\u0627 \u062A\u0642\u062A\u0631\u0628 \u0627\u0644\u0643\u0631\u0629 \u0645\u0646 \u0627\u0644\u0645\u0636\u0631\u0628\u060C \u0641\u0625\u0646\u0647\u0627 \u062A\u0628\u062F\u0623 \u0641\u064A \u0627\u0644\u062A\u0628\u0627\u0637\u0624\u060C \u0648\u0631\u0628\u0645\u0627 \u062A\u0631\u062A\u062F \u062F\u0648\u0646 \u0623\u0646 \u062A\u0644\u0645\u0633 \u0627\u0644\u0645\u0636\u0631\u0628.","upgrades.rainbow.name":"\u0642\u0648\u0633 \u0642\u0632\u062D","upgrades.rainbow.tooltip":"\u062A\u0638\u0647\u0631 \u0627\u0644\u0639\u0645\u0644\u0627\u062A \u0627\u0644\u0645\u0639\u062F\u0646\u064A\u0629 \u0628\u0623\u0644\u0648\u0627\u0646 \u0642\u0648\u0633 \u0642\u0632\u062D.","upgrades.rainbow.verbose_description":"\u0645\u0639 \u0643\u0644 \u0645\u0633\u062A\u0648\u0649\u060C \u062A\u0632\u062F\u0627\u062F \u0646\u0633\u0628\u0629 \u0627\u0644\u0639\u0645\u0644\u0627\u062A \u0627\u0644\u0645\u0644\u0648\u0646\u0629. \u064A\u0639\u062A\u0645\u062F \u0627\u0644\u0644\u0648\u0646 \u0639\u0644\u0649 \u0648\u0642\u062A \u0627\u0644\u0645\u0633\u062A\u0648\u0649.","upgrades.reach.name":"\u0645\u0646 \u0623\u0639\u0644\u0649 \u0625\u0644\u0649 \u0623\u0633\u0641\u0644","upgrades.reach.tooltip":"\u0644\u0645\u0633 \u0645\u0643\u0639\u0628\u0627\u062A N \u0641\u064A \u0627\u0644\u0635\u0641 \u0627\u0644\u0633\u0641\u0644\u064A \u064A\u064F\u0639\u064A\u062F \u0636\u0628\u0637 \u0627\u0644\u0645\u062C\u0645\u0648\u0639\u0629. \u0648\u0625\u0644\u0627\u060C \u0641\u0625\u0646 +N \u0645\u062C\u0645\u0648\u0639\u0629","upgrades.reach.verbose_description":"\u0625\u0630\u0627 \u0643\u0627\u0646 \u0647\u0646\u0627\u0643 \u0635\u0641 \u0648\u0627\u062D\u062F \u0641\u0642\u0637 \u0645\u0646 \u0627\u0644\u0637\u0648\u0628\u060C \u0623\u0648 \u0625\u0630\u0627 \u063A\u0637\u0649 \u0627\u0644\u0635\u0641 \u0627\u0644\u0633\u0641\u0644\u064A \u0639\u0631\u0636 \u0627\u0644\u0644\u0639\u0628\u0629 \u0628\u0627\u0644\u0643\u0627\u0645\u0644\u060C \u0641\u0644\u0646 \u062A\u064F\u062D\u062F\u062B \u0647\u0630\u0647 \u0627\u0644\u0645\u064A\u0632\u0629 \u0623\u064A \u0641\u0631\u0642. \u0648\u0625\u0644\u0627\u060C \u0641\u0625\u0646 \u0643\u0633\u0631 \u0647\u0630\u0627 \u0627\u0644\u0635\u0641 \u0627\u0644\u0633\u0641\u0644\u064A \u064A\u064F\u0639\u064A\u062F \u0636\u0628\u0637 \u0627\u0644\u0645\u062C\u0645\u0648\u0639\u0629\u060C \u0628\u064A\u0646\u0645\u0627 \u064A\u0624\u062F\u064A \u0643\u0633\u0631 \u0623\u064A \u0634\u064A\u0621 \u0622\u062E\u0631 \u0625\u0644\u0649 \u0632\u064A\u0627\u062F\u0629 \u0627\u0644\u0645\u062C\u0645\u0648\u0639\u0629 \u0628\u0645\u0642\u062F\u0627\u0631 \u0639\u062F\u062F \u0627\u0644\u0637\u0648\u0628 \u0627\u0644\u0645\u0648\u062C\u0648\u062F \u0641\u064A \u0630\u0644\u0643 \u0627\u0644\u0635\u0641 \u0627\u0644\u0633\u0641\u0644\u064A.\\n\\n\u0633\u064A\u062A\u0645 \u062A\u0645\u064A\u064A\u0632 \u0627\u0644\u0635\u0641 \u0627\u0644\u0633\u0641\u0644\u064A \u0628\u0627\u0644\u0644\u0648\u0646 \u0627\u0644\u0623\u062D\u0645\u0631.","upgrades.respawn.name":"\u0625\u0639\u0627\u062F\u0629 \u0627\u0644\u0638\u0647\u0648\u0631","upgrades.respawn.tooltip":"{{percent}}% \u0645\u0646 \u0627\u0644\u0637\u0648\u0628 \u064A\u0638\u0647\u0631 \u0645\u0631\u0629 \u0623\u062E\u0631\u0649 \u0628\u0639\u062F {{delay}}\u062B\u0627\u0646\u064A\u0629.","upgrades.respawn.verbose_description":"\u0633\u0648\u0641 \u064A\u0633\u0627\u0639\u062F\u0643 \u062A\u0623\u062B\u064A\u0631 \u0627\u0644\u062C\u0633\u064A\u0645\u0627\u062A \u0639\u0644\u0649 \u0645\u0639\u0631\u0641\u0629 \u0645\u0643\u0627\u0646 \u0638\u0647\u0648\u0631 \u0627\u0644\u0637\u0648\u0628.","upgrades.right_is_lava.name":"\u062A\u062C\u0646\u0628 \u0627\u0644\u062C\u0627\u0646\u0628 \u0627\u0644\u0623\u064A\u0645\u0646","upgrades.right_is_lava.tooltip":"+{{lvl}} \u0645\u062C\u0645\u0648\u0639\u0629 \u0644\u0643\u0644 \u0645\u0643\u0639\u0628. \u062A\u064F\u0639\u0627\u062F \u0627\u0644\u0645\u062C\u0645\u0648\u0639\u0629 \u0625\u0644\u0649 \u0648\u0636\u0639\u0647\u0627 \u0627\u0644\u0637\u0628\u064A\u0639\u064A \u0625\u0630\u0627 \u0636\u0631\u0628\u062A \u0627\u0644\u0643\u0631\u0629 \u0627\u0644\u062C\u0627\u0646\u0628 \u0627\u0644\u0623\u064A\u0633\u0631 \u0645\u0646 \u0627\u0644\u0634\u0627\u0634\u0629.","upgrades.right_is_lava.verbose_description":"\u0643\u0644\u0645\u0627 \u0643\u0633\u0631\u062A\u064E \u0644\u0628\u0646\u0629\u060C \u0633\u062A\u0632\u062F\u0627\u062F \u0645\u062C\u0645\u0648\u0639\u062A\u0643\u064E \u0628\u0648\u0627\u062D\u062F\u0629\u060C \u0645\u0627 \u064A\u0639\u0646\u064A \u0623\u0646\u0643 \u0633\u062A\u062D\u0635\u0644 \u0639\u0644\u0649 \u0639\u0645\u0644\u0629 \u0625\u0636\u0627\u0641\u064A\u0629 \u0645\u0646 \u0643\u0644 \u0644\u0628\u0646\u0629 \u062A\u0643\u0633\u0631\u0647\u0627 \u0644\u0627\u062D\u0642\u064B\u0627.\\n\\n\u0645\u0639 \u0630\u0644\u0643\u060C \u0633\u062A\u064F\u0639\u0627\u062F \u0636\u0628\u0637 \u0645\u062C\u0645\u0648\u0639\u062A\u0643\u064E \u062D\u0627\u0644\u0645\u0627 \u062A\u0635\u0637\u062F\u0645 \u0643\u0631\u062A\u0643\u064E \u0628\u0627\u0644\u062C\u0627\u0646\u0628 \u0627\u0644\u0623\u064A\u0645\u0646.\\n\\n\u0628\u0645\u062C\u0631\u062F \u0623\u0646 \u062A\u0631\u062A\u0641\u0639 \u0645\u062C\u0645\u0648\u0639\u062A\u0643\u064E\u060C \u064A\u0635\u0628\u062D \u0627\u0644\u062C\u0627\u0646\u0628 \u0627\u0644\u0623\u064A\u0645\u0646 \u0623\u062D\u0645\u0631 \u0644\u062A\u0630\u0643\u064A\u0631\u0643 \u0628\u0636\u0631\u0648\u0631\u0629 \u062A\u062C\u0646\u0628 \u0636\u0631\u0628\u0647\u0627.\\n\\n","upgrades.sacrifice.help_l1":"\u0641\u0642\u062F\u0627\u0646 \u0627\u0644\u062D\u064A\u0627\u0629 \u064A\u0632\u064A\u0644 \u0643\u0644 \u0627\u0644\u0637\u0648\u0628","upgrades.sacrifice.help_over":"\u062E\u0633\u0627\u0631\u0629 \u062D\u064A\u0627\u0629 {{lvl}}\xd7 \u0627\u0644\u0645\u062C\u0645\u0648\u0639\u0629 \u062B\u0645 \u0625\u0632\u0627\u0644\u0629 \u0643\u0644 \u0627\u0644\u0637\u0648\u0628","upgrades.sacrifice.name":"\u062A\u0635\u062D\u064A\u0629","upgrades.sacrifice.verbose_description":"\u0642\u062F \u064A\u0624\u062F\u064A \u0647\u0630\u0627 \u0625\u0644\u0649 \u0627\u0631\u062A\u0641\u0627\u0639 \u0627\u0644\u0645\u062C\u0645\u0648\u0639\u0629 \u0625\u0644\u0649 \u062D\u062F \u0643\u0628\u064A\u0631.","upgrades.sapper.help_plural":"\u0623\u0648\u0644 {{lvl}} \u0637\u0648\u0628\u0629 \u0645\u0643\u0633\u0648\u0631\u0629 \u062A\u0635\u0628\u062D \u0642\u0646\u0627\u0628\u0644.","upgrades.sapper.name":"\u0645\u0647\u0646\u062F\u0633","upgrades.sapper.tooltip":"\u0627\u0644\u0637\u0648\u0628\u0629 \u0627\u0644\u0623\u0648\u0644\u0649 \u0627\u0644\u0645\u0643\u0633\u0648\u0631\u0629 \u062A\u0635\u0628\u062D \u0642\u0646\u0628\u0644\u0629.","upgrades.sapper.verbose_description":"\u0628\u062F\u0644\u0627\u064B \u0645\u0646 \u0645\u062C\u0631\u062F \u0627\u0644\u0627\u062E\u062A\u0641\u0627\u0621\u060C \u0633\u062A\u064F\u0633\u062A\u0628\u062F\u0644 \u0623\u0648\u0644 \u0644\u0628\u0646\u0629 \u062A\u0643\u0633\u0631\u0647\u0627 \u0628\u0628\u0646\u0629 \u0642\u0646\u0628\u0644\u0629. \u0627\u0631\u062A\u0637\u0627\u0645 \u0627\u0644\u0643\u0631\u0629 \u0628\u0627\u0644\u0645\u0636\u0631\u0628 \u064A\u064F\u0639\u064A\u062F \u062A\u0641\u0639\u064A\u0644 \u0627\u0644\u062A\u0623\u062B\u064A\u0631. \u0631\u0641\u0639 \u0645\u0633\u062A\u0648\u0649 \u0647\u0630\u0647 \u0627\u0644\u0645\u064A\u0632\u0629 \u0633\u064A\u0633\u0645\u062D \u0644\u0643 \u0628\u0648\u0636\u0639 \u0627\u0644\u0645\u0632\u064A\u062F \u0645\u0646 \u0627\u0644\u0642\u0646\u0627\u0628\u0644.","upgrades.shocks.name":"\u0627\u0644\u0635\u062F\u0645\u0627\u062A","upgrades.shocks.tooltip":"\u062A\u0635\u0627\u062F\u0645\u0627\u062A \u0627\u0644\u0643\u0631\u0627\u062A \u0627\u0644\u0645\u062A\u0641\u062C\u0631\u0629","upgrades.shocks.verbose_description":"\u0639\u0646\u062F\u0645\u0627 \u062A\u0635\u0637\u062F\u0645 \u0643\u0631\u062A\u0627\u0646\u060C \u0641\u0625\u0646\u0647\u0645\u0627 \u062A\u062A\u0628\u0627\u062F\u0644\u0627\u0646 \u0633\u0631\u0639\u062A\u0647\u0645\u0627\u060C \u0648\u064A\u062D\u062F\u062B \u0627\u0646\u0641\u062C\u0627\u0631\u060C \u0648\u064A\u0643\u062A\u0633\u0628\u0627\u0646 \u0633\u0631\u0639\u0629 \u0625\u0636\u0627\u0641\u064A\u0629 \u0644\u0641\u0635\u0644\u0647\u0645\u0627.","upgrades.shunt.name":"\u0646\u0627\u0648\u0631","upgrades.shunt.tooltip":"\u0627\u062D\u062A\u0641\u0638 \u0628\u0640 {{percent}}% \u0645\u0646 \u0645\u062C\u0645\u0648\u0639\u062A\u0643 \u0628\u064A\u0646 \u0627\u0644\u0645\u0633\u062A\u0648\u064A\u0627\u062A","upgrades.shunt.verbose_description":"\u0625\u0630\u0627 \u0643\u0627\u0646 \u0644\u062F\u064A\u0643 \u0623\u064A\u0636\u064B\u0627 \u0628\u062F\u0627\u064A\u0629 \u0633\u0627\u062E\u0646\u0629\u060C \u0641\u0633\u064A\u062A\u0645 \u0625\u0636\u0627\u0641\u0629 \u0627\u0644\u0628\u062F\u0627\u064A\u0629 \u0627\u0644\u0633\u0627\u062E\u0646\u0629 \u0625\u0644\u0649 \u0627\u0644\u0645\u062C\u0645\u0648\u0639\u0629 \u0627\u0644\u062D\u0627\u0644\u064A\u0629","upgrades.side_flip.name":"\u0627\u0644\u064A\u062F \u0627\u0644\u064A\u0645\u0646\u0649","upgrades.side_flip.tooltip":"+{{lvl}} \u0645\u062C\u0645\u0648\u0639\u0629 \u0644\u0643\u0644 \u0644\u0628\u0646\u0629 \u0645\u0643\u0633\u0648\u0631\u0629 \u0645\u0646 \u0627\u0644\u064A\u0645\u064A\u0646\u060C -{{loss}} \u0628\u062E\u0644\u0627\u0641 \u0630\u0644\u0643","upgrades.side_flip.verbose_description":"\u0627\u0636\u0631\u0628 \u0627\u0644\u0637\u0648\u0628\u0629 \u0639\u0644\u0649 \u062C\u0627\u0646\u0628\u0647\u0627 \u0627\u0644\u0623\u064A\u0645\u0646 \u0644\u062A\u062D\u0635\u0644 \u0639\u0644\u0649 \u0636\u0631\u0628\u0629 \u0643\u0648\u0645\u0628\u0648 \u0648\u0627\u062D\u062F\u0629\u060C \u0644\u0643\u0646 \u062A\u062C\u0646\u0628 \u0636\u0631\u0628\u0647\u0627 \u0639\u0644\u0649 \u0627\u0644\u062C\u0627\u0646\u0628 \u0627\u0644\u0623\u064A\u0633\u0631 \u0644\u0623\u0646 \u0630\u0644\u0643 \u0633\u064A\u064F\u0632\u064A\u0644 \u0636\u0631\u0628\u062A\u064A\u0646 \u0643\u0648\u0645\u0628\u0648. \u0627\u0644\u0636\u0631\u0628 \u0645\u0646 \u0627\u0644\u0623\u0639\u0644\u0649 \u0648\u0627\u0644\u0623\u0633\u0641\u0644 \u0644\u0627 \u064A\u064F\u062C\u062F\u064A \u0646\u0641\u0639\u064B\u0627.","upgrades.side_kick.name":"\u0639\u0633\u0631\u0627\u0621","upgrades.side_kick.tooltip":"+{{lvl}} \u0645\u062C\u0645\u0648\u0639\u0629 \u0644\u0643\u0644 \u0644\u0628\u0646\u0629 \u0645\u0643\u0633\u0648\u0631\u0629 \u0645\u0646 \u0627\u0644\u064A\u0633\u0627\u0631\u060C -{{loss}} \u062E\u0644\u0627\u0641 \u0630\u0644\u0643","upgrades.side_kick.verbose_description":"\u0627\u0636\u0631\u0628 \u0627\u0644\u0637\u0648\u0628\u0629 \u0639\u0644\u0649 \u062C\u0627\u0646\u0628\u0647\u0627 \u0627\u0644\u0623\u064A\u0633\u0631 \u0644\u062A\u062D\u0635\u0644 \u0639\u0644\u0649 \u0636\u0631\u0628\u0629 \u0643\u0648\u0645\u0628\u0648 \u0648\u0627\u062D\u062F\u0629\u060C \u0644\u0643\u0646 \u062A\u062C\u0646\u0628 \u0636\u0631\u0628\u0647\u0627 \u0639\u0644\u0649 \u0627\u0644\u062C\u0627\u0646\u0628 \u0627\u0644\u0623\u064A\u0645\u0646 \u0644\u0623\u0646 \u0630\u0644\u0643 \u0633\u064A\u064F\u0632\u064A\u0644 \u0636\u0631\u0628\u062A\u064A\u0646 \u0643\u0648\u0645\u0628\u0648. \u0627\u0644\u0636\u0631\u0628 \u0645\u0646 \u0627\u0644\u0623\u0639\u0644\u0649 \u0648\u0627\u0644\u0623\u0633\u0641\u0644 \u0644\u0627 \u064A\u064F\u062C\u062F\u064A \u0646\u0641\u0639\u064B\u0627.","upgrades.skip_last.help_plural":"\u0633\u0648\u0641 \u062A\u0646\u0641\u062C\u0631 \u0622\u062E\u0631 {{lvl}} \u0637\u0648\u0628\u0629.","upgrades.skip_last.name":"\u062A\u0646\u0638\u064A\u0641 \u0633\u0647\u0644","upgrades.skip_last.tooltip":"\u0627\u0644\u0637\u0648\u0628\u0629 \u0627\u0644\u0627\u062E\u064A\u0631\u0629 \u0633\u0648\u0641 \u062A\u0646\u0641\u062C\u0631","upgrades.skip_last.verbose_description":"\u0639\u0644\u064A\u0643 \u0643\u0633\u0631 \u062C\u0645\u064A\u0639 \u0627\u0644\u0637\u0648\u0628 \u0644\u0644\u0627\u0646\u062A\u0642\u0627\u0644 \u0625\u0644\u0649 \u0627\u0644\u0645\u0633\u062A\u0648\u0649 \u0627\u0644\u062A\u0627\u0644\u064A. \u0645\u0639 \u0630\u0644\u0643\u060C \u0642\u062F \u064A\u0643\u0648\u0646 \u0645\u0646 \u0627\u0644\u0635\u0639\u0628 \u0627\u0644\u062D\u0635\u0648\u0644 \u0639\u0644\u0649 \u0627\u0644\u0637\u0648\u0628 \u0627\u0644\u0623\u062E\u064A\u0631.\\n\\n\u064A\u0645\u0646\u062D\u0643 \u0625\u0643\u0645\u0627\u0644 \u0627\u0644\u0645\u0633\u062A\u0648\u0649 \u0645\u0628\u0643\u0631\u064B\u0627 \u062E\u064A\u0627\u0631\u0627\u062A \u0625\u0636\u0627\u0641\u064A\u0629 \u0639\u0646\u062F \u0627\u0644\u062A\u0631\u0642\u064A\u0629. \u0643\u0645\u0627 \u0623\u0646 \u0639\u062F\u0645 \u062A\u0641\u0648\u064A\u062A \u0627\u0644\u0637\u0648\u0628 \u0623\u0628\u062F\u064B\u0627 \u0645\u0641\u064A\u062F \u062C\u062F\u064B\u0627.\\n\\n\u0644\u0630\u0627\u060C \u0625\u0630\u0627 \u0648\u0627\u062C\u0647\u062A \u0635\u0639\u0648\u0628\u0629 \u0641\u064A \u0643\u0633\u0631 \u0627\u0644\u0637\u0648\u0628 \u0627\u0644\u0623\u062E\u064A\u0631\u060C \u0641\u0625\u0646 \u0627\u0644\u062D\u0635\u0648\u0644 \u0639\u0644\u0649 \u0647\u0630\u0647 \u0627\u0644\u0645\u064A\u0632\u0629 \u0628\u0636\u0639 \u0645\u0631\u0627\u062A \u0642\u062F \u064A\u0633\u0627\u0639\u062F\u0643.","upgrades.slow_down.name":"\u0643\u0631\u0629 \u0623\u0628\u0637\u0623","upgrades.slow_down.tooltip":"\u0627\u0644\u0643\u0631\u0629 \u062A\u062A\u062D\u0631\u0643 \u0628\u0634\u0643\u0644 \u0623\u0628\u0637\u0623","upgrades.slow_down.verbose_description":"\u062A\u0628\u062F\u0623 \u0627\u0644\u0643\u0631\u0629 \u0628\u0628\u0637\u0621 \u0646\u0633\u0628\u064A\u064B\u0627\u060C \u0644\u0643\u0646\u0647\u0627 \u0633\u062A\u062A\u0633\u0627\u0631\u0639 \u0642\u0644\u064A\u0644\u064B\u0627 \u0645\u0639 \u0643\u0644 \u0645\u0633\u062A\u0648\u0649.\\n\\n\u0643\u0645\u0627 \u0633\u062A\u062A\u0633\u0627\u0631\u0639 \u0625\u0630\u0627 \u0642\u0636\u064A\u062A \u0648\u0642\u062A\u064B\u0627 \u0637\u0648\u064A\u0644\u064B\u0627 \u0641\u064A \u0645\u0633\u062A\u0648\u0649 \u0648\u0627\u062D\u062F.\\n\\n\u0647\u0630\u0647 \u0627\u0644\u0645\u064A\u0632\u0629 \u062A\u062C\u0639\u0644\u0647\u0627 \u0623\u0633\u0647\u0644 \u0641\u064A \u0627\u0644\u062A\u062D\u0643\u0645.\\n\\n\u064A\u0645\u0643\u0646\u0643 \u0627\u0644\u062D\u0635\u0648\u0644 \u0639\u0644\u064A\u0647\u0627 \u0641\u064A \u0627\u0644\u0628\u062F\u0627\u064A\u0629 \u062F\u0627\u0626\u0645\u064B\u0627 \u0628\u062A\u0641\u0639\u064A\u0644 \u0648\u0636\u0639 \u0627\u0644\u0623\u0637\u0641\u0627\u0644 \u0641\u064A \u0627\u0644\u0642\u0627\u0626\u0645\u0629.","upgrades.smaller_puck.help_plural":"\u0645\u062C\u0645\u0648\u0639\u0629 \u0645\u062C\u062F\u0627\u0641 \u0623\u0635\u063A\u0631 \u0648\u0642\u0627\u0639\u062F\u0629 \u0623\u0639\u0644\u0649","upgrades.smaller_puck.name":"\u0645\u062C\u062F\u0627\u0641 \u0623\u0635\u063A\u0631","upgrades.smaller_puck.tooltip":"\u064A\u0645\u0646\u062D \u0623\u064A\u0636\u064B\u0627 +5 \u0645\u062C\u0645\u0648\u0639\u0629 \u0623\u0633\u0627\u0633\u064A\u0629","upgrades.smaller_puck.verbose_description":"\u0647\u0630\u0627 \u064A\u064F\u0635\u063A\u0651\u0631 \u062D\u062C\u0645 \u0627\u0644\u0645\u062C\u062F\u0627\u0641\u060C \u0645\u0645\u0627 \u064A\u064F\u0633\u0647\u0651\u0644 \u0646\u0638\u0631\u064A\u064B\u0627 \u0628\u0639\u0636 \u0627\u0644\u0636\u0631\u0628\u0627\u062A \u0627\u0644\u0632\u0627\u0648\u064A\u0629\u060C \u0648\u0644\u0643\u0646\u0647 \u0641\u064A \u0627\u0644\u0648\u0627\u0642\u0639 \u064A\u0632\u064A\u062F \u0645\u0646 \u0627\u0644\u0635\u0639\u0648\u0628\u0629.\\n\\n\u0644\u0647\u0630\u0627 \u0627\u0644\u0633\u0628\u0628 \u0633\u062A\u062D\u0635\u0644 \u0623\u064A\u0636\u064B\u0627 \u0639\u0644\u0649 \u0645\u0643\u0627\u0641\u0623\u0629 \u0631\u0627\u0626\u0639\u0629 \u0642\u062F\u0631\u0647\u0627 +\u0665 \u0639\u0645\u0644\u0627\u062A \u0644\u0643\u0644 \u0637\u0648\u0628\u0629 \u062A\u064F\u0643\u0633\u0631\u0647\u0627 \u0628\u0639\u062F \u0627\u0644\u062A\u0642\u0627\u0637 \u0647\u0630\u0627.","upgrades.soft_reset.name":"\u0625\u0639\u0627\u062F\u0629 \u0627\u0644\u0636\u0628\u0637 \u0627\u0644\u0646\u0627\u0639\u0645\u0629","upgrades.soft_reset.tooltip":"\u0625\u0639\u0627\u062F\u0629 \u062A\u0639\u064A\u064A\u0646 \u0627\u0644\u0645\u062C\u0645\u0648\u0639\u0629 \u062A\u062D\u0627\u0641\u0638 \u0639\u0644\u0649 {{percent}}%","upgrades.soft_reset.verbose_description":"\u0627\u0644\u062D\u062F \u0645\u0646 \u062A\u0623\u062B\u064A\u0631 \u0625\u0639\u0627\u062F\u0629 \u062A\u0639\u064A\u064A\u0646 \u0627\u0644\u0645\u062C\u0645\u0648\u0639\u0629.","upgrades.streak_shots.name":"\u0633\u0644\u0633\u0644\u0629 \u0627\u0644\u0636\u0631\u0628\u0627\u062A","upgrades.streak_shots.tooltip":"\u0645\u0632\u064A\u062F \u0645\u0646 \u0627\u0644\u0639\u0645\u0644\u0627\u062A \u0627\u0644\u0645\u0639\u062F\u0646\u064A\u0629 \u0625\u0630\u0627 \u0642\u0645\u062A \u0628\u0643\u0633\u0631 \u0627\u0644\u0639\u062F\u064A\u062F \u0645\u0646 \u0627\u0644\u0637\u0648\u0628 \u0642\u0628\u0644 \u0627\u0644\u0642\u0641\u0632 \u0639\u0644\u0649 \u0627\u0644\u0645\u062C\u062F\u0627\u0641.","upgrades.streak_shots.verbose_description":"\u0641\u064A \u0643\u0644 \u0645\u0631\u0629 \u062A\u0643\u0633\u0631 \u0641\u064A\u0647\u0627 \u0644\u0628\u0646\u0629\u060C \u062A\u0632\u062F\u0627\u062F \u0645\u062C\u0645\u0648\u0639\u062A\u0643 \u0628\u0645\u0642\u062F\u0627\u0631 \u0648\u0627\u062D\u062F.\\n\\n\u0648\u0644\u0643\u0646\u060C \u0628\u0645\u062C\u0631\u062F \u0623\u0646 \u062A\u0644\u0645\u0633 \u0627\u0644\u0643\u0631\u0629 \u0645\u0636\u0631\u0628\u0643\u060C \u062A\u064F\u0639\u0627\u062F \u0627\u0644\u0645\u062C\u0645\u0648\u0639\u0629 \u0625\u0644\u0649 \u0642\u064A\u0645\u062A\u0647\u0627 \u0627\u0644\u0627\u0641\u062A\u0631\u0627\u0636\u064A\u0629.\\n\\n\u0628\u0645\u062C\u0631\u062F \u0623\u0646 \u062A\u062A\u062C\u0627\u0648\u0632 \u0645\u062C\u0645\u0648\u0639\u062A\u0643 \u0627\u0644\u0642\u064A\u0645\u0629 \u0627\u0644\u0623\u0633\u0627\u0633\u064A\u0629\u060C \u0633\u064A\u064F\u062D\u0627\u0637 \u0645\u0636\u0631\u0628\u0643 \u0628\u0625\u0637\u0627\u0631 \u0623\u062D\u0645\u0631 \u0644\u062A\u0630\u0643\u064A\u0631\u0643 \u0628\u0623\u0646\u0647 \u0633\u064A\u062F\u0645\u0631 \u0645\u062C\u0645\u0648\u0639\u062A\u0643 \u0625\u0630\u0627 \u0644\u0645\u0633\u062A\u0647 \u0628\u0627\u0644\u0643\u0631\u0629.","upgrades.sturdy_bricks.name":"\u0637\u0648\u0628 \u0642\u0648\u064A","upgrades.sturdy_bricks.tooltip":"+{{lvl}} \u0645\u0646 \u0627\u0644\u0637\u0648\u0628 \u0646\u0642\u0627\u0637 \u0627\u0644\u0635\u062D\u0629\u060C +{{percent}}% \u0645\u0646 \u0627\u0644\u0639\u0645\u0644\u0627\u062A \u0627\u0644\u0645\u0639\u062F\u0646\u064A\u0629 \u0627\u0644\u062A\u064A \u062A\u0638\u0647\u0631 \u0639\u0646\u062F \u0627\u0644\u0643\u0633\u0631","upgrades.sturdy_bricks.verbose_description":"\u0643\u0644 \u0645\u0633\u062A\u0648\u0649 \u0645\u0646 \u0647\u0630\u0647 \u0627\u0644\u0645\u064A\u0632\u0629 \u064A\u064F\u0636\u064A\u0641 \u0646\u0642\u0637\u0629 \u0635\u062D\u0629 \u0648\u0627\u062D\u062F\u0629 \u0644\u062C\u0645\u064A\u0639 \u0627\u0644\u0637\u0648\u0628. \u064A\u0645\u0643\u0646\u0643 \u0631\u0624\u064A\u0629 \u0639\u062F\u062F \u0646\u0642\u0627\u0637 \u0627\u0644\u0635\u062D\u0629 \u0628\u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0645\u064A\u0632\u0629 \\"\u0627\u0644\u0627\u0633\u062A\u0628\u0635\u0627\u0631\\". \u064A\u0645\u0643\u0646\u0643 \u0632\u064A\u0627\u062F\u0629 \u0636\u0631\u0631 \u0627\u0644\u0643\u0631\u0629 \u0628\u0627\u0644\u062D\u0635\u0648\u0644 \u0639\u0644\u0649 \u0645\u064A\u0632\u0629 \\"\u0627\u0644\u062B\u0627\u0642\u0628\\". \u0643\u0644 \u0645\u0633\u062A\u0648\u0649 \u0645\u0646 \u0627\u0644\u0645\u064A\u0632\u0629 \u064A\u064F\u0636\u064A\u0641 +\u0665\u0660\u066A \u0645\u0646 \u0627\u0644\u0639\u0645\u0644\u0627\u062A \u0627\u0644\u0645\u0639\u062F\u0646\u064A\u0629.","upgrades.superhot.name":"\u062D\u0627\u0631 \u062C\u062F\u064B\u0627","upgrades.superhot.tooltip":"\u064A\u062A\u062D\u0631\u0643 \u0627\u0644\u0632\u0645\u0646 \u0639\u0646\u062F\u0645\u0627 \u064A\u062A\u062D\u0631\u0643 \u0627\u0644\u0645\u062C\u062F\u0627\u0641.","upgrades.superhot.verbose_description":"\u0633\u0648\u0628\u0631 \u0647\u0648\u062A \u0633\u0648\u0628\u0631 \u0647\u0648\u062A \u0633\u0648\u0628\u0631 \u0647\u0648\u062A \u0633\u0648\u0628\u0631 \u0647\u0648\u062A \u0633\u0648\u0628\u0631 \u0647\u0648\u062A","upgrades.telekinesis.help_plural":"\u062A\u0623\u062B\u064A\u0631 \u0623\u0642\u0648\u0649 \u0639\u0644\u0649 \u0627\u0644\u0643\u0631\u0629","upgrades.telekinesis.name":"\u0627\u0644\u062A\u062D\u0631\u064A\u0643 \u0627\u0644\u0630\u0647\u0646\u064A","upgrades.telekinesis.tooltip":"\u064A\u062A\u062D\u0643\u0645 \u0627\u0644\u0645\u0636\u0631\u0628 \u0641\u064A \u0645\u0633\u0627\u0631 \u0627\u0644\u0643\u0631\u0629","upgrades.telekinesis.verbose_description":"\u062A\u062A\u062D\u0643\u0645 \u0628\u0627\u0644\u0643\u0631\u0629 \u0623\u062B\u0646\u0627\u0621 \u0635\u0639\u0648\u062F\u0647\u0627.","upgrades.top_is_lava.name":"\u0627\u0644\u0633\u0645\u0627\u0621 \u0647\u064A \u0627\u0644\u062D\u062F","upgrades.top_is_lava.tooltip":"+{{lvl}} \u0645\u062C\u0645\u0648\u0639\u0629 \u0644\u0643\u0644 \u0644\u0628\u0646\u0629\u060C \u064A\u062A\u0645 \u0625\u0639\u0627\u062F\u0629 \u0636\u0628\u0637\u0647\u0627 \u0639\u0646\u062F \u0627\u0644\u0648\u0635\u0648\u0644 \u0625\u0644\u0649 \u0627\u0644\u062C\u0632\u0621 \u0627\u0644\u0639\u0644\u0648\u064A","upgrades.top_is_lava.verbose_description":"\u0643\u0644\u0645\u0627 \u0643\u0633\u0631\u062A\u064E \u0644\u0628\u0646\u0629\u060C \u0633\u062A\u0632\u062F\u0627\u062F \u0645\u062C\u0645\u0648\u0639\u062A\u0643 \u0628\u0645\u0642\u062F\u0627\u0631 \u0648\u0627\u062D\u062F. \u0645\u0639 \u0630\u0644\u0643\u060C \u0633\u062A\u064F\u0639\u0627\u062F \u0636\u0628\u0637 \u0645\u062C\u0645\u0648\u0639\u062A\u0643 \u0628\u0645\u062C\u0631\u062F \u0648\u0635\u0648\u0644 \u0627\u0644\u0643\u0631\u0629 \u0625\u0644\u0649 \u0623\u0639\u0644\u0649 \u0627\u0644\u0634\u0627\u0634\u0629.\\n\\n\u0639\u0646\u062F\u0645\u0627 \u062A\u062A\u062C\u0627\u0648\u0632 \u0645\u062C\u0645\u0648\u0639\u062A\u0643 \u0627\u0644\u062D\u062F \u0627\u0644\u0623\u062F\u0646\u0649\u060C \u0633\u064A\u0638\u0647\u0631 \u0634\u0631\u064A\u0637 \u0623\u062D\u0645\u0631 \u0641\u064A \u0627\u0644\u0623\u0639\u0644\u0649 \u0644\u062A\u0630\u0643\u064A\u0631\u0643 \u0628\u062A\u062C\u0646\u0628 \u0636\u0631\u0628\u0647\u0627.","upgrades.trampoline.name":"\u0627\u0644\u062A\u0631\u0627\u0645\u0628\u0648\u0644\u064A\u0646","upgrades.trampoline.tooltip":"+{{lvl}} \u0645\u062C\u0645\u0648\u0639\u0629 \u0644\u0643\u0644 \u0627\u0631\u062A\u062F\u0627\u062F \u0644\u0644\u0645\u0636\u0631\u0628\u060C -{{lvl}} \u0645\u062C\u0645\u0648\u0639\u0629 \u0644\u0643\u0644 \u0627\u0631\u062A\u062F\u0627\u062F \u0639\u0644\u0649 \u0623\u064A \u062D\u062F\u0648\u062F","upgrades.trampoline.verbose_description":"\u0623\u062D\u062F \u062A\u0631\u0642\u064A\u0627\u062A \u0627\u0644\u0645\u062C\u0645\u0648\u0639\u0627\u062A \u0627\u0644\u0646\u0627\u062F\u0631\u0629 \u0627\u0644\u062A\u064A \u0644\u0627 \u062A\u0636\u064A\u0641 \u0634\u0631\u0637 \u0625\u0639\u0627\u062F\u0629 \u0627\u0644\u0636\u0628\u0637","upgrades.transparency.name":"\u0627\u0644\u0634\u0641\u0627\u0641\u064A\u0629","upgrades.transparency.tooltip":"\u0643\u0644\u0645\u0627 \u0643\u0627\u0646\u062A \u0627\u0644\u0643\u0631\u0629 \u0623\u0639\u0644\u0649 \u0639\u0644\u0649 \u0627\u0644\u0634\u0627\u0634\u0629\u060C \u0632\u0627\u062F\u062A \u0634\u0641\u0627\u0641\u064A\u062A\u0647\u0627. \u0648\u0643\u0644\u0645\u0627 \u0632\u0627\u062F\u062A \u0634\u0641\u0627\u0641\u064A\u062A\u0647\u0627\u060C \u0632\u0627\u062F\u062A \u0627\u0644\u0639\u0645\u0644\u0627\u062A \u0627\u0644\u062A\u064A \u062A\u0646\u062A\u062C\u0647\u0627.","upgrades.transparency.verbose_description":"\u0627\u0644\u0645\u0633\u062A\u0648\u064A\u0627\u062A \u0627\u0644\u0623\u0639\u0644\u0649 \u062A\u062C\u0639\u0644 \u0627\u0644\u0643\u0631\u0629 \u0634\u0641\u0627\u0641\u0629 \u0628\u0634\u0643\u0644 \u0623\u0633\u0631\u0639 \u0648\u062A\u0632\u064A\u062F \u0645\u0646 \u0645\u0643\u0627\u0641\u0623\u0629 \u0627\u0644\u0646\u0642\u0627\u0637.","upgrades.trickledown.name":"\u0627\u0642\u062A\u0635\u0627\u062F \u0627\u0644\u062A\u0633\u0631\u0628","upgrades.trickledown.tooltip":"\u062A\u0638\u0647\u0631 \u0627\u0644\u0639\u0645\u0644\u0627\u062A \u0627\u0644\u0645\u0639\u062F\u0646\u064A\u0629 \u0641\u064A \u0627\u0644\u062C\u0632\u0621 \u0627\u0644\u0639\u0644\u0648\u064A \u0645\u0646 \u0627\u0644\u0634\u0627\u0634\u0629.","upgrades.trickledown.verbose_description":"\u0642\u062F \u064A\u0633\u0627\u0639\u062F\u0643 \u0647\u0630\u0627 \u0639\u0644\u0649 \u0648\u0636\u0639 \u0628\u0639\u0636 \u0627\u0644\u0639\u0645\u0644\u0627\u062A \u0627\u0644\u0645\u0639\u062F\u0646\u064A\u0629 \u062C\u0627\u0646\u0628\u064B\u0627. ","upgrades.unbounded.name":"\u063A\u064A\u0631 \u0645\u062D\u062F\u0648\u062F","upgrades.unbounded.tooltip":"\u064A\u0636\u064A\u0641 \u0645\u0633\u0627\u062D\u0629 \u0625\u0644\u0649 \u064A\u0633\u0627\u0631 \u0648\u064A\u0645\u064A\u0646 \u0627\u0644\u0645\u0633\u062A\u0648\u0649\u060C \u0648\u0644\u0643\u0646 \u0645\u062C\u062F\u0627\u0641\u0643 \u0644\u0627 \u064A\u0645\u0643\u0646\u0647 \u0627\u0644\u0630\u0647\u0627\u0628 \u0625\u0644\u0649 \u0647\u0630\u0627 \u0627\u0644\u062D\u062F.","upgrades.unbounded.verbose_description":"\u0642\u062F \u064A\u0633\u0627\u0639\u062F\u0643 \u062A\u0631\u0642\u064A\u0629 \u0623\u062E\u0631\u0649 \u0639\u0644\u0649 \u062A\u0648\u0633\u064A\u0639 \u0645\u062F\u0649 \u0645\u062C\u062F\u0627\u0641\u0643.","upgrades.viscosity.name":"\u0627\u0644\u0644\u0632\u0648\u062C\u0629","upgrades.viscosity.tooltip":"\u0627\u0646\u062E\u0641\u0627\u0636 \u0623\u0628\u0637\u0623 \u0641\u064A \u0642\u064A\u0645\u0629 \u0627\u0644\u0639\u0645\u0644\u0629","upgrades.viscosity.verbose_description":"\u0639\u0627\u062F\u0629\u064B \u0645\u0627 \u062A\u062A\u0633\u0627\u0631\u0639 \u0627\u0644\u0639\u0645\u0644\u0627\u062A \u0627\u0644\u0645\u0639\u062F\u0646\u064A\u0629 \u0628\u0641\u0639\u0644 \u0627\u0644\u062C\u0627\u0630\u0628\u064A\u0629 \u0648\u0627\u0644\u0627\u0646\u0641\u062C\u0627\u0631\u0627\u062A \u0625\u0644\u0649 \u0633\u0631\u0639\u0627\u062A \u0639\u0627\u0644\u064A\u0629 \u062C\u062F\u064B\u0627.\\n\\n\u0647\u0630\u0647 \u0627\u0644\u0645\u064A\u0632\u0629 \u062A\u064F\u0628\u0637\u0626 \u0633\u0631\u0639\u062A\u0647\u0627 \u0628\u0627\u0633\u062A\u0645\u0631\u0627\u0631\u060C \u0643\u0645\u0627 \u0644\u0648 \u0643\u0627\u0646\u062A \u0641\u064A \u0633\u0627\u0626\u0644 \u0644\u0632\u062C.\\n\\n\u0647\u0630\u0627 \u064A\u064F\u0633\u0647\u0651\u0644 \u0627\u0644\u062A\u0642\u0627\u0637\u0647\u0627\u060C \u0648\u064A\u062A\u0643\u0627\u0645\u0644 \u0628\u0634\u0643\u0644 \u0631\u0627\u0626\u0639 \u0645\u0639 \u0627\u0644\u0645\u064A\u0632\u0627\u062A \u0627\u0644\u062A\u064A \u062A\u0624\u062B\u0631 \u0639\u0644\u0649 \u062D\u0631\u0643\u0629 \u0627\u0644\u0639\u0645\u0644\u0629.","upgrades.wind.help_plural":"\u0642\u0648\u0629 \u0627\u0644\u0631\u064A\u0627\u062D \u0623\u0642\u0648\u0649","upgrades.wind.name":"\u0631\u064A\u0627\u062D","upgrades.wind.tooltip":"\u0648\u0636\u0639 \u0627\u0644\u0645\u062C\u062F\u0627\u0641 \u064A\u062E\u0644\u0642 \u0627\u0644\u0631\u064A\u0627\u062D","upgrades.wind.verbose_description":"\u062A\u0639\u062A\u0645\u062F \u0627\u0644\u0631\u064A\u0627\u062D \u0639\u0644\u0649 \u0648\u0636\u0639\u064A\u0629 \u0627\u0644\u0645\u0636\u0631\u0628: \u064A\u0633\u0627\u0631\u064B\u0627 \u064A\u0647\u0628 \u064A\u0633\u0627\u0631\u064B\u0627\u060C \u0648\u064A\u0645\u064A\u0646\u064B\u0627 \u064A\u0647\u0628 \u064A\u0645\u064A\u0646\u064B\u0627. \u062A\u0624\u062B\u0631 \u0639\u0644\u0649 \u0627\u0644\u0643\u0631\u0627\u062A \u0648\u0627\u0644\u0639\u0645\u0644\u0627\u062A \u0627\u0644\u0645\u0639\u062F\u0646\u064A\u0629.","upgrades.yoyo.name":"\u064A\u0648 \u064A\u0648","upgrades.yoyo.tooltip":"\u0627\u0644\u0643\u0631\u0629 \u062A\u0633\u0642\u0637 \u0646\u062D\u0648 \u0627\u0644\u0645\u0636\u0631\u0628","upgrades.yoyo.verbose_description":"\u0625\u0646\u0647 \u0639\u0643\u0633 \u0627\u0644\u062A\u062D\u0631\u064A\u0643 \u0627\u0644\u0630\u0647\u0646\u064A\u060C \u0623\u064A \u0627\u0644\u062A\u062D\u0643\u0645 \u0628\u0627\u0644\u0643\u0631\u0629 \u0623\u062B\u0646\u0627\u0621 \u0633\u0642\u0648\u0637\u0647\u0627 \u0645\u0631\u0629 \u0623\u062E\u0631\u0649 \u0625\u0644\u0649 \u0627\u0644\u0623\u0633\u0641\u0644.","upgrades.zen.name":"\u0632\u064A\u0646","upgrades.zen.tooltip":"+{{lvl}} \u0645\u062C\u0645\u0648\u0639\u0629 \u0644\u0643\u0644 \u0644\u0628\u0646\u0629\u060C \u064A\u062A\u0645 \u0625\u0639\u0627\u062F\u0629 \u0636\u0628\u0637\u0647\u0627 \u0639\u0646\u062F \u062D\u062F\u0648\u062B \u0627\u0646\u0641\u062C\u0627\u0631","upgrades.zen.verbose_description":"\u0641\u064A \u0646\u0647\u0627\u064A\u0629 \u0627\u0644\u0645\u0637\u0627\u0641\u060C \u0647\u0630\u0647 \u0644\u0639\u0628\u0629 \u063A\u064A\u0631 \u0639\u0646\u064A\u0641\u0629."}');
},{}],"eedRO":[function(require,module,exports,__globalThis) {
module.exports = JSON.parse('{"confirmRestart.no":"\u041E\u0442\u043C\u0435\u043D\u0430","confirmRestart.text":"\u0412\u044B \u0441\u043E\u0431\u0438\u0440\u0430\u0435\u0442\u0435\u0441\u044C \u043D\u0430\u0447\u0430\u0442\u044C \u043D\u043E\u0432\u0443\u044E \u0438\u0433\u0440\u0443. \u0412\u044B \u0443\u0432\u0435\u0440\u0435\u043D\u044B, \u0447\u0442\u043E \u0445\u043E\u0442\u0438\u0442\u0435 \u043F\u0440\u043E\u0434\u043E\u043B\u0436\u0438\u0442\u044C?","confirmRestart.title":"\u041D\u0430\u0447\u0430\u0442\u044C \u043D\u043E\u0432\u0443\u044E \u0438\u0433\u0440\u0443?","confirmRestart.yes":"\u041F\u0435\u0440\u0435\u0437\u0430\u043F\u0443\u0441\u0442\u0438\u0442\u0435 \u0438\u0433\u0440\u0443","editor.editing.bigger":"\u0423\u0432\u0435\u043B\u0438\u0447\u0438\u0442\u044C \u0440\u0430\u0437\u043C\u0435\u0440 \u0443\u0440\u043E\u0432\u043D\u044F","editor.editing.color":"\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u0446\u0432\u0435\u0442 \u0438\u0437 \u0441\u043F\u0438\u0441\u043A\u0430 \u0446\u0432\u0435\u0442\u043E\u0432 (\u043C\u0430\u043A\u0441\u0438\u043C\u0443\u043C 5 \u043D\u0430 \u0443\u0440\u043E\u0432\u0435\u043D\u044C)","editor.editing.copy":"\u0421\u043A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u043A\u043E\u0434 \u0443\u0440\u043E\u0432\u043D\u044F","editor.editing.copy_help":"\u0412\u0441\u0442\u0430\u0432\u044C\u0442\u0435 \u0435\u0433\u043E \u0432 \u043A\u0430\u043D\u0430\u043B #levels \u0432 \u043D\u0430\u0448\u0435\u043C Discord","editor.editing.credit":"\u041A\u0440\u0435\u0434\u0438\u0442\u044B \u0438 \u0438\u0441\u0442\u043E\u0447\u043D\u0438\u043A","editor.editing.credit_prompt":"\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0438\u0441\u0445\u043E\u0434\u043D\u044B\u0439 URL-\u0430\u0434\u0440\u0435\u0441 \u0438\u043B\u0438 \u043F\u043E\u044F\u0441\u043D\u0435\u043D\u0438\u0435 \u0432\u0430\u0448\u0435\u0433\u043E \u0443\u0440\u043E\u0432\u043D\u044F.","editor.editing.delete":"\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0443\u0440\u043E\u0432\u0435\u043D\u044C","editor.editing.down":"\u0421\u0434\u0432\u0438\u043D\u044C\u0442\u0435 \u0432\u0441\u0435 \u043A\u0438\u0440\u043F\u0438\u0447\u0438 \u0432\u043D\u0438\u0437.","editor.editing.help":"\u0417\u0430\u0442\u0435\u043C \u0449\u0435\u043B\u043A\u043D\u0438\u0442\u0435 \u043F\u043E \u043F\u043B\u0438\u0442\u043A\u0435, \u0447\u0442\u043E\u0431\u044B \u0440\u0430\u0441\u043A\u0440\u0430\u0441\u0438\u0442\u044C \u0435\u0435.","editor.editing.left":"\u041F\u0435\u0440\u0435\u043C\u0435\u0441\u0442\u0438\u0442\u0435 \u0432\u0441\u0435 \u043A\u0438\u0440\u043F\u0438\u0447\u0438 \u0432\u043B\u0435\u0432\u043E.","editor.editing.play":"\u041F\u0440\u043E\u0439\u0442\u0438 \u044D\u0442\u043E\u0442 \u0443\u0440\u043E\u0432\u0435\u043D\u044C","editor.editing.rename":"\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0443\u0440\u043E\u0432\u043D\u044F","editor.editing.rename_prompt":"\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043D\u043E\u0432\u043E\u0435 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0443\u0440\u043E\u0432\u043D\u044F.","editor.editing.right":"\u041F\u0435\u0440\u0435\u043C\u0435\u0441\u0442\u0438\u0442\u0435 \u0432\u0441\u0435 \u043A\u0438\u0440\u043F\u0438\u0447\u0438 \u0432\u043F\u0440\u0430\u0432\u043E.","editor.editing.smaller":"\u0423\u043C\u0435\u043D\u044C\u0448\u0438\u0442\u044C \u0440\u0430\u0437\u043C\u0435\u0440 \u0443\u0440\u043E\u0432\u043D\u044F","editor.editing.title":"\u0423\u0440\u043E\u0432\u0435\u043D\u044C \u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F: {{name}}","editor.editing.up":"\u041F\u043E\u0434\u043D\u0438\u043C\u0438\u0442\u0435 \u0432\u0441\u0435 \u043A\u0438\u0440\u043F\u0438\u0447\u0438.","editor.help":"\u0421\u043E\u0437\u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043E\u0431\u0441\u0442\u0432\u0435\u043D\u043D\u044B\u0435 \u0443\u0440\u043E\u0432\u043D\u0438 \u0438 \u0434\u0435\u043B\u0438\u0442\u0435\u0441\u044C \u0438\u043C\u0438 \u0434\u043B\u044F \u0432\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u044F \u0432 \u0438\u0433\u0440\u0443.","editor.import":"\u0418\u043C\u043F\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0443\u0440\u043E\u0432\u0435\u043D\u044C","editor.import_instruction":"\u0412\u0441\u0442\u0430\u0432\u044C\u0442\u0435 \u043A\u043E\u0434 \u0443\u0440\u043E\u0432\u043D\u044F, \u0447\u0442\u043E\u0431\u044B \u0438\u043C\u043F\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0435\u0433\u043E \u0432 \u0441\u043F\u0438\u0441\u043E\u043A \u0443\u0440\u043E\u0432\u043D\u0435\u0439.","editor.locked":"\u041D\u0430\u0431\u0435\u0440\u0438\u0442\u0435 \u0432 \u043E\u0431\u0449\u0435\u0439 \u0441\u043B\u043E\u0436\u043D\u043E\u0441\u0442\u0438 {{min}} \u043E\u0447\u043A\u043E\u0432, \u0447\u0442\u043E\u0431\u044B \u0440\u0430\u0437\u0431\u043B\u043E\u043A\u0438\u0440\u043E\u0432\u0430\u0442\u044C","editor.new_level":"\u041D\u043E\u0432\u044B\u0439 \u0443\u0440\u043E\u0432\u0435\u043D\u044C","editor.title":"\u0420\u0435\u0434\u0430\u043A\u0442\u043E\u0440 \u0443\u0440\u043E\u0432\u043D\u0435\u0439","gameOver.creative":"\u042D\u0442\u043E\u0442 \u0437\u0430\u0431\u0435\u0433 \u043D\u0435 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043F\u0438\u0441\u044B\u0432\u0430\u0442\u044C\u0441\u044F.","gameOver.cumulative_total":"\u0412\u0430\u0448 \u043E\u0431\u0449\u0438\u0439 \u0441\u0443\u043C\u043C\u0430\u0440\u043D\u044B\u0439 \u0431\u0430\u043B\u043B \u0443\u0432\u0435\u043B\u0438\u0447\u0438\u043B\u0441\u044F \u0441 {{startTs}} \u0434\u043E {{endTs}}.","gameOver.lost.summary":"\u0412\u044B \u0443\u0440\u043E\u043D\u0438\u043B\u0438 \u043C\u044F\u0447, \u043F\u043E\u0439\u043C\u0430\u0432 {{score}} \u043C\u043E\u043D\u0435\u0442.","gameOver.lost.title":"\u0418\u0433\u0440\u0430 \u043E\u043A\u043E\u043D\u0447\u0435\u043D\u0430","gameOver.stats.balls_lost":"\u041C\u044F\u0447\u0438 \u043F\u043E\u0442\u0435\u0440\u044F\u043D\u044B","gameOver.stats.bricks_broken":"\u041A\u0438\u0440\u043F\u0438\u0447\u0438 \u0440\u0430\u0437\u0431\u0438\u0442\u044B","gameOver.stats.bricks_per_minute":"\u0420\u0430\u0437\u0431\u0438\u0442\u044B\u0445 \u043A\u0438\u0440\u043F\u0438\u0447\u0435\u0439 \u0432 \u043C\u0438\u043D\u0443\u0442\u0443","gameOver.stats.catch_rate":"\u0423\u0440\u043E\u0432\u0435\u043D\u044C \u0443\u043B\u043E\u0432\u0430","gameOver.stats.combo_avg":"\u0421\u0440\u0435\u0434\u043D\u0435\u0435 \u043A\u043E\u043C\u0431\u043E","gameOver.stats.combo_max":"\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u0430\u044F \u043A\u043E\u043C\u0431\u0438\u043D\u0430\u0446\u0438\u044F","gameOver.stats.duration_per_level":"\u041F\u0440\u043E\u0434\u043E\u043B\u0436\u0438\u0442\u0435\u043B\u044C\u043D\u043E\u0441\u0442\u044C \u0437\u0430 \u0443\u0440\u043E\u0432\u0435\u043D\u044C","gameOver.stats.hit_rate":"\u0421\u043A\u043E\u0440\u043E\u0441\u0442\u044C \u043F\u043E\u043F\u0430\u0434\u0430\u043D\u0438\u044F","gameOver.stats.intro":"","gameOver.stats.level_reached":"\u0414\u043E\u0441\u0442\u0438\u0433\u043D\u0443\u0442\u044B\u0439 \u0443\u0440\u043E\u0432\u0435\u043D\u044C","gameOver.stats.total_score":"\u041E\u0431\u0449\u0438\u0439 \u0431\u0430\u043B\u043B","gameOver.stats.upgrades_applied":"\u041F\u0440\u0438\u043C\u0435\u043D\u0435\u043D\u043D\u044B\u0435 \u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u044F","gameOver.stats_intro":"\u041D\u0438\u0436\u0435 \u043F\u0440\u0438\u0432\u0435\u0434\u0435\u043D\u0430 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043A\u0430 \u0432\u0430\u0448\u0435\u0439 \u0438\u0433\u0440\u044B \u043F\u043E \u0441\u0440\u0430\u0432\u043D\u0435\u043D\u0438\u044E \u0441 \u0432\u0430\u0448\u0438\u043C\u0438 {{count}} \u043B\u0443\u0447\u0448\u0438\u043C\u0438 \u0438\u0433\u0440\u0430\u043C\u0438.","gameOver.unlocked_perk":"\u041E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u0435 \u0440\u0430\u0437\u0431\u043B\u043E\u043A\u0438\u0440\u043E\u0432\u0430\u043D\u043E","gameOver.unlocked_perk_plural":"\u0412\u044B \u0442\u043E\u043B\u044C\u043A\u043E \u0447\u0442\u043E \u0440\u0430\u0437\u0431\u043B\u043E\u043A\u0438\u0440\u043E\u0432\u0430\u043B\u0438 {{count}} \u043F\u0440\u0438\u0432\u0438\u043B\u0435\u0433\u0438\u0439","gameOver.win.summary":"\u0418\u0433\u0440\u0430 \u043E\u043A\u043E\u043D\u0447\u0435\u043D\u0430. \u0412\u044B \u0441\u043F\u0440\u044F\u0442\u0430\u043B\u0438 {{score}} \u043C\u043E\u043D\u0435\u0442.","gameOver.win.title":"\u0412\u044B \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043B\u0438 \u044D\u0442\u0443 \u0438\u0433\u0440\u0443","help.content":"## \u0426\u0435\u043B\u044C\\n\\n\u041F\u043E\u0439\u043C\u0430\u0439\u0442\u0435 \u043A\u0430\u043A \u043C\u043E\u0436\u043D\u043E \u0431\u043E\u043B\u044C\u0448\u0435 \u043C\u043E\u043D\u0435\u0442 \u043D\u0430 \u043F\u0440\u043E\u0442\u044F\u0436\u0435\u043D\u0438\u0438 7 \u0443\u0440\u043E\u0432\u043D\u0435\u0439.\\n\u041C\u043E\u043D\u0435\u0442\u044B \u043F\u043E\u044F\u0432\u043B\u044F\u044E\u0442\u0441\u044F, \u043A\u043E\u0433\u0434\u0430 \u0432\u044B \u0440\u0430\u0437\u0431\u0438\u0432\u0430\u0435\u0442\u0435 \u043A\u0438\u0440\u043F\u0438\u0447\u0438.\\n\u041B\u043E\u0432\u0438\u0442\u0435 \u0438\u0445 \u0432\u0435\u0441\u043B\u043E\u043C, \u0447\u0442\u043E\u0431\u044B \u0443\u0432\u0435\u043B\u0438\u0447\u0438\u0442\u044C \u0441\u0432\u043E\u0439 \u0441\u0447\u0435\u0442.\\n\u0412\u0430\u0448 \u0441\u0447\u0435\u0442 \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044F \u0432 \u043F\u0440\u0430\u0432\u043E\u043C \u0432\u0435\u0440\u0445\u043D\u0435\u043C \u0443\u0433\u043B\u0443 \u044D\u043A\u0440\u0430\u043D\u0430.\\n\u041D\u0435 \u0443\u0440\u043E\u043D\u0438\u0442\u0435 \u043C\u044F\u0447, \u0438\u043D\u0430\u0447\u0435 \u0438\u0433\u0440\u0430 \u0437\u0430\u043A\u043E\u043D\u0447\u0438\u0442\u0441\u044F.\\n\\n\u0423\u043D\u0438\u0447\u0442\u043E\u0436\u0438\u0432 \u0432\u0441\u0435 \u043A\u0438\u0440\u043F\u0438\u0447\u0438, \u0432\u044B \u0441\u043C\u043E\u0436\u0435\u0442\u0435 \u0432\u044B\u0431\u0440\u0430\u0442\u044C \u0443\u043B\u0443\u0447\u0448\u0435\u043D\u0438\u0435.\\n\\n## \u0410\u043F\u0433\u0440\u0435\u0439\u0434\u044B\\n\\n\u0412\u044B\u0431\u0440\u0430\u043D\u043D\u044B\u0435 \u0432\u0430\u043C\u0438 \u0443\u043B\u0443\u0447\u0448\u0435\u043D\u0438\u044F \u0431\u0443\u0434\u0443\u0442 \u0434\u0435\u0439\u0441\u0442\u0432\u043E\u0432\u0430\u0442\u044C \u0434\u043E \u043A\u043E\u043D\u0446\u0430 \u0438\u0433\u0440\u044B.\\n\u041D\u0435\u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u0438\u0437 \u043D\u0438\u0445 \u043C\u043E\u0436\u043D\u043E \u0432\u044B\u0431\u0438\u0440\u0430\u0442\u044C \u043D\u0435\u0441\u043A\u043E\u043B\u044C\u043A\u043E \u0440\u0430\u0437 \u0434\u043B\u044F \u0443\u0441\u0438\u043B\u0435\u043D\u0438\u044F \u044D\u0444\u0444\u0435\u043A\u0442\u0430.\\n\u041D\u0435\u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u043F\u043E\u043C\u043E\u0433\u0430\u044E\u0442 \u0432 \u043F\u0440\u0438\u0446\u0435\u043B\u0438\u0432\u0430\u043D\u0438\u0438 \u0438\u043B\u0438 \u043E\u0431\u043B\u0435\u0433\u0447\u0430\u044E\u0442 \u0438\u0433\u0440\u0443 \u0434\u0440\u0443\u0433\u0438\u043C\u0438 \u0441\u043F\u043E\u0441\u043E\u0431\u0430\u043C\u0438.\\n\u041D\u0435\u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u043F\u043E\u043B\u0435\u0437\u043D\u044B \u0442\u043E\u043B\u044C\u043A\u043E \u0432 \u043A\u043E\u043C\u0431\u0438\u043D\u0430\u0446\u0438\u0438.\\n\\n\u0412 \u043D\u0430\u0447\u0430\u043B\u0435 \u043A\u0430\u0436\u0434\u043E\u0439 \u0438\u0433\u0440\u044B \u0432\u044B \u0432\u0441\u0435\u0433\u0434\u0430 \u043F\u043E\u043B\u0443\u0447\u0430\u0435\u0442\u0435 \u043E\u0434\u0438\u043D \u0430\u043F\u0433\u0440\u0435\u0439\u0434.\\n\u0415\u0433\u043E \u0438\u043A\u043E\u043D\u043A\u0430 \u0431\u0443\u0434\u0435\u0442 \u0441\u043B\u0443\u0436\u0438\u0442\u044C \u043A\u0438\u0440\u043F\u0438\u0447\u043E\u043C \u043F\u0435\u0440\u0432\u043E\u0433\u043E \u0443\u0440\u043E\u0432\u043D\u044F.\\n\u0412\u044B\u0431\u0440\u0430\u0442\u044C \u0441\u0442\u0430\u0440\u0442\u043E\u0432\u044B\u0435 \u0430\u043F\u0433\u0440\u0435\u0439\u0434\u044B \u043C\u043E\u0436\u043D\u043E \u0432 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0430\u0445.\\n\\n\u041C\u043D\u043E\u0433\u0438\u0435 \u0430\u043F\u0433\u0440\u0435\u0439\u0434\u044B \u0432\u043B\u0438\u044F\u044E\u0442 \u043D\u0430 \u0432\u0430\u0448\u0438 \u043A\u043E\u043C\u0431\u043E.\\n\\n## \u041A\u043E\u043C\u0431\u043E\\n\\n\u0412\u0430\u0448\u0435 \\"\u043A\u043E\u043C\u0431\u043E\\" - \u044D\u0442\u043E \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u043C\u043E\u043D\u0435\u0442, \u043F\u043E\u044F\u0432\u043B\u044F\u044E\u0449\u0438\u0445\u0441\u044F \u043F\u0440\u0438 \u0440\u0430\u0437\u0440\u0443\u0448\u0435\u043D\u0438\u0438 \u043A\u0438\u0440\u043F\u0438\u0447\u0430.\\n\u041E\u043D\u043E \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044F \u043D\u0430 \u0432\u0430\u0448\u0435\u043C \u0432\u0435\u0441\u043B\u0435, \u043D\u0430\u043F\u0440\u0438\u043C\u0435\u0440, x4 \u043E\u0437\u043D\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043E \u043A\u0430\u0436\u0434\u044B\u0439 \u043A\u0438\u0440\u043F\u0438\u0447 \u043F\u043E\u0440\u043E\u0436\u0434\u0430\u0435\u0442 4 \u043C\u043E\u043D\u0435\u0442\u044B.\\n\u0411\u043E\u043B\u044C\u0448\u0438\u043D\u0441\u0442\u0432\u043E \u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u0439, \u0443\u0432\u0435\u043B\u0438\u0447\u0438\u0432\u0430\u044E\u0449\u0438\u0445 \u043A\u043E\u043C\u0431\u043E, \u0442\u0430\u043A\u0436\u0435 \u0434\u043E\u0431\u0430\u0432\u043B\u044F\u044E\u0442 \u0443\u0441\u043B\u043E\u0432\u0438\u0435 \u0434\u043B\u044F \u0435\u0433\u043E \u0441\u0431\u0440\u043E\u0441\u0430.\\n\u043A\u043E\u043C\u0431\u043E \u0442\u0430\u043A\u0436\u0435 \u0441\u0431\u0440\u0430\u0441\u044B\u0432\u0430\u0435\u0442\u0441\u044F, \u0435\u0441\u043B\u0438 \u043C\u044F\u0447 \u0432\u043E\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044F \u043A \u0440\u0430\u043A\u0435\u0442\u043A\u0435, \u043D\u0435 \u0437\u0430\u0434\u0435\u0432 \u043A\u0438\u0440\u043F\u0438\u0447.\\n\\n\u0412 \u044D\u0442\u043E\u043C \u0441\u043B\u0443\u0447\u0430\u0435 \u043F\u043E\u044F\u0432\u0438\u0442\u0441\u044F \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0435 \\"\u043F\u0440\u043E\u043C\u0430\u0445\\".\\n\\n\u0421\u0442\u0430\u0440\u0430\u0439\u0442\u0435\u0441\u044C \u043A\u0430\u0436\u0434\u044B\u0439 \u0440\u0430\u0437 \u0446\u0435\u043B\u0438\u0442\u044C\u0441\u044F \u0432 \u043A\u0438\u0440\u043F\u0438\u0447.\\n\\n## \u041F\u0440\u0438\u0446\u0435\u043B\u0438\u0432\u0430\u043D\u0438\u0435\\n\\n\u0422\u043E\u043B\u044C\u043A\u043E \u043F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u0435 \u043C\u044F\u0447\u0430 \u043D\u0430 \u043B\u043E\u043F\u0430\u0442\u043A\u0435 \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442, \u043A\u0430\u043A \u043E\u043D \u043E\u0442\u0441\u043A\u043E\u0447\u0438\u0442.\\n\u0415\u0441\u043B\u0438 \u043C\u044F\u0447 \u043F\u043E\u043F\u0430\u0434\u0435\u0442 \u0432 \u0446\u0435\u043D\u0442\u0440 \u043F\u043B\u043E\u0449\u0430\u0434\u043A\u0438, \u043E\u043D \u043E\u0442\u0441\u043A\u043E\u0447\u0438\u0442 \u0432\u0435\u0440\u0442\u0438\u043A\u0430\u043B\u044C\u043D\u043E \u0432\u0432\u0435\u0440\u0445.\\n\u0415\u0441\u043B\u0438 \u0432\u044B \u0443\u0434\u0430\u0440\u0438\u0442\u0435 \u0441 \u043E\u0434\u043D\u043E\u0439 \u0441\u0442\u043E\u0440\u043E\u043D\u044B, \u043E\u043D \u043E\u0442\u0441\u043A\u043E\u0447\u0438\u0442 \u043F\u043E\u0434 \u0431\u043E\u043B\u044C\u0448\u0438\u043C \u0443\u0433\u043B\u043E\u043C.\\n\u0421\u043A\u043E\u0440\u043E\u0441\u0442\u044C \u0432\u0435\u0441\u043B\u0430 \u0438 \u0443\u0433\u043E\u043B \u0432\u0445\u043E\u0434\u0430 \u043D\u0435 \u0432\u043B\u0438\u044F\u044E\u0442 \u043D\u0430 \u043D\u0430\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u043C\u044F\u0447\u0430 \u043F\u043E\u0441\u043B\u0435 \u043E\u0442\u0441\u043A\u043E\u043A\u0430.\\n\\n\u041C\u043E\u0436\u043D\u043E \u043E\u0442\u043A\u0440\u044B\u0442\u044C \u043C\u043D\u043E\u0436\u0435\u0441\u0442\u0432\u043E \u0443\u043B\u0443\u0447\u0448\u0435\u043D\u0438\u0439, \u043F\u043E\u043C\u043E\u0433\u0430\u044E\u0449\u0438\u0445 \u0432 \u043F\u0440\u0438\u0446\u0435\u043B\u0438\u0432\u0430\u043D\u0438\u0438.\\n\\n## \u0440\u0430\u0437\u0431\u043B\u043E\u043A\u0438\u0440\u0443\u0435\u0442\\n\\n\u041F\u0440\u0438 \u043F\u0435\u0440\u0432\u043E\u0439 \u0438\u0433\u0440\u0435 \u0432 Breakout 71 \u0431\u043E\u043B\u044C\u0448\u0438\u043D\u0441\u0442\u0432\u043E \u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u0439 \u0438 \u0443\u0440\u043E\u0432\u043D\u0435\u0439 \u0437\u0430\u0431\u043B\u043E\u043A\u0438\u0440\u043E\u0432\u0430\u043D\u044B.\\n\u041C\u043E\u0434\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u0438 \u043C\u043E\u0436\u043D\u043E \u0440\u0430\u0437\u0431\u043B\u043E\u043A\u0438\u0440\u043E\u0432\u0430\u0442\u044C, \u043F\u0440\u043E\u0441\u0442\u043E \u0438\u0433\u0440\u0430\u044F \u0438 \u0441\u043E\u0431\u0438\u0440\u0430\u044F \u043C\u043D\u043E\u0433\u043E \u043C\u043E\u043D\u0435\u0442.\\n\u041F\u0435\u0440\u0432\u044B\u0435 \u0443\u0440\u043E\u0432\u043D\u0438 \u0440\u0430\u0437\u0431\u043B\u043E\u043A\u0438\u0440\u0443\u044E\u0442\u0441\u044F \u043F\u0440\u0438 \u0434\u043E\u0441\u0442\u0438\u0436\u0435\u043D\u0438\u0438 \u0432\u044B\u0441\u043E\u043A\u043E\u0433\u043E \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u0430.\\n\u041F\u043E\u0441\u043B\u0435\u0434\u0443\u044E\u0449\u0438\u0435 \u0443\u0440\u043E\u0432\u043D\u0438 \u0434\u043E\u0431\u0430\u0432\u043B\u044F\u044E\u0442 \u0443\u0441\u043B\u043E\u0432\u0438\u0435, \u043F\u043E \u043A\u043E\u0442\u043E\u0440\u043E\u043C\u0443 \u0432\u044B \u043C\u043E\u0436\u0435\u0442\u0435 \u0432\u044B\u0431\u0440\u0430\u0442\u044C \u0442\u0435 \u0438\u043B\u0438 \u0438\u043D\u044B\u0435 \u043F\u0440\u0438\u0432\u0438\u043B\u0435\u0433\u0438\u0438.\\n\\n\u0414\u043E\u0431\u0438\u0432\u0430\u0442\u044C\u0441\u044F \u0432\u044B\u0441\u043E\u043A\u0438\u0445 \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u043E\u0432 \u0433\u043E\u0440\u0430\u0437\u0434\u043E \u043F\u0440\u043E\u0449\u0435, \u0435\u0441\u043B\u0438 \u043F\u043E\u0441\u043B\u0435 \u043A\u0430\u0436\u0434\u043E\u0433\u043E \u0443\u0440\u043E\u0432\u043D\u044F \u0432\u044B \u043F\u043E\u043B\u0443\u0447\u0430\u0435\u0442\u0435 \u043D\u0435\u0441\u043A\u043E\u043B\u044C\u043A\u043E \u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u0439.\\n\\n## \u041F\u043E\u0432\u0442\u043E\u0440\u043D\u044B\u0435 \u043F\u0440\u043E\u043A\u0430\u0447\u043A\u0438 \u0438 \u0431\u0435\u0441\u043F\u043B\u0430\u0442\u043D\u044B\u0435 \u0443\u043B\u0443\u0447\u0448\u0435\u043D\u0438\u044F\\n\\n\u0412\u044B \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u0435 \u0434\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u044B\u0439 \u0430\u043F\u0433\u0440\u0435\u0439\u0434, \u0435\u0441\u043B\u0438 \u0431\u0443\u0434\u0435\u0442\u0435 \u0438\u0433\u0440\u0430\u0442\u044C \u0445\u043E\u0440\u043E\u0448\u043E:\\n\\n- \u041F\u0440\u043E\u0439\u0434\u0438\u0442\u0435 \u0443\u0440\u043E\u0432\u0435\u043D\u044C \u0437\u0430 {{levelTimeGood}} \u0441\u0435\u043A\u0443\u043D\u0434\\n- \u0423\u0434\u0430\u0440\u044C\u0442\u0435 \u043F\u043E \u0431\u043E\u043A\u0430\u043C \u0438\u043B\u0438 \u0441\u0432\u0435\u0440\u0445\u0443 \u043C\u0435\u043D\u0435\u0435 {{wallBouncedGood}} \u0440\u0430\u0437\\n- \u041F\u043E\u0439\u043C\u0430\u0439\u0442\u0435 {{catchRateGood}}% \u043C\u043E\u043D\u0435\u0442\\n- \u041F\u0440\u043E\u043F\u0443\u0441\u0442\u0438\u0442\u0435 \u043A\u0438\u0440\u043F\u0438\u0447\u0438 \u043C\u0435\u043D\u0435\u0435 {{missesGood}} \u0440\u0430\u0437\\n\\n\u0412\u044B \u0442\u0430\u043A\u0436\u0435 \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u0435 \u043F\u043E\u0432\u0442\u043E\u0440\u043D\u0443\u044E \u043F\u0440\u043E\u043A\u0430\u0447\u043A\u0443, \u043A\u043E\u0442\u043E\u0440\u0430\u044F \u043F\u043E\u0437\u0432\u043E\u043B\u0438\u0442 \u0432\u0430\u043C \u043F\u0440\u043E\u043F\u0443\u0441\u0442\u0438\u0442\u044C \u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u044F, \u0435\u0441\u043B\u0438 \u0432\u044B \u0441\u043F\u0440\u0430\u0432\u0438\u0442\u0435\u0441\u044C \u0441 \u0437\u0430\u0434\u0430\u043D\u0438\u0435\u043C \u0435\u0449\u0435 \u043B\u0443\u0447\u0448\u0435:\\n\\n- \u041F\u0440\u043E\u0439\u0434\u0438\u0442\u0435 \u0443\u0440\u043E\u0432\u0435\u043D\u044C \u0437\u0430 {{levelTimeBest}} \u0441\u0435\u043A\u0443\u043D\u0434\u044B\\n- \u0423\u0434\u0430\u0440\u044C\u0442\u0435 \u043F\u043E \u0431\u043E\u043A\u0430\u043C \u0438\u043B\u0438 \u0441\u0432\u0435\u0440\u0445\u0443 \u043C\u0435\u043D\u0435\u0435 {{wallBouncedBest}} \u0440\u0430\u0437\\n- \u041F\u043E\u0439\u043C\u0430\u0442\u044C {{catchRateBest}}% \u043C\u043E\u043D\u0435\u0442\\n- \u041F\u0440\u043E\u043C\u0430\u0445\u043D\u0438\u0442\u0435\u0441\u044C \u043F\u043E \u043A\u0438\u0440\u043F\u0438\u0447\u0430\u043C \u043C\u0435\u043D\u0435\u0435 {{missesBest}} \u0440\u0430\u0437\\n\\n\u041E\u043F\u0446\u0438\u044F \u0432 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0430\u0445 \u043F\u043E\u0437\u0432\u043E\u043B\u044F\u0435\u0442 \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u0442\u044C \u044D\u0442\u0443 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043A\u0443","help.help":"\u0423\u0437\u043D\u0430\u0439\u0442\u0435 \u0431\u043E\u043B\u044C\u0448\u0435 \u043E\u0431 \u0438\u0433\u0440\u0435","help.levels":"\u0423\u0440\u043E\u0432\u043D\u0438","help.title":"\u041F\u043E\u043C\u043E\u0449\u044C","help.upgrades":"## \u041E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u044F","history.columns.score":"\u041E\u0446\u0435\u043D\u043A\u0430","history.columns.started":"\u0414\u0430\u0442\u0430","history.help":"\u041F\u043E\u0441\u043C\u043E\u0442\u0440\u0438\u0442\u0435 \u0441\u0432\u043E\u0438 {{count}} \u043B\u0443\u0447\u0448\u0438\u0435 \u0438\u0433\u0440\u044B.","history.locked":"\u0421\u044B\u0433\u0440\u0430\u0439\u0442\u0435 \u043D\u0435 \u043C\u0435\u043D\u0435\u0435 \u0434\u0435\u0441\u044F\u0442\u0438 \u0438\u0433\u0440, \u0447\u0442\u043E\u0431\u044B \u0440\u0430\u0437\u0431\u043B\u043E\u043A\u0438\u0440\u043E\u0432\u0430\u0442\u044C","history.title":"\u0418\u0441\u0442\u043E\u0440\u0438\u044F \u043F\u043E\u0431\u0435\u0433\u043E\u0432","lab.help":"\u041F\u043E\u043F\u0440\u043E\u0431\u0443\u0439\u0442\u0435 \u043B\u044E\u0431\u0443\u044E \u0441\u0431\u043E\u0440\u043A\u0443.","lab.instructions":"\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u0430\u043F\u0433\u0440\u0435\u0439\u0434\u044B \u043D\u0438\u0436\u0435, \u0430 \u0437\u0430\u0442\u0435\u043C \u0432\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u0443\u0440\u043E\u0432\u0435\u043D\u044C \u0434\u043B\u044F \u0438\u0433\u0440\u044B.","lab.menu_entry":"\u0422\u0432\u043E\u0440\u0447\u0435\u0441\u043A\u0438\u0439 \u0440\u0435\u0436\u0438\u043C","lab.reset":"\u0421\u0431\u0440\u043E\u0441\u0438\u0442\u044C \u0432\u0441\u0435 \u0432 0","lab.select_level":"\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u0443\u0440\u043E\u0432\u0435\u043D\u044C \u0434\u043B\u044F \u0438\u0433\u0440\u044B","lab.unlocks_at":"\u041E\u0442\u043A\u0440\u044B\u0432\u0430\u0435\u0442\u0441\u044F \u043F\u0440\u0438 \u043E\u0431\u0449\u0435\u043C \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u0435 \u043E\u0447\u043A\u043E\u0432 {{score}}","level_up.after_buttons":"\u0412\u044B \u0442\u043E\u043B\u044C\u043A\u043E \u0447\u0442\u043E \u0437\u0430\u043A\u043E\u043D\u0447\u0438\u043B\u0438 \u0443\u0440\u043E\u0432\u0435\u043D\u044C {{level}}/{{max}}.","level_up.before_buttons":"\u0412\u044B \u043F\u043E\u0439\u043C\u0430\u043B\u0438 {{score}} \u043C\u043E\u043D\u0435\u0442 {{catchGain}} \u0438\u0437 {{levelSpawnedCoins}} \u0437\u0430 {{time}} \u0441\u0435\u043A\u0443\u043D\u0434\u044B {{timeGain}}.\\n\\n\u0412\u044B \u043F\u0440\u043E\u043C\u0430\u0445\u043D\u0443\u043B\u0438\u0441\u044C {{levelMisses}} \u0440\u0430\u0437 {{missesGain}} \u0438 \u0443\u0434\u0430\u0440\u0438\u043B\u0438\u0441\u044C \u043E \u0441\u0442\u0435\u043D\u044B \u0438\u043B\u0438 \u043F\u043E\u0442\u043E\u043B\u043E\u043A {{levelWallBounces}} \u0440\u0430\u0437{{wallHitsGain}}.\\n\\n{{compliment}}","level_up.compliment_advice":"\u041F\u043E\u0441\u0442\u0430\u0440\u0430\u0439\u0442\u0435\u0441\u044C \u043F\u043E\u0439\u043C\u0430\u0442\u044C \u0432\u0441\u0435 \u043C\u043E\u043D\u0435\u0442\u044B, \u043D\u0435 \u043F\u0440\u043E\u043C\u0430\u0445\u043D\u0443\u0442\u044C\u0441\u044F \u043C\u0438\u043C\u043E \u043A\u0438\u0440\u043F\u0438\u0447\u0435\u0439, \u043D\u0435 \u0443\u0434\u0430\u0440\u0438\u0442\u044C\u0441\u044F \u043E \u0441\u0442\u0435\u043D\u044B/\u043F\u043E\u0442\u043E\u043B\u043E\u043A \u0438\u043B\u0438 \u043F\u0440\u043E\u0439\u0442\u0438 \u0443\u0440\u043E\u0432\u0435\u043D\u044C \u0437\u0430 30 \u0441\u0435\u043A\u0443\u043D\u0434, \u0447\u0442\u043E\u0431\u044B \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C \u0434\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u044B\u0435 \u0443\u043B\u0443\u0447\u0448\u0435\u043D\u0438\u044F.","level_up.compliment_good":"\u041C\u043E\u043B\u043E\u0434\u0446\u044B!","level_up.compliment_perfect":"\u0412\u043F\u0435\u0447\u0430\u0442\u043B\u044F\u0435\u0442, \u043F\u0440\u043E\u0434\u043E\u043B\u0436\u0430\u0439\u0442\u0435 \u0432 \u0442\u043E\u043C \u0436\u0435 \u0434\u0443\u0445\u0435!","level_up.pick_upgrade_title":"\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u0435","level_up.plus_one_upgrade":"(+1 \u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u0435)","level_up.plus_one_upgrade_and_reroll":"(+1 \u0443\u043B\u0443\u0447\u0448\u0435\u043D\u0438\u0435 \u0438 +1 \u043F\u043E\u0432\u0442\u043E\u0440\u043D\u044B\u0439 \u0431\u0440\u043E\u0441\u043E\u043A)","level_up.reroll":"\u041F\u043E\u0432\u0442\u043E\u0440\u043D\u044B\u0439 \u0431\u0440\u043E\u0441\u043E\u043A ({{count}})","level_up.reroll_help":"\u041F\u0440\u0435\u0434\u043B\u043E\u0436\u0438\u0442\u0435 \u043D\u043E\u0432\u044B\u0435 \u0432\u0430\u0440\u0438\u0430\u043D\u0442\u044B","level_up.upgrade_perk_to_level":" lvl {{level}}","main_menu.basic":"","main_menu.basic_help":"","main_menu.colorful_coins":"","main_menu.colorful_coins_help":"","main_menu.comboIncreaseTexts":"","main_menu.comboIncreaseTexts_help":"","main_menu.contrast":"","main_menu.contrast_help":"","main_menu.credit_levels":"","main_menu.donate":"\u0412\u044B \u0438\u0433\u0440\u0430\u043B\u0438 {{hours}} \u0447\u0430\u0441\u043E\u0432","main_menu.donate_help":"\u041A\u0430\u043A \u043D\u0430\u0441\u0447\u0435\u0442 \u043F\u043E\u0436\u0435\u0440\u0442\u0432\u043E\u0432\u0430\u043D\u0438\u044F? \u0412\u044B \u043C\u043E\u0436\u0435\u0442\u0435 \u0441\u043A\u0440\u044B\u0442\u044C \u044D\u0442\u043E \u043D\u0430\u043F\u043E\u043C\u0438\u043D\u0430\u043D\u0438\u0435 \u0432 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0430\u0445.","main_menu.donation_reminder":"","main_menu.donation_reminder_help":"","main_menu.download_save_file":"","main_menu.download_save_file_help":"","main_menu.extra_bright":"","main_menu.extra_bright_help":"","main_menu.fullscreen":"","main_menu.fullscreen_help":"","main_menu.help_content":"","main_menu.help_help":"","main_menu.help_title":"","main_menu.help_upgrades":"","main_menu.high_score":"\u0412\u044B\u0441\u043E\u043A\u0438\u0439 \u0431\u0430\u043B\u043B : {{score}}","main_menu.kid":"","main_menu.kid_help":"","main_menu.language":"","main_menu.language_help":"","main_menu.load_save_file":"","main_menu.load_save_file_help":"","main_menu.max_coins":"","main_menu.max_coins_help":"","main_menu.max_particles":"","main_menu.max_particles_help":"","main_menu.mobile":"","main_menu.mobile_help":"","main_menu.normal":"\u041D\u041E\u0412\u0410\u042F \u0418\u0413\u0420\u0410","main_menu.normal_help":"\u041F\u0440\u043E\u0439\u0434\u0438\u0442\u0435 7 \u0443\u0440\u043E\u0432\u043D\u0435\u0439 \u0441\u043E \u0441\u043B\u0443\u0447\u0430\u0439\u043D\u044B\u043C \u0441\u0442\u0430\u0440\u0442\u043E\u0432\u044B\u043C \u043F\u0440\u0435\u0438\u043C\u0443\u0449\u0435\u0441\u0442\u0432\u043E\u043C","main_menu.pointer_lock":"","main_menu.pointer_lock_help":"","main_menu.record":"","main_menu.record_download":"","main_menu.record_help":"","main_menu.red_miss":"","main_menu.red_miss_help":"","main_menu.reset":"","main_menu.reset_cancel":"","main_menu.reset_confirm":"","main_menu.reset_help":"","main_menu.reset_instruction":"","main_menu.save_file_error":"","main_menu.save_file_loaded":"","main_menu.save_file_loaded_help":"","main_menu.save_file_loaded_ok":"","main_menu.settings_help":"\u041F\u043E\u0434\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0439\u0442\u0435 \u0438\u0433\u0440\u043E\u0432\u043E\u0439 \u043F\u0440\u043E\u0446\u0435\u0441\u0441 \u043F\u043E\u0434 \u0441\u0432\u043E\u0438 \u043F\u043E\u0442\u0440\u0435\u0431\u043D\u043E\u0441\u0442\u0438 \u0438 \u0432\u043A\u0443\u0441","main_menu.settings_title":"\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438","main_menu.show_fps":"","main_menu.show_fps_help":"","main_menu.show_stats":"","main_menu.show_stats_help":"","main_menu.sounds":"","main_menu.sounds_help":"","main_menu.starting_perks":"","main_menu.starting_perks_checked":"","main_menu.starting_perks_full_random":"","main_menu.starting_perks_help":"","main_menu.starting_perks_unchecked":"","main_menu.title":"\u041F\u0440\u043E\u0440\u044B\u0432 71","main_menu.unlocks":"\u0420\u0430\u0437\u0431\u043B\u043E\u043A\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u044B\u0439 \u043A\u043E\u043D\u0442\u0435\u043D\u0442","main_menu.unlocks_help":"\u041F\u043E\u043F\u0440\u043E\u0431\u0443\u0439\u0442\u0435 \u043F\u0440\u0435\u0438\u043C\u0443\u0449\u0435\u0441\u0442\u0432\u0430 \u0438 \u0443\u0440\u043E\u0432\u043D\u0438, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u0432\u044B \u0440\u0430\u0437\u0431\u043B\u043E\u043A\u0438\u0440\u043E\u0432\u0430\u043B\u0438","play.close_modale_window_tooltip":"\u0417\u0430\u043A\u0440\u044B\u0442\u044C","play.current_lvl":"\u0423\u0440\u043E\u0432\u0435\u043D\u044C {{level}}/{{max}}","play.menu_label":"\u041C\u0435\u043D\u044E","play.menu_tooltip":"\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0433\u043B\u0430\u0432\u043D\u043E\u0435 \u043C\u0435\u043D\u044E","play.missed_ball":"\u041C\u0438\u0441\u0441","play.mobile_press_to_play":"\u041D\u0430\u0436\u043C\u0438\u0442\u0435 \u0438 \u0443\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0439\u0442\u0435 \u0437\u0434\u0435\u0441\u044C, \u0447\u0442\u043E\u0431\u044B \u0438\u0433\u0440\u0430\u0442\u044C","play.score_tooltip":"\u0423\u0437\u043D\u0430\u0439\u0442\u0435 \u043E \u0441\u0432\u043E\u0438\u0445 \u043E\u0446\u0435\u043D\u043A\u0430\u0445, \u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u044F\u0445 \u0438 \u043C\u043D\u043E\u0433\u043E\u043C \u0434\u0440\u0443\u0433\u043E\u043C","play.stats.coins_catch_rate":"\u0421\u043A\u043E\u0440\u043E\u0441\u0442\u044C \u0434\u043E\u0431\u044B\u0447\u0438 \u043C\u043E\u043D\u0435\u0442","play.stats.levelMisses":"\u041F\u0440\u043E\u043F\u0443\u0449\u0435\u043D\u043D\u044B\u0435 \u0432\u044B\u0441\u0442\u0440\u0435\u043B\u044B, \u043A\u043E\u0433\u0434\u0430 \u0432\u044B \u043D\u0435 \u043F\u043E\u043F\u0430\u043B\u0438 \u043D\u0438 \u0432 \u043A\u043E\u0433\u043E","play.stats.levelTime":"\u0412\u0440\u0435\u043C\u044F \u0443\u0440\u043E\u0432\u043D\u044F","play.stats.levelWallBounces":"\u041E\u0442\u0441\u043A\u043E\u043A\u0438 \u043E\u0442 \u0441\u0442\u0435\u043D\u044B","score_panel.close_to_unlock":"\u0420\u0430\u0437\u0431\u043B\u043E\u043A\u0438\u0440\u043E\u0432\u043A\u0430 \u0441\u043B\u0435\u0434\u0443\u044E\u0449\u0435\u0433\u043E \u0443\u0440\u043E\u0432\u043D\u044F:","score_panel.get_upgrades_to_unlock":"\u041D\u0430\u0431\u0435\u0440\u0438\u0442\u0435 {{missingUpgrades}} \u0438 \u043D\u0430\u0431\u0435\u0440\u0438\u0442\u0435 {{points}} \u0431\u043E\u043B\u044C\u0448\u0435 \u043E\u0447\u043A\u043E\u0432, \u0447\u0442\u043E\u0431\u044B \u0440\u0430\u0437\u0431\u043B\u043E\u043A\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0443\u0440\u043E\u0432\u0435\u043D\u044C \\"{{level}}\\"","score_panel.rerolls_count":"\u0412\u044B \u043D\u0430\u043A\u043E\u043F\u0438\u043B\u0438 {{rerolls}} \u043F\u043E\u0432\u0442\u043E\u0440\u043D\u044B\u0445 \u0431\u0440\u043E\u0441\u043A\u043E\u0432","score_panel.score_to_unlock":"\u041D\u0430\u0431\u0435\u0440\u0438\u0442\u0435 {{points}} \u0431\u043E\u043B\u044C\u0448\u0435 \u043E\u0447\u043A\u043E\u0432, \u0447\u0442\u043E\u0431\u044B \u0440\u0430\u0437\u0431\u043B\u043E\u043A\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0443\u0440\u043E\u0432\u0435\u043D\u044C \\"{{level}}\\"","score_panel.title":"{{score}} \u043E\u0447\u043A\u043E\u0432 \u043D\u0430 \u0443\u0440\u043E\u0432\u043D\u0435 {{level}}/{{max}} ","score_panel.upcoming_levels":"\u041F\u0440\u0435\u0434\u0441\u0442\u043E\u044F\u0449\u0438\u0435 \u0443\u0440\u043E\u0432\u043D\u0438 :","score_panel.upgrades_picked":"\u041E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u044F, \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u044B\u0435 \u0432 \u044D\u0442\u043E\u0439 \u0438\u0433\u0440\u0435, \u0437\u0430\u043F\u0443\u0441\u043A\u0430\u044E\u0442\u0441\u044F :","settings.autoplay":"","settings.autoplay_help":"","settings.basic":"\u0411\u0430\u0437\u043E\u0432\u0430\u044F \u0433\u0440\u0430\u0444\u0438\u043A\u0430","settings.basic_help":"\u0423\u043B\u0443\u0447\u0448\u0435\u043D\u043D\u0430\u044F \u043F\u0440\u043E\u0438\u0437\u0432\u043E\u0434\u0438\u0442\u0435\u043B\u044C\u043D\u043E\u0441\u0442\u044C.","settings.colorful_coins":"\u0420\u0430\u0437\u043D\u043E\u0446\u0432\u0435\u0442\u043D\u044B\u0435 \u043C\u043E\u043D\u0435\u0442\u044B","settings.colorful_coins_help":"\u041C\u043E\u043D\u0435\u0442\u044B \u0432\u0441\u0435\u0433\u0434\u0430 \u0441\u043F\u0430\u0443\u043D\u044F\u0442\u0441\u044F \u0442\u043E\u0433\u043E \u0436\u0435 \u0446\u0432\u0435\u0442\u0430, \u0447\u0442\u043E \u0438 \u043A\u0438\u0440\u043F\u0438\u0447\u0438","settings.comboIncreaseTexts":"\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C +X \u0432 \u0437\u043E\u043B\u043E\u0442\u043E\u043C \u0446\u0432\u0435\u0442\u0435","settings.comboIncreaseTexts_help":"\u041A\u043E\u0433\u0434\u0430 \u043A\u043E\u043C\u0431\u043E \u0443\u0432\u0435\u043B\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044F","settings.contrast":"\u0412\u044B\u0441\u043E\u043A\u0430\u044F \u043A\u043E\u043D\u0442\u0440\u0430\u0441\u0442\u043D\u043E\u0441\u0442\u044C","settings.contrast_help":"\u0411\u043E\u043B\u0435\u0435 \u043A\u0440\u0430\u0441\u043E\u0447\u043D\u0430\u044F \u0438 \u0442\u0435\u043C\u043D\u0430\u044F \u0432\u0438\u0437\u0443\u0430\u043B\u0438\u0437\u0430\u0446\u0438\u044F","settings.donation_reminder":"\u041D\u0430\u043F\u043E\u043C\u043D\u0438\u0442\u0435 \u043C\u043D\u0435 \u043E \u043F\u043E\u0436\u0435\u0440\u0442\u0432\u043E\u0432\u0430\u043D\u0438\u0438","settings.donation_reminder_help":"\u0421\u043C\u043E\u0442\u0440\u0438\u0442\u0435 \u0432\u0440\u0435\u043C\u044F \u0438\u0433\u0440\u044B \u0438 \u0441\u0441\u044B\u043B\u043A\u0443 \u043D\u0430 \u043F\u043E\u0436\u0435\u0440\u0442\u0432\u043E\u0432\u0430\u043D\u0438\u0435 \u0432 \u0433\u043B\u0430\u0432\u043D\u043E\u043C \u043C\u0435\u043D\u044E","settings.download_save_file":"\u0421\u043A\u0430\u0447\u0430\u0442\u044C \u0441\u0447\u0435\u0442 \u0438 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043A\u0443","settings.download_save_file_help":"\u041F\u043E\u043B\u0443\u0447\u0438\u0442\u044C \u0444\u0430\u0439\u043B \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0438\u044F","settings.extra_bright":"\u041E\u0447\u0435\u043D\u044C \u044F\u0440\u043A\u0438\u0439","settings.extra_bright_help":"\u0423\u0432\u0435\u043B\u0438\u0447\u0438\u0432\u0430\u0435\u0442 \u0440\u0430\u0437\u043C\u0435\u0440 \u043E\u0440\u0435\u043E\u043B\u0430 \u0432\u043E\u043A\u0440\u0443\u0433 \u043C\u043E\u043D\u0435\u0442 \u0438 \u043A\u0438\u0440\u043F\u0438\u0447\u0435\u0439.","settings.fullscreen":"\u041F\u041E\u041B\u041D\u042B\u0419 \u042D\u041A\u0420\u0410\u041D","settings.fullscreen_help":"\u0418\u0433\u0440\u0430 \u043F\u044B\u0442\u0430\u0435\u0442\u0441\u044F \u043F\u0435\u0440\u0435\u0439\u0442\u0438 \u0432 \u043F\u043E\u043B\u043D\u043E\u044D\u043A\u0440\u0430\u043D\u043D\u044B\u0439 \u0440\u0435\u0436\u0438\u043C \u043F\u0435\u0440\u0435\u0434 \u0437\u0430\u043F\u0443\u0441\u043A\u043E\u043C","settings.kid":"\u0414\u0435\u0442\u0441\u043A\u0438\u0439 \u0440\u0435\u0436\u0438\u043C","settings.kid_help":"\u041D\u0430\u0447\u0438\u043D\u0430\u0439\u0442\u0435 \u0431\u0443\u0434\u0443\u0449\u0438\u0435 \u0438\u0433\u0440\u044B \u0441 \\"\u043C\u0435\u0434\u043B\u0435\u043D\u043D\u043E\u0433\u043E \u043C\u044F\u0447\u0430\\".","settings.language":"\u042F\u0437\u044B\u043A","settings.language_help":"\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u044F\u0437\u044B\u043A \u0438\u0433\u0440\u044B","settings.load_save_file":"\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044C \u0444\u0430\u0439\u043B \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0438\u044F","settings.load_save_file_help":"\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u0444\u0430\u0439\u043B \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0438\u044F \u043D\u0430 \u0432\u0430\u0448\u0435\u043C \u0443\u0441\u0442\u0440\u043E\u0439\u0441\u0442\u0432\u0435","settings.max_coins":" {{max}} \u043C\u043E\u043D\u0435\u0442 \u043D\u0430 \u044D\u043A\u0440\u0430\u043D\u0435 \u043C\u0430\u043A\u0441\u0438\u043C\u0443\u043C","settings.max_coins_help":"\u0422\u043E\u043B\u044C\u043A\u043E \u043A\u043E\u0441\u043C\u0435\u0442\u0438\u043A\u0430, \u043D\u0435 \u0432\u043B\u0438\u044F\u0435\u0442 \u043D\u0430 \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442","settings.mobile":"\u041C\u043E\u0431\u0438\u043B\u044C\u043D\u044B\u0439 \u0440\u0435\u0436\u0438\u043C","settings.mobile_help":"\u041E\u0441\u0442\u0430\u0432\u043B\u044F\u0435\u0442 \u043C\u0435\u0441\u0442\u043E \u043F\u043E\u0434 \u043B\u043E\u043F\u0430\u0442\u043A\u043E\u0439.","settings.pointer_lock":"\u0411\u043B\u043E\u043A\u0438\u0440\u043E\u0432\u043A\u0430 \u0443\u043A\u0430\u0437\u0430\u0442\u0435\u043B\u044F \u043C\u044B\u0448\u0438","settings.pointer_lock_help":"\u0424\u0438\u043A\u0441\u0438\u0440\u0443\u0435\u0442 \u0438 \u0441\u043A\u0440\u044B\u0432\u0430\u0435\u0442 \u043A\u0443\u0440\u0441\u043E\u0440 \u043C\u044B\u0448\u0438.","settings.precise_lighting":"","settings.precise_lighting_help":"","settings.probabilistic_lighting":"","settings.probabilistic_lighting_help":"","settings.record":"\u0417\u0430\u043F\u0438\u0441\u044C \u0432\u0438\u0434\u0435\u043E\u0440\u043E\u043B\u0438\u043A\u043E\u0432 \u0438\u0433\u0440\u043E\u0432\u043E\u0433\u043E \u043F\u0440\u043E\u0446\u0435\u0441\u0441\u0430","settings.record_download":"\u0421\u043A\u0430\u0447\u0430\u0442\u044C \u0432\u0438\u0434\u0435\u043E ({{size}} \u041C\u0411)","settings.record_help":"\u041F\u043E\u043B\u0443\u0447\u0438\u0442\u0435 \u0432\u0438\u0434\u0435\u043E\u0437\u0430\u043F\u0438\u0441\u044C \u043A\u0430\u0436\u0434\u043E\u0433\u043E \u0443\u0440\u043E\u0432\u043D\u044F.","settings.red_miss":"\u041C\u0438\u0441\u0441 \u043F\u0440\u0435\u0434\u0443\u043F\u0440\u0435\u0436\u0434\u0435\u043D\u0438\u0435","settings.red_miss_help":"\u041F\u043E\u043A\u0430\u0436\u0438\u0442\u0435 \u043A\u0440\u0430\u0441\u043D\u044B\u0435 \u0447\u0430\u0441\u0442\u0438\u0446\u044B \u0432\u043E\u043A\u0440\u0443\u0433 \u043C\u044F\u0447\u0435\u0439, \u043F\u0430\u0434\u0430\u044E\u0449\u0438\u0445 \u0431\u0435\u0437 \u043F\u043E\u043F\u0430\u0434\u0430\u043D\u0438\u044F.","settings.reset":"\u041F\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u043A\u0430 \u0438\u0433\u0440\u044B","settings.reset_cancel":"\u041D\u0435\u0442","settings.reset_confirm":"\u0414\u0430","settings.reset_help":"\u0421\u043E\u0442\u0440\u0438\u0442\u0435 \u0432\u044B\u0441\u043E\u043A\u0438\u0439 \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442, \u0432\u0440\u0435\u043C\u044F \u0438\u0433\u0440\u044B \u0438 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043A\u0443","settings.reset_instruction":"\u0412\u044B \u043F\u043E\u0442\u0435\u0440\u044F\u0435\u0442\u0435 \u0432\u0435\u0441\u044C \u043F\u0440\u043E\u0433\u0440\u0435\u0441\u0441, \u0434\u043E\u0441\u0442\u0438\u0433\u043D\u0443\u0442\u044B\u0439 \u0432 \u0438\u0433\u0440\u0435, \u0432\u044B \u0443\u0432\u0435\u0440\u0435\u043D\u044B?","settings.save_file_error":"\u041E\u0448\u0438\u0431\u043A\u0430 \u043F\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043A\u0435 \u0444\u0430\u0439\u043B\u0430 \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0438\u044F","settings.save_file_loaded":"\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043D\u043D\u044B\u0439 \u0444\u0430\u0439\u043B","settings.save_file_loaded_help":"\u0422\u0435\u043F\u0435\u0440\u044C \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0435 \u043F\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u0441\u044F, \u0447\u0442\u043E\u0431\u044B \u043F\u0440\u0438\u043C\u0435\u043D\u0438\u0442\u044C \u0432\u0430\u0448\u0435 \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0438\u0435","settings.save_file_loaded_ok":"OK","settings.show_fps":"\u0421\u0447\u0435\u0442\u0447\u0438\u043A FPS","settings.show_fps_help":"\u041A\u043E\u043D\u0442\u0440\u043E\u043B\u0438\u0440\u0443\u0439\u0442\u0435 \u0440\u0430\u0431\u043E\u0442\u0443 \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u044F","settings.show_stats":"\u041F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0439\u0442\u0435 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043A\u0443 \u0432 \u0440\u0435\u0430\u043B\u044C\u043D\u043E\u043C \u0432\u0440\u0435\u043C\u0435\u043D\u0438","settings.show_stats_help":"\u041C\u043E\u043D\u0435\u0442\u044B, \u0432\u0440\u0435\u043C\u044F, \u043E\u0442\u0441\u043A\u043E\u043A\u0438, \u043F\u0440\u043E\u043C\u0430\u0445\u0438","settings.smooth_lighting":"","settings.smooth_lighting_help":"","settings.sounds":"\u0417\u0432\u0443\u043A\u0438 \u0438\u0433\u0440\u044B","settings.sounds_help":"\u0411\u0438\u043F\u044B, \u0431\u043B\u0435\u043F\u044B \u0438 \u0431\u0440\u0440\u0440\u0440","settings.storage_granted":"","settings.storage_refused":"","settings.stress_test":"","settings.stress_test_help":"","starting_perks.checked":"\u041A\u043E\u0433\u0434\u0430 \u0432\u044B \u043D\u0430\u0447\u043D\u0435\u0442\u0435 \u043D\u043E\u0432\u0443\u044E \u0438\u0433\u0440\u0443, \u0432\u0430\u043C \u0431\u0443\u0434\u0435\u0442 \u0434\u0430\u043D\u043E \u043E\u0434\u043D\u043E \u0438\u0437 \u044D\u0442\u0438\u0445 \u043F\u0440\u0435\u0438\u043C\u0443\u0449\u0435\u0441\u0442\u0432. \u0429\u0435\u043B\u043A\u043D\u0438\u0442\u0435 \u043F\u043E \u043F\u0435\u0440\u043A\u0443, \u0447\u0442\u043E\u0431\u044B \u0438\u0441\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u0435\u0433\u043E.","starting_perks.help":"\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u0432\u043E\u0437\u043C\u043E\u0436\u043D\u044B\u0435 \u0441\u0442\u0430\u0440\u0442\u043E\u0432\u044B\u0435 \u0430\u043F\u0433\u0440\u0435\u0439\u0434\u044B","starting_perks.random":"\u0412\u0441\u0435 \u043F\u0440\u0435\u0438\u043C\u0443\u0449\u0435\u0441\u0442\u0432\u0430 \u0431\u044B\u043B\u0438 \u0443\u0431\u0440\u0430\u043D\u044B, \u0432\u044B\u0431\u043E\u0440 \u0431\u0443\u0434\u0435\u0442 \u0441\u043B\u0443\u0447\u0430\u0439\u043D\u044B\u043C.","starting_perks.title":"\u0421\u0442\u0430\u0440\u0442\u043E\u0432\u044B\u0435 \u043F\u0440\u0438\u0432\u0438\u043B\u0435\u0433\u0438\u0438","starting_perks.unchecked":"\u041F\u0440\u0438\u0432\u0435\u0434\u0435\u043D\u043D\u044B\u0435 \u043D\u0438\u0436\u0435 \u043F\u0440\u0438\u0432\u0438\u043B\u0435\u0433\u0438\u0438 \u043D\u0435 \u043F\u0440\u0435\u0434\u043B\u0430\u0433\u0430\u044E\u0442\u0441\u044F \u0432 \u043A\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0441\u0442\u0430\u0440\u0442\u043E\u0432\u044B\u0445, \u043D\u043E \u0432\u044B \u043C\u043E\u0436\u0435\u0442\u0435 \u043D\u0430\u0436\u0430\u0442\u044C \u043D\u0430 \u043D\u0438\u0445, \u0447\u0442\u043E\u0431\u044B \u0434\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0432 \u043F\u0443\u043B.","unlocks.greyed_out_help":"\u0412\u044B\u0434\u0435\u043B\u0435\u043D\u043D\u044B\u0435 \u0441\u0435\u0440\u044B\u043C \u0430\u043F\u0433\u0440\u0435\u0439\u0434\u044B \u043C\u043E\u0436\u043D\u043E \u0440\u0430\u0437\u0431\u043B\u043E\u043A\u0438\u0440\u043E\u0432\u0430\u0442\u044C, \u0443\u0432\u0435\u043B\u0438\u0447\u0438\u0432 \u043E\u0431\u0449\u0435\u0435 \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u043E\u0447\u043A\u043E\u0432. \u041E\u0431\u0449\u0438\u0439 \u0441\u0447\u0435\u0442 \u0443\u0432\u0435\u043B\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044F \u043A\u0430\u0436\u0434\u044B\u0439 \u0440\u0430\u0437, \u043A\u043E\u0433\u0434\u0430 \u0432\u044B \u043D\u0430\u0431\u0438\u0440\u0430\u0435\u0442\u0435 \u043E\u0447\u043A\u0438 \u0432 \u0438\u0433\u0440\u0435.","unlocks.intro":"\u0412\u0430\u0448 \u043E\u0431\u0449\u0438\u0439 \u0441\u0447\u0435\u0442 \u0441\u043E\u0441\u0442\u0430\u0432\u043B\u044F\u0435\u0442 {{ts}}. \u041D\u0438\u0436\u0435 \u043F\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u044B \u0432\u0441\u0435 \u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u044F \u0438 \u0443\u0440\u043E\u0432\u043D\u0438, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u043F\u0440\u0435\u0434\u043B\u0430\u0433\u0430\u0435\u0442 \u0438\u0433\u0440\u0430. \u041D\u0430\u0436\u043C\u0438\u0442\u0435 \u043D\u0430 \u0430\u043F\u0433\u0440\u0435\u0439\u0434 \u0438\u043B\u0438 \u0443\u0440\u043E\u0432\u0435\u043D\u044C \u043D\u0438\u0436\u0435, \u0447\u0442\u043E\u0431\u044B \u043D\u0430\u0447\u0430\u0442\u044C \u0442\u0435\u0441\u0442\u043E\u0432\u0443\u044E \u0438\u0433\u0440\u0443 \u0441 \u043D\u0438\u043C.","unlocks.just_unlocked":"\u0423\u0440\u043E\u0432\u0435\u043D\u044C \u0440\u0430\u0437\u0431\u043B\u043E\u043A\u0438\u0440\u043E\u0432\u0430\u043D","unlocks.just_unlocked_plural":"\u0412\u044B \u0442\u043E\u043B\u044C\u043A\u043E \u0447\u0442\u043E \u0440\u0430\u0437\u0431\u043B\u043E\u043A\u0438\u0440\u043E\u0432\u0430\u043B\u0438 {{count}} \u0443\u0440\u043E\u0432\u043D\u0435\u0439","unlocks.level":"<h2>\u0412\u044B \u0440\u0430\u0437\u0431\u043B\u043E\u043A\u0438\u0440\u043E\u0432\u0430\u043B\u0438 {{unlocked}} \u0443\u0440\u043E\u0432\u043D\u0435\u0439 \u0438\u0437 {{out_of}}</h2>\\n<p>\u0417\u0434\u0435\u0441\u044C \u043F\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u044B \u0432\u0441\u0435 \u0443\u0440\u043E\u0432\u043D\u0438 \u0438\u0433\u0440\u044B, \u043D\u0430\u0436\u043C\u0438\u0442\u0435 \u043D\u0430 \u043E\u0434\u0438\u043D \u0438\u0437 \u043D\u0438\u0445, \u0447\u0442\u043E\u0431\u044B \u043E\u043F\u0440\u043E\u0431\u043E\u0432\u0430\u0442\u044C \u0435\u0433\u043E.</p> ","unlocks.level_description":"\u0423\u0440\u043E\u0432\u0435\u043D\u044C {{size}}x{{size}} \u0441 {{bricks}} \u043A\u0438\u0440\u043F\u0438\u0447\u0430\u043C\u0438, {{colors}} \u0446\u0432\u0435\u0442\u0430\u043C\u0438 \u0438 {{bombs}} \u0431\u043E\u043C\u0431\u0430\u043C\u0438.","unlocks.minScore":"\u0414\u043E\u0441\u0442\u0438\u0433\u043D\u0438\u0442\u0435 ${{minScore}} \u0432 \u0431\u0435\u0433\u0435, \u0447\u0442\u043E\u0431\u044B \u0440\u0430\u0437\u0431\u043B\u043E\u043A\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0438\u0433\u0440\u0443.","unlocks.minScoreWithPerks":"\u0414\u043E\u0441\u0442\u0438\u0433\u043D\u0438\u0442\u0435 ${{minScore}} \u0432 \u0431\u0435\u0433\u0435 \u0441 {{required}} , \u043D\u043E \u0431\u0435\u0437 {{forbidden}} \u0434\u043B\u044F \u0440\u0430\u0437\u0431\u043B\u043E\u043A\u0438\u0440\u043E\u0432\u043A\u0438.","unlocks.minTotalScore":"\u041D\u0430\u043A\u043E\u043F\u0438\u0442\u0435 \u0432 \u043E\u0431\u0449\u0435\u0439 \u0441\u043B\u043E\u0436\u043D\u043E\u0441\u0442\u0438 ${{score}}","unlocks.reached":"\u0412\u0430\u0448 \u043B\u0443\u0447\u0448\u0438\u0439 \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442 - {{reached}}.","unlocks.title_upgrades":"\u0412\u044B \u0440\u0430\u0437\u0431\u043B\u043E\u043A\u0438\u0440\u043E\u0432\u0430\u043B\u0438 {{unlocked}} \u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u0439 \u0438\u0437 {{out_of}}","upgrades.addiction.name":"\u041D\u0430\u0440\u043A\u043E\u043C\u0430\u043D\u0438\u044F","upgrades.addiction.tooltip":"+{{lvl}} \u043A\u043E\u043C\u0431\u043E / \u043A\u0438\u0440\u043F\u0438\u0447, \u043A\u043E\u043C\u0431\u043E \u0441\u0431\u0440\u0430\u0441\u044B\u0432\u0430\u0435\u0442\u0441\u044F \u043D\u0430 {{delay}}\u0441 \u043F\u043E\u0441\u043B\u0435 \u0440\u0430\u0437\u0440\u0443\u0448\u0435\u043D\u0438\u044F \u043A\u0438\u0440\u043F\u0438\u0447\u0430.","upgrades.addiction.verbose_description":"\u041E\u0442\u0441\u0447\u0435\u0442 \u043D\u0430\u0447\u0438\u043D\u0430\u0435\u0442\u0441\u044F \u0442\u043E\u043B\u044C\u043A\u043E \u043F\u043E\u0441\u043B\u0435 \u0440\u0430\u0437\u0440\u0443\u0448\u0435\u043D\u0438\u044F \u043F\u0435\u0440\u0432\u043E\u0433\u043E \u043A\u0438\u0440\u043F\u0438\u0447\u0430 \u043D\u0430 \u043A\u0430\u0436\u0434\u043E\u043C \u0443\u0440\u043E\u0432\u043D\u0435. \u041E\u043D \u043E\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u0441\u044F, \u043A\u0430\u043A \u0442\u043E\u043B\u044C\u043A\u043E \u0432\u0441\u0435 \u043A\u0438\u0440\u043F\u0438\u0447\u0438 \u0431\u0443\u0434\u0443\u0442 \u0443\u043D\u0438\u0447\u0442\u043E\u0436\u0435\u043D\u044B.","upgrades.asceticism.name":"\u0410\u0441\u043A\u0435\u0442\u0438\u0437\u043C","upgrades.asceticism.tooltip":"+{{combo}} \u043A\u043E\u043C\u0431\u043E/\u043A\u0438\u0440\u043F\u0438\u0447, - {{combo}} \u043F\u0440\u0438 \u043B\u043E\u0432\u043B\u0435 \u043C\u043E\u043D\u0435\u0442","upgrades.asceticism.verbose_description":"\u0412\u0430\u043C \u043D\u0443\u0436\u043D\u043E \u0431\u0443\u0434\u0435\u0442 \u0433\u0434\u0435-\u0442\u043E \u0445\u0440\u0430\u043D\u0438\u0442\u044C \u043C\u043E\u043D\u0435\u0442\u044B, \u043F\u043E\u043A\u0430 \u0432\u0430\u0448 \u043A\u043E\u043C\u0431\u043E \u043F\u043E\u0434\u043D\u0438\u043C\u0430\u0435\u0442\u0441\u044F.","upgrades.ball_attract_ball.help_plural":"\u0411\u043E\u043B\u0435\u0435 \u0441\u0438\u043B\u044C\u043D\u0430\u044F \u0441\u0438\u043B\u0430 \u043F\u0440\u0438\u0442\u044F\u0436\u0435\u043D\u0438\u044F","upgrades.ball_attract_ball.name":"\u0413\u0440\u0430\u0432\u0438\u0442\u0430\u0446\u0438\u044F","upgrades.ball_attract_ball.tooltip":"\u041C\u044F\u0447\u0438 \u043F\u0440\u0438\u0442\u044F\u0433\u0438\u0432\u0430\u044E\u0442 \u043C\u044F\u0447\u0438","upgrades.ball_attract_ball.verbose_description":"\u0428\u0430\u0440\u044B, \u043D\u0430\u0445\u043E\u0434\u044F\u0449\u0438\u0435\u0441\u044F \u043D\u0430 \u0440\u0430\u0441\u0441\u0442\u043E\u044F\u043D\u0438\u0438 \u0431\u043E\u043B\u0435\u0435 \\"3/4 \u0448\u0438\u0440\u0438\u043D\u044B \u0438\u0433\u0440\u043E\u0432\u043E\u0439 \u0437\u043E\u043D\u044B\\", \u043D\u0430\u0447\u043D\u0443\u0442 \u043F\u0440\u0438\u0442\u044F\u0433\u0438\u0432\u0430\u0442\u044C\u0441\u044F \u0434\u0440\u0443\u0433 \u043A \u0434\u0440\u0443\u0433\u0443.\\n\\n\u0421\u0438\u043B\u0430 \u043F\u0440\u0438\u0442\u044F\u0436\u0435\u043D\u0438\u044F \u0441\u0438\u043B\u044C\u043D\u0435\u0435, \u043A\u043E\u0433\u0434\u0430 \u043E\u043D\u0438 \u043D\u0430\u0445\u043E\u0434\u044F\u0442\u0441\u044F \u043D\u0430 \u043D\u0430\u0438\u0431\u043E\u043B\u044C\u0448\u0435\u043C \u0440\u0430\u0441\u0441\u0442\u043E\u044F\u043D\u0438\u0438 \u0434\u0440\u0443\u0433 \u043E\u0442 \u0434\u0440\u0443\u0433\u0430.\\n\\n\u0420\u0430\u0434\u0443\u0436\u043D\u044B\u0435 \u0447\u0430\u0441\u0442\u0438\u0446\u044B \u0431\u0443\u0434\u0443\u0442 \u043B\u0435\u0442\u0430\u0442\u044C, \u0441\u0438\u043C\u0432\u043E\u043B\u0438\u0437\u0438\u0440\u0443\u044F \u0441\u0438\u043B\u0443 \u043F\u0440\u0438\u0442\u044F\u0436\u0435\u043D\u0438\u044F. \u042D\u0442\u043E \u043F\u0440\u0435\u0438\u043C\u0443\u0449\u0435\u0441\u0442\u0432\u043E \u043C\u043E\u0436\u043D\u043E \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C, \u0442\u043E\u043B\u044C\u043A\u043E \u0435\u0441\u043B\u0438 \u0443 \u0432\u0430\u0441 \u0443\u0436\u0435 \u0435\u0441\u0442\u044C \u0431\u043E\u043B\u0435\u0435 \u043E\u0434\u043D\u043E\u0433\u043E \u0448\u0430\u0440\u0430.","upgrades.ball_attracts_coins.name":"\u0428\u0430\u0440\u0438\u043A\u0438 \u043F\u0440\u0438\u0442\u044F\u0433\u0438\u0432\u0430\u044E\u0442 \u043C\u043E\u043D\u0435\u0442\u044B","upgrades.ball_attracts_coins.tooltip":"\u041C\u043E\u043D\u0435\u0442\u044B \u0441\u043B\u0435\u0434\u0443\u044E\u0442 \u0437\u0430 \u0431\u043B\u0438\u0436\u0430\u0439\u0448\u0438\u043C \u0448\u0430\u0440\u043E\u043C \u0438 \u043F\u0430\u0434\u0430\u044E\u0442 \u043C\u0435\u0434\u043B\u0435\u043D\u043D\u0435\u0435","upgrades.ball_attracts_coins.verbose_description":"\u042D\u0442\u043E \u043C\u043E\u0436\u043D\u043E \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C, \u0447\u0442\u043E\u0431\u044B \\"\u0440\u0430\u0441\u043A\u0440\u0430\u0441\u0438\u0442\u044C\\" \u0448\u0430\u0440\u0438\u043A\u0438 \u043C\u043E\u043D\u0435\u0442\u0430\u043C\u0438, \u0435\u0441\u043B\u0438 \u0441\u043E\u0432\u043C\u0435\u0441\u0442\u0438\u0442\u044C \u044D\u0442\u043E \u0441 \\"\u043F\u044F\u0442\u043D\u043E\u043C\\" \u0438 \\"\u043F\u0440\u0438\u0437\u0440\u0430\u0447\u043D\u044B\u043C\u0438 \u043C\u043E\u043D\u0435\u0442\u0430\u043C\u0438\\". \u042D\u0442\u043E \u0442\u0430\u043A\u0436\u0435 \u043F\u043E\u0434\u0445\u043E\u0434\u0438\u0442 \u0432 \u043A\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0437\u0430\u043C\u0435\u043D\u044B \u043C\u0430\u0433\u043D\u0438\u0442\u0430 \u0434\u043B\u044F \u043C\u043E\u043D\u0435\u0442.","upgrades.ball_repulse_ball.help_plural":"\u0411\u043E\u043B\u0435\u0435 \u0441\u0438\u043B\u044C\u043D\u044B\u0435 \u0441\u0438\u043B\u044B \u043E\u0442\u0442\u0430\u043B\u043A\u0438\u0432\u0430\u043D\u0438\u044F","upgrades.ball_repulse_ball.name":"\u041B\u0438\u0447\u043D\u043E\u0435 \u043F\u0440\u043E\u0441\u0442\u0440\u0430\u043D\u0441\u0442\u0432\u043E","upgrades.ball_repulse_ball.tooltip":"\u0428\u0430\u0440\u0438\u043A\u0438 \u043E\u0442\u0442\u0430\u043B\u043A\u0438\u0432\u0430\u044E\u0442\u0441\u044F \u043E\u0442 \u0448\u0430\u0440\u0438\u043A\u043E\u0432","upgrades.ball_repulse_ball.verbose_description":"\u0428\u0430\u0440\u0438\u043A\u0438, \u043D\u0430\u0445\u043E\u0434\u044F\u0449\u0438\u0435\u0441\u044F \u043D\u0430 \u0440\u0430\u0441\u0441\u0442\u043E\u044F\u043D\u0438\u0438 \u043C\u0435\u043D\u0435\u0435 \u0447\u0435\u0442\u0432\u0435\u0440\u0442\u0438 \u0448\u0438\u0440\u0438\u043D\u044B \u044D\u043A\u0440\u0430\u043D\u0430, \u043D\u0430\u0447\u043D\u0443\u0442 \u043E\u0442\u0442\u0430\u043B\u043A\u0438\u0432\u0430\u0442\u044C\u0441\u044F \u0434\u0440\u0443\u0433 \u043E\u0442 \u0434\u0440\u0443\u0433\u0430. \u0421\u0438\u043B\u0430 \u043E\u0442\u0442\u0430\u043B\u043A\u0438\u0432\u0430\u043D\u0438\u044F \u0431\u0443\u0434\u0435\u0442 \u0441\u0438\u043B\u044C\u043D\u0435\u0435, \u0435\u0441\u043B\u0438 \u043E\u043D\u0438 \u043D\u0430\u0445\u043E\u0434\u044F\u0442\u0441\u044F \u0431\u043B\u0438\u0437\u043A\u043E \u0434\u0440\u0443\u0433 \u043A \u0434\u0440\u0443\u0433\u0443. \u0427\u0430\u0441\u0442\u0438\u0446\u044B \u0431\u0443\u0434\u0443\u0442 \u0432\u044B\u043B\u0435\u0442\u0430\u0442\u044C \u0438\u0437 \u0448\u0430\u0440\u0430, \u0441\u0438\u043C\u0432\u043E\u043B\u0438\u0437\u0438\u0440\u0443\u044F \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u044D\u0442\u043E\u0439 \u0441\u0438\u043B\u044B. \u042D\u0442\u0430 \u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E\u0441\u0442\u044C \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0430 \u0442\u043E\u043B\u044C\u043A\u043E \u0432 \u0442\u043E\u043C \u0441\u043B\u0443\u0447\u0430\u0435, \u0435\u0441\u043B\u0438 \u0443 \u0432\u0430\u0441 \u0443\u0436\u0435 \u0435\u0441\u0442\u044C \u043D\u0435\u0441\u043A\u043E\u043B\u044C\u043A\u043E \u0448\u0430\u0440\u043E\u0432.","upgrades.base_combo.name":"\u041F\u0440\u043E\u0447\u043D\u044B\u0439 \u0444\u0443\u043D\u0434\u0430\u043C\u0435\u043D\u0442","upgrades.base_combo.tooltip":"\u041A\u043E\u043C\u0431\u043E \u043D\u0430\u0447\u0438\u043D\u0430\u0435\u0442\u0441\u044F \u0441 {{coins}} \u0432\u043C\u0435\u0441\u0442\u043E 1.","upgrades.base_combo.verbose_description":"\u041E\u0431\u044B\u0447\u043D\u043E \u0432\u0430\u0448\u0435 \u043A\u043E\u043C\u0431\u043E \u043D\u0430\u0447\u0438\u043D\u0430\u0435\u0442\u0441\u044F \u0441 1 \u0432 \u043D\u0430\u0447\u0430\u043B\u0435 \u0443\u0440\u043E\u0432\u043D\u044F \u0438 \u0441\u0431\u0440\u0430\u0441\u044B\u0432\u0430\u0435\u0442\u0441\u044F \u0434\u043E 1, \u043A\u043E\u0433\u0434\u0430 \u0432\u044B \u043F\u043E\u0434\u043F\u0440\u044B\u0433\u0438\u0432\u0430\u0435\u0442\u0435, \u043D\u0435 \u043F\u043E\u043F\u0430\u0434\u0430\u044F \u043D\u0438 \u0432\u043E \u0447\u0442\u043E. \u0421 \u044D\u0442\u0438\u043C \u043F\u0435\u0440\u043A\u043E\u043C \u043A\u043E\u043C\u0431\u043E \u043D\u0430\u0447\u0438\u043D\u0430\u0435\u0442\u0441\u044F \u043D\u0430 3 \u043F\u0443\u043D\u043A\u0442\u0430 \u0432\u044B\u0448\u0435, \u043F\u043E\u044D\u0442\u043E\u043C\u0443 \u0432\u044B \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u0443\u0434\u0435\u0442\u0435 \u043F\u043E\u043B\u0443\u0447\u0430\u0442\u044C \u043D\u0435 \u043C\u0435\u043D\u0435\u0435 4 \u043C\u043E\u043D\u0435\u0442 \u0437\u0430 \u043A\u0438\u0440\u043F\u0438\u0447. \u041A\u043E\u0433\u0434\u0430 \u0432\u0430\u0448\u0435 \u043A\u043E\u043C\u0431\u043E \u043E\u0431\u043D\u0443\u043B\u0438\u0442\u0441\u044F, \u043E\u043D\u043E \u0432\u0435\u0440\u043D\u0435\u0442\u0441\u044F \u043A 4, \u0430 \u043D\u0435 \u043A 1. \u0412\u0430\u0448 \u0448\u0430\u0440\u0438\u043A \u0431\u0443\u0434\u0435\u0442 \u043D\u0435\u043C\u043D\u043E\u0433\u043E \u0431\u043B\u0435\u0441\u0442\u0435\u0442\u044C, \u0447\u0442\u043E\u0431\u044B \u043F\u043E\u043A\u0430\u0437\u0430\u0442\u044C, \u0447\u0442\u043E \u0435\u0433\u043E \u043A\u043E\u043C\u0431\u043E \u0432\u044B\u0448\u0435 \u0435\u0434\u0438\u043D\u0438\u0446\u044B.","upgrades.bigger_explosions.name":"Kaboom","upgrades.bigger_explosions.tooltip":"\u0411\u043E\u043B\u044C\u0448\u0438\u0435 \u0432\u0437\u0440\u044B\u0432\u044B","upgrades.bigger_explosions.verbose_description":"\u0412\u0437\u0440\u044B\u0432 \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E \u043E\u0447\u0438\u0449\u0430\u0435\u0442 \u043A\u0432\u0430\u0434\u0440\u0430\u0442 3x3, \u0441 \u044D\u0442\u0438\u043C \u0432\u0437\u0440\u044B\u0432\u043E\u043C \u043E\u043D \u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u0441\u044F \u043A\u0432\u0430\u0434\u0440\u0430\u0442\u043E\u043C 5x5, \u0430 \u0443\u0434\u0430\u0440 \u043F\u043E \u043C\u043E\u043D\u0435\u0442\u0430\u043C \u0442\u0430\u043A\u0436\u0435 \u0437\u043D\u0430\u0447\u0438\u0442\u0435\u043B\u044C\u043D\u043E \u0441\u0438\u043B\u044C\u043D\u0435\u0435. \u041F\u043E\u0441\u043B\u0435 \u043A\u0430\u0436\u0434\u043E\u0433\u043E \u0432\u0437\u0440\u044B\u0432\u0430 \u044D\u043A\u0440\u0430\u043D \u0431\u0443\u0434\u0435\u0442 \u043C\u0438\u0433\u0430\u0442\u044C (\u043A\u0440\u043E\u043C\u0435 \u0431\u0430\u0437\u043E\u0432\u043E\u0433\u043E \u0440\u0435\u0436\u0438\u043C\u0430).","upgrades.bigger_puck.name":"\u0411\u043E\u043B\u044C\u0448\u043E\u0435 \u0432\u0435\u0441\u043B\u043E","upgrades.bigger_puck.tooltip":"\u041B\u0435\u0433\u043A\u043E \u043F\u043E\u0439\u043C\u0430\u0442\u044C \u0431\u043E\u043B\u044C\u0448\u0435 \u043C\u043E\u043D\u0435\u0442.","upgrades.bigger_puck.verbose_description":"\u0411\u043E\u043B\u044C\u0448\u0435\u0435 \u0432\u0435\u0441\u043B\u043E \u043F\u043E\u0437\u0432\u043E\u043B\u044F\u0435\u0442 \u043D\u0438\u043A\u043E\u0433\u0434\u0430 \u043D\u0435 \u043F\u0440\u043E\u043C\u0430\u0445\u0438\u0432\u0430\u0442\u044C\u0441\u044F \u043F\u043E \u043C\u044F\u0447\u0443 \u0438 \u043B\u043E\u0432\u0438\u0442\u044C \u0431\u043E\u043B\u044C\u0448\u0435 \u043C\u043E\u043D\u0435\u0442, \u0430 \u0442\u0430\u043A\u0436\u0435 \u0442\u043E\u0447\u043D\u043E \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0442\u044C \u0443\u0433\u043E\u043B \u043E\u0442\u0441\u043A\u043E\u043A\u0430 (\u0443\u0433\u043E\u043B \u043D\u0430\u043A\u043B\u043E\u043D\u0430 \u043C\u044F\u0447\u0430 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u0442\u043E\u043B\u044C\u043A\u043E \u043E\u0442 \u0442\u043E\u0433\u043E, \u043A\u0443\u0434\u0430 \u043E\u043D \u043F\u043E\u043F\u0430\u0434\u0430\u0435\u0442 \u043F\u0440\u0438 \u0443\u0434\u0430\u0440\u0435 \u043E \u0432\u0435\u0441\u043B\u043E).","upgrades.bricks_attract_ball.name":"\u041A\u0438\u0440\u043F\u0438\u0447\u0438 \u043F\u0440\u0438\u0442\u044F\u0433\u0438\u0432\u0430\u044E\u0442 \u043C\u044F\u0447\u0438","upgrades.bricks_attract_ball.tooltip":"\u041C\u044F\u0447 \u043B\u0435\u0442\u0438\u0442 \u043A \u043F\u0435\u0440\u0432\u044B\u043C {{count}} \u043A\u0438\u0440\u043F\u0438\u0447\u0430\u043C, \u043A\u043E\u0442\u043E\u0440\u044B\u0445 \u043E\u043D \u043A\u043E\u0441\u043D\u0435\u0442\u0441\u044F.","upgrades.bricks_attract_ball.verbose_description":"\u042D\u0444\u0444\u0435\u043A\u0442 \u0441\u0438\u043B\u044C\u043D\u0435\u0435 \u043D\u0430 \u0431\u043E\u043B\u0435\u0435 \u0432\u044B\u0441\u043E\u043A\u0438\u0445 \u0443\u0440\u043E\u0432\u043D\u044F\u0445. \u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u043A\u0438\u0440\u043F\u0438\u0447\u0435\u0439, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u043C\u043E\u0433\u0443\u0442 \u0443\u0434\u0430\u0440\u0438\u0442\u044C \u0434\u043E \u0442\u043E\u0433\u043E, \u043A\u0430\u043A \u044D\u0444\u0444\u0435\u043A\u0442 \u043F\u0440\u0435\u043A\u0440\u0430\u0442\u0438\u0442\u0441\u044F, \u0442\u0430\u043A\u0436\u0435 \u0431\u043E\u043B\u044C\u0448\u0435. \u042D\u0444\u0444\u0435\u043A\u0442 \u0432\u043E\u0437\u043E\u0431\u043D\u043E\u0432\u043B\u044F\u0435\u0442\u0441\u044F, \u043A\u043E\u0433\u0434\u0430 \u043C\u044F\u0447 \u043A\u0430\u0441\u0430\u0435\u0442\u0441\u044F \u0448\u0430\u0439\u0431\u044B.","upgrades.bricks_attract_coins.name":"\u041A\u0438\u0440\u043F\u0438\u0447\u0438 \u043F\u0440\u0438\u0442\u044F\u0433\u0438\u0432\u0430\u044E\u0442 \u043C\u043E\u043D\u0435\u0442\u044B","upgrades.bricks_attract_coins.tooltip":"\u041F\u043E\u043C\u043E\u0433\u0430\u0435\u0442 \u0438\u043C \u043E\u0441\u0442\u0430\u0432\u0430\u0442\u044C\u0441\u044F \u043D\u0430 \u0432\u0435\u0440\u0448\u0438\u043D\u0435","upgrades.bricks_attract_coins.verbose_description":"","upgrades.clairvoyant.name":"\u042F\u0441\u043D\u043E\u0432\u0438\u0434\u044F\u0449\u0438\u0439","upgrades.clairvoyant.tooltip":"\u041F\u0440\u043E\u0441\u043C\u0430\u0442\u0440\u0438\u0432\u0430\u0439\u0442\u0435 \u043F\u0440\u0435\u0434\u0441\u0442\u043E\u044F\u0449\u0438\u0435 \u0443\u0440\u043E\u0432\u043D\u0438, \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u043A\u0438\u0440\u043F\u0438\u0447\u0435\u0439 \u0438 \u043D\u0430\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u0434\u0432\u0438\u0436\u0435\u043D\u0438\u044F \u043C\u044F\u0447\u0430","upgrades.clairvoyant.verbose_description":"\u041F\u043E\u043C\u043E\u0436\u0435\u0442 \u0432\u044B\u0431\u0440\u0430\u0442\u044C \u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u044B\u0435 \u0430\u043F\u0433\u0440\u0435\u0439\u0434\u044B \u0438 \u043F\u043E\u043D\u044F\u0442\u044C, \u0447\u0442\u043E \u043F\u0440\u043E\u0438\u0441\u0445\u043E\u0434\u0438\u0442 \u0441 \u043F\u0440\u043E\u0447\u043D\u044B\u043C\u0438 \u043A\u0438\u0440\u043F\u0438\u0447\u0430\u043C\u0438. \u0423\u0440\u043E\u0432\u043D\u0438 2 \u0438 3 \u0434\u0430\u044E\u0442 \u0434\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u044B\u0435 \u0437\u043D\u0430\u043D\u0438\u044F \u0441\u043E\u043C\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u043E\u0439 \u043F\u043E\u043B\u0435\u0437\u043D\u043E\u0441\u0442\u0438 (\u0434\u043E\u0441\u0442\u0438\u0433\u0430\u044E\u0442\u0441\u044F \u0432 \u0440\u0435\u0436\u0438\u043C\u0435 \u0446\u0438\u043A\u043B\u0430)","upgrades.coin_magnet.help_plural":"\u0411\u043E\u043B\u0435\u0435 \u0441\u0438\u043B\u044C\u043D\u043E\u0435 \u0432\u043E\u0437\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043D\u0430 \u043C\u043E\u043D\u0435\u0442\u044B","upgrades.coin_magnet.name":"\u041C\u0430\u0433\u043D\u0438\u0442 \u0434\u043B\u044F \u043C\u043E\u043D\u0435\u0442","upgrades.coin_magnet.tooltip":"\u041B\u043E\u043F\u0430\u0441\u0442\u044C \u043F\u0440\u0438\u0442\u044F\u0433\u0438\u0432\u0430\u0435\u0442 \u043C\u043E\u043D\u0435\u0442\u044B","upgrades.coin_magnet.verbose_description":"\u041D\u0430\u043F\u0440\u0430\u0432\u043B\u044F\u0435\u0442 \u043C\u043E\u043D\u0435\u0442\u044B \u043A \u043B\u043E\u043F\u0430\u0442\u043A\u0435. \u042D\u0444\u0444\u0435\u043A\u0442 \u0431\u0443\u0434\u0435\u0442 \u0441\u0438\u043B\u044C\u043D\u0435\u0435, \u0435\u0441\u043B\u0438 \u043C\u043E\u043D\u0435\u0442\u0430 \u0443\u0436\u0435 \u043D\u0430\u0445\u043E\u0434\u0438\u0442\u0441\u044F \u0440\u044F\u0434\u043E\u043C \u0441 \u043D\u0438\u043C.","upgrades.compound_interest.name":"\u0421\u043B\u043E\u0436\u043D\u044B\u0435 \u043F\u0440\u043E\u0446\u0435\u043D\u0442\u044B","upgrades.compound_interest.tooltip":"+{{lvl}} \u043A\u043E\u043C\u0431\u043E \u0437\u0430 \u043A\u0430\u0436\u0434\u044B\u0439 \u0440\u0430\u0437\u0431\u0438\u0442\u044B\u0439 \u043A\u0438\u0440\u043F\u0438\u0447, \u0441\u0431\u0440\u0430\u0441\u044B\u0432\u0430\u0435\u0442\u0441\u044F \u043F\u0440\u0438 \u043F\u043E\u0442\u0435\u0440\u0435 \u043C\u043E\u043D\u0435\u0442\u044B","upgrades.compound_interest.verbose_description":"\u041A\u0430\u0436\u0434\u044B\u0439 \u0440\u0430\u0437, \u043A\u043E\u0433\u0434\u0430 \u0432\u044B \u0440\u0430\u0437\u0431\u0438\u0432\u0430\u0435\u0442\u0435 \u043A\u0438\u0440\u043F\u0438\u0447, \u0432\u0430\u0448\u0435 \u043A\u043E\u043C\u0431\u043E \u0431\u0443\u0434\u0435\u0442 \u0443\u0432\u0435\u043B\u0438\u0447\u0438\u0432\u0430\u0442\u044C\u0441\u044F \u043D\u0430 \u043E\u0434\u043D\u0443 \u043C\u043E\u043D\u0435\u0442\u0443, \u0438 \u0441 \u043A\u0430\u0436\u0434\u044B\u043C \u0440\u0430\u0437\u0431\u0438\u0442\u044B\u043C \u043A\u0438\u0440\u043F\u0438\u0447\u043E\u043C \u0431\u0443\u0434\u0435\u0442 \u043F\u043E\u044F\u0432\u043B\u044F\u0442\u044C\u0441\u044F \u0432\u0441\u0435 \u0431\u043E\u043B\u044C\u0448\u0435 \u0438 \u0431\u043E\u043B\u044C\u0448\u0435 \u043C\u043E\u043D\u0435\u0442.\\n\u041E\u0434\u043D\u0430\u043A\u043E \u043D\u0435 \u0437\u0430\u0431\u044B\u0432\u0430\u0439\u0442\u0435 \u043B\u043E\u0432\u0438\u0442\u044C \u0432\u0441\u0435 \u043C\u043E\u043D\u0435\u0442\u044B \u043B\u043E\u043F\u0430\u0442\u043A\u043E\u0439, \u0442\u0430\u043A \u043A\u0430\u043A \u043B\u044E\u0431\u0430\u044F \u043F\u043E\u0442\u0435\u0440\u044F\u043D\u043D\u0430\u044F \u043C\u043E\u043D\u0435\u0442\u0430 \u043E\u0431\u043D\u0443\u043B\u0438\u0442 \u0432\u0430\u0448\u0435 \u043A\u043E\u043C\u0431\u043E.\\n\u041A\u0430\u043A \u0442\u043E\u043B\u044C\u043A\u043E \u0432\u0430\u0448\u0435 \u043A\u043E\u043C\u0431\u043E \u043F\u0440\u0435\u0432\u044B\u0441\u0438\u0442 \u043C\u0438\u043D\u0438\u043C\u0430\u043B\u044C\u043D\u044B\u0439 \u0443\u0440\u043E\u0432\u0435\u043D\u044C, \u0432 \u043D\u0438\u0436\u043D\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u0438\u0433\u0440\u043E\u0432\u043E\u0433\u043E \u043F\u043E\u043B\u044F \u043F\u043E\u044F\u0432\u0438\u0442\u0441\u044F \u043A\u0440\u0430\u0441\u043D\u0430\u044F \u043B\u0438\u043D\u0438\u044F, \u043D\u0430\u043F\u043E\u043C\u0438\u043D\u0430\u044E\u0449\u0430\u044F \u0432\u0430\u043C, \u0447\u0442\u043E \u043C\u043E\u043D\u0435\u0442\u044B \u043D\u0435 \u0434\u043E\u043B\u0436\u043D\u044B \u043F\u043E\u043F\u0430\u0434\u0430\u0442\u044C \u0442\u0443\u0434\u0430.","upgrades.concave_puck.name":"\u0412\u043E\u0433\u043D\u0443\u0442\u043E\u0435 \u0432\u0435\u0441\u043B\u043E","upgrades.concave_puck.tooltip":"\u041F\u043E\u0432\u044B\u0448\u0430\u0435\u0442 \u0442\u043E\u0447\u043D\u043E\u0441\u0442\u044C \u0432\u0435\u0440\u0442\u0438\u043A\u0430\u043B\u044C\u043D\u043E\u0439 \u043D\u0430\u0432\u043E\u0434\u043A\u0438","upgrades.concave_puck.verbose_description":"\u041C\u044F\u0447\u0438 \u043D\u0430\u0447\u0438\u043D\u0430\u044E\u0442 \u0443\u0440\u043E\u0432\u0435\u043D\u044C, \u043F\u043E\u0434\u043D\u0438\u043C\u0430\u044F\u0441\u044C \u043F\u0440\u044F\u043C\u043E \u0432\u0432\u0435\u0440\u0445, \u0438 \u043E\u0442\u0441\u043A\u0430\u043A\u0438\u0432\u0430\u044E\u0442 \u043F\u043E\u0434 \u043C\u0435\u043D\u044C\u0448\u0438\u043C \u0443\u0433\u043B\u043E\u043C.","upgrades.corner_shot.name":"\u0423\u0433\u043B\u043E\u0432\u043E\u0439 \u0443\u0434\u0430\u0440","upgrades.corner_shot.tooltip":"\u041F\u043E\u0437\u0432\u043E\u043B\u044F\u0435\u0442 \u043D\u0430\u043A\u043B\u0430\u0434\u044B\u0432\u0430\u0442\u044C \u043F\u0430\u0434\u0434\u043B \u043D\u0430 \u0433\u0440\u0430\u043D\u0438\u0446\u044B \u044D\u043A\u0440\u0430\u043D\u0430","upgrades.corner_shot.verbose_description":"\u041F\u043E\u043C\u043E\u0433\u0430\u0435\u0442 \u043F\u0440\u0438\u0446\u0435\u043B\u0438\u0432\u0430\u0442\u044C\u0441\u044F \u043D\u0430 \u043F\u043E\u0432\u043E\u0440\u043E\u0442\u0430\u0445. \u0414\u0430\u043B\u044C\u043D\u0438\u0435 \u0443\u0440\u043E\u0432\u043D\u0438 \u043F\u043E\u0437\u0432\u043E\u043B\u044F\u0442 \u0432\u0430\u043C \u0432\u044B\u0439\u0442\u0438 \u0434\u0430\u043B\u044C\u0448\u0435.","upgrades.etherealcoins.name":"\u041C\u043E\u043D\u0435\u0442\u044B, \u0432 \u043A\u043E\u0441\u043C\u043E\u0441\u0435","upgrades.etherealcoins.tooltip":"\u041D\u0430 \u043C\u043E\u043D\u0435\u0442\u044B \u0431\u043E\u043B\u044C\u0448\u0435 \u043D\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u0433\u0440\u0430\u0432\u0438\u0442\u0430\u0446\u0438\u044F","upgrades.etherealcoins.verbose_description":"\u041C\u043E\u043D\u0435\u0442\u044B \u0441\u043E\u0445\u0440\u0430\u043D\u044F\u0442 \u0441\u0432\u043E\u044E \u0441\u043A\u043E\u0440\u043E\u0441\u0442\u044C \u0434\u0430\u0436\u0435 \u043F\u043E\u0441\u043B\u0435 \u043D\u0435\u0441\u043A\u043E\u043B\u044C\u043A\u0438\u0445 \u043F\u043E\u0434\u043F\u0440\u044B\u0433\u0438\u0432\u0430\u043D\u0438\u0439, \u0438 \u043D\u0430 \u043D\u0438\u0445 \u0431\u043E\u043B\u044C\u0448\u0435 \u043D\u0435 \u0431\u0443\u0434\u0435\u0442 \u0434\u0435\u0439\u0441\u0442\u0432\u043E\u0432\u0430\u0442\u044C \u0433\u0440\u0430\u0432\u0438\u0442\u0430\u0446\u0438\u044F.","upgrades.extra_levels.name":"\u0415\u0449\u0435 5 \u043C\u0438\u043D\u0443\u0442","upgrades.extra_levels.tooltip":"\u0418\u0433\u0440\u0430\u0439\u0442\u0435 {{count}} \u0443\u0440\u043E\u0432\u043D\u0435\u0439 \u0432\u043C\u0435\u0441\u0442\u043E 7","upgrades.extra_levels.verbose_description":"\u041F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E \u0438\u0433\u0440\u0430 \u043C\u043E\u0436\u0435\u0442 \u0434\u043B\u0438\u0442\u044C\u0441\u044F \u043C\u0430\u043A\u0441\u0438\u043C\u0443\u043C 7 \u0443\u0440\u043E\u0432\u043D\u0435\u0439, \u043F\u043E\u0441\u043B\u0435 \u0447\u0435\u0433\u043E \u0438\u0433\u0440\u0430 \u0437\u0430\u043A\u0430\u043D\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044F.\\n\\n\u041A\u0430\u0436\u0434\u044B\u0439 \u0443\u0440\u043E\u0432\u0435\u043D\u044C \u044D\u0442\u043E\u0439 \u043F\u0440\u0438\u0432\u0438\u043B\u0435\u0433\u0438\u0438 \u043F\u043E\u0437\u0432\u043E\u043B\u044F\u0435\u0442 \u0432\u0430\u043C \u043F\u043E\u0434\u043D\u044F\u0442\u044C\u0441\u044F \u043D\u0430 \u043E\u0434\u0438\u043D \u0443\u0440\u043E\u0432\u0435\u043D\u044C \u0432\u044B\u0448\u0435. \u041F\u043E\u0441\u043B\u0435\u0434\u043D\u0438\u0435 \u0443\u0440\u043E\u0432\u043D\u0438 \u0447\u0430\u0441\u0442\u043E \u044F\u0432\u043B\u044F\u044E\u0442\u0441\u044F \u0442\u0435\u043C\u0438, \u0433\u0434\u0435 \u0432\u044B \u043D\u0430\u0431\u0438\u0440\u0430\u0435\u0442\u0435 \u0431\u043E\u043B\u044C\u0448\u0435 \u0432\u0441\u0435\u0433\u043E \u043E\u0447\u043A\u043E\u0432, \u0442\u0430\u043A \u0447\u0442\u043E \u0440\u0430\u0437\u043D\u0438\u0446\u0430 \u043C\u043E\u0436\u0435\u0442 \u0431\u044B\u0442\u044C \u0437\u043D\u0430\u0447\u0438\u0442\u0435\u043B\u044C\u043D\u043E\u0439.","upgrades.extra_life.help_plural":"\u0412\u0430\u0448 (\u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0438\u0439) \u043C\u044F\u0447 \u043E\u0442\u0441\u043A\u043E\u0447\u0438\u0442 \u043D\u0430 \u0434\u043D\u043E, \u0430 \u043D\u0435 \u0431\u0443\u0434\u0435\u0442 \u043F\u043E\u0442\u0435\u0440\u044F\u043D ({{lvl}} \u0440\u0430\u0437).","upgrades.extra_life.name":"\u042D\u043A\u0441\u0442\u0440\u0430 \u0436\u0438\u0437\u043D\u044C","upgrades.extra_life.tooltip":"\u041C\u044F\u0447 \u043E\u0442\u0441\u043A\u043E\u0447\u0438\u0442 \u043E\u0434\u0438\u043D \u0440\u0430\u0437 \u043D\u0430 \u043D\u0438\u0436\u043D\u044E\u044E \u043B\u0438\u043D\u0438\u044E, \u043F\u043E\u0441\u043B\u0435 \u0447\u0435\u0433\u043E \u0431\u0443\u0434\u0435\u0442 \u043F\u043E\u0442\u0435\u0440\u044F\u043D.","upgrades.extra_life.verbose_description":"\u041E\u0431\u044B\u0447\u043D\u043E \u0443 \u0432\u0430\u0441 \u043E\u0434\u0438\u043D \u0448\u0430\u0440, \u0438 \u0438\u0433\u0440\u0430 \u0437\u0430\u043A\u0430\u043D\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044F, \u043A\u0430\u043A \u0442\u043E\u043B\u044C\u043A\u043E \u0432\u044B \u0435\u0433\u043E \u0431\u0440\u043E\u0441\u0438\u0442\u0435.\\n\\n\u042D\u0442\u043E \u043F\u0440\u0435\u0438\u043C\u0443\u0449\u0435\u0441\u0442\u0432\u043E \u0434\u043E\u0431\u0430\u0432\u043B\u044F\u0435\u0442 \u0431\u0435\u043B\u0443\u044E \u043F\u043E\u043B\u043E\u0441\u043A\u0443 \u0432 \u043D\u0438\u0436\u043D\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u044D\u043A\u0440\u0430\u043D\u0430, \u043A\u043E\u0442\u043E\u0440\u0430\u044F \u0441\u043E\u0445\u0440\u0430\u043D\u0438\u0442 \u0448\u0430\u0440\u0438\u043A \u043E\u0434\u0438\u043D \u0440\u0430\u0437 \u0438 \u0440\u0430\u0437\u043E\u0431\u044C\u0435\u0442\u0441\u044F \u0432 \u043F\u0440\u043E\u0446\u0435\u0441\u0441\u0435.\\n\\n\u0412\u044B \u0431\u0443\u0434\u0435\u0442\u0435 \u0442\u0435\u0440\u044F\u0442\u044C \u043E\u0434\u0438\u043D \u0443\u0440\u043E\u0432\u0435\u043D\u044C \u044D\u0442\u043E\u0433\u043E \u043F\u0435\u0440\u043A\u0430 \u043A\u0430\u0436\u0434\u044B\u0439 \u0440\u0430\u0437, \u043A\u043E\u0433\u0434\u0430 \u043C\u044F\u0447 \u0431\u0443\u0434\u0435\u0442 \u043E\u0442\u0441\u043A\u0430\u043A\u0438\u0432\u0430\u0442\u044C \u0432 \u043D\u0438\u0436\u043D\u044E\u044E \u0447\u0430\u0441\u0442\u044C \u044D\u043A\u0440\u0430\u043D\u0430.","upgrades.forgiving.name":"\u041F\u0440\u043E\u0449\u0435\u043D\u0438\u0435","upgrades.forgiving.tooltip":"\u041F\u0440\u043E\u043F\u0443\u0449\u0435\u043D\u043D\u044B\u0435 \u043F\u0430\u0443\u0437\u044B \u0443\u043C\u0435\u043D\u044C\u0448\u0430\u044E\u0442 \u043A\u043E\u043C\u0431\u043E \u043F\u043E\u0441\u0442\u0435\u043F\u0435\u043D\u043D\u043E, \u0430 \u043D\u0435 \u0432\u0441\u0435 \u0441\u0440\u0430\u0437\u0443.","upgrades.forgiving.verbose_description":"\u041F\u0435\u0440\u0432\u044B\u0439 \u043F\u0440\u043E\u043C\u0430\u0445 \u0437\u0430 \u0443\u0440\u043E\u0432\u0435\u043D\u044C - \u0431\u0435\u0441\u043F\u043B\u0430\u0442\u043D\u043E, \u0437\u0430\u0442\u0435\u043C 10% \u043E\u0442 \u043A\u043E\u043C\u0431\u043E, \u0437\u0430\u0442\u0435\u043C 20%.","upgrades.fountain_toss.name":"\u0411\u0440\u043E\u0441\u043E\u043A \u0444\u043E\u043D\u0442\u0430\u043D\u0430","upgrades.fountain_toss.tooltip":"\u041F\u043E\u043B\u0443\u0447\u0438\u0442\u0435 \u043D\u0435\u0441\u043A\u043E\u043B\u044C\u043A\u043E \u043A\u043E\u043C\u0431\u043E, \u043A\u043E\u0433\u0434\u0430 \u043F\u0440\u043E\u043F\u0443\u0441\u0442\u0438\u0442\u0435 \u043D\u0435\u0441\u043A\u043E\u043B\u044C\u043A\u043E \u043C\u043E\u043D\u0435\u0442.","upgrades.fountain_toss.verbose_description":"\u0415\u0441\u043B\u0438 \u0432\u044B \u043F\u0440\u043E\u043F\u0443\u0441\u0442\u0438\u043B\u0438 \u043C\u043E\u043D\u0435\u0442\u0443 \u0438 \u0432\u0430\u0448\u0430 \u043A\u043E\u043C\u0431\u043E \u0431\u044B\u043B\u0430 \u043C\u0435\u043D\u044C\u0448\u0435 {{max}}, \u0442\u043E \u0432\u0435\u0440\u043E\u044F\u0442\u043D\u043E\u0441\u0442\u044C \u0442\u043E\u0433\u043E, \u0447\u0442\u043E \u0432\u0430\u0448\u0430 \u043A\u043E\u043C\u0431\u043E \u0432\u044B\u0440\u0430\u0441\u0442\u0435\u0442 \u043D\u0430 {{lvl}}/ \u043A\u043E\u043C\u0431\u043E \u0432\u044B\u0440\u0430\u0441\u0442\u0435\u0442 \u043D\u0430 \u0435\u0434\u0438\u043D\u0438\u0446\u0443.","upgrades.ghost_coins.name":"\u041F\u0440\u0438\u0437\u0440\u0430\u0447\u043D\u044B\u0435 \u043C\u043E\u043D\u0435\u0442\u044B","upgrades.ghost_coins.tooltip":"\u041C\u043E\u043D\u0435\u0442\u044B \u043C\u0435\u0434\u043B\u0435\u043D\u043D\u043E \u043F\u0440\u043E\u0445\u043E\u0434\u044F\u0442 \u0441\u043A\u0432\u043E\u0437\u044C \u043A\u0438\u0440\u043F\u0438\u0447\u0438","upgrades.ghost_coins.verbose_description":"\u042D\u0442\u043E \u043D\u0435 \u043E\u0448\u0438\u0431\u043A\u0430, \u044D\u0442\u043E \u043E\u0441\u043E\u0431\u0435\u043D\u043D\u043E\u0441\u0442\u044C! \u041C\u043E\u043D\u0435\u0442\u044B \u043F\u0440\u043E\u043B\u0435\u0442\u0430\u044E\u0442 \u0441\u043A\u0432\u043E\u0437\u044C \u043A\u0438\u0440\u043F\u0438\u0447\u0438 \u043C\u0435\u0434\u043B\u0435\u043D\u043D\u043E. \u041D\u0430 \u0431\u043E\u043B\u0435\u0435 \u0432\u044B\u0441\u043E\u043A\u0438\u0445 \u0443\u0440\u043E\u0432\u043D\u044F\u0445 \u043E\u043D\u0438 \u0434\u0432\u0438\u0436\u0443\u0442\u0441\u044F \u0431\u044B\u0441\u0442\u0440\u0435\u0435.","upgrades.helium.name":"\u0413\u0435\u043B\u0438\u0439","upgrades.helium.tooltip":"\u0413\u0440\u0430\u0432\u0438\u0442\u0430\u0446\u0438\u044F \u0438\u0437\u043C\u0435\u043D\u044F\u0435\u0442\u0441\u044F \u0441\u043B\u0435\u0432\u0430 \u0438 \u0441\u043F\u0440\u0430\u0432\u0430 \u043E\u0442 \u0432\u0435\u0441\u043B\u0430","upgrades.helium.verbose_description":"\u042D\u0442\u043E \u043F\u043E\u0432\u043B\u0438\u044F\u0435\u0442 \u043D\u0430 \u043C\u043E\u043D\u0435\u0442\u044B \u0438 \u043F\u043E\u0437\u0432\u043E\u043B\u0438\u0442 \u0438\u043C \u043F\u043B\u0430\u0432\u0430\u0442\u044C \u0434\u043E \u0442\u0435\u0445 \u043F\u043E\u0440, \u043F\u043E\u043A\u0430 \u0432\u044B \u043D\u0435 \u0441\u043E\u0431\u0435\u0440\u0435\u0442\u0435 \u0438\u0445.","upgrades.hot_start.name":"\u0413\u043E\u0440\u044F\u0447\u0438\u0439 \u0441\u0442\u0430\u0440\u0442","upgrades.hot_start.tooltip":"\u041D\u0430\u0447\u043D\u0438\u0442\u0435 \u0441 \u043A\u043E\u043C\u0431\u043E {{start}}, -{{loss}} \u043A\u043E\u043C\u0431\u043E \u0432 \u0441\u0435\u043A\u0443\u043D\u0434\u0443","upgrades.hot_start.verbose_description":"\u0412 \u043D\u0430\u0447\u0430\u043B\u0435 \u043A\u0430\u0436\u0434\u043E\u0433\u043E \u0443\u0440\u043E\u0432\u043D\u044F \u0432\u0430\u0448\u0435 \u043A\u043E\u043C\u0431\u043E \u0431\u0443\u0434\u0435\u0442 \u043D\u0430\u0447\u0438\u043D\u0430\u0442\u044C\u0441\u044F \u0441 +30 \u043E\u0447\u043A\u043E\u0432, \u043D\u043E \u0437\u0430\u0442\u0435\u043C \u043A\u0430\u0436\u0434\u0443\u044E \u0441\u0435\u043A\u0443\u043D\u0434\u0443 \u043E\u043D\u043E \u0431\u0443\u0434\u0435\u0442 \u0443\u043C\u0435\u043D\u044C\u0448\u0430\u0442\u044C\u0441\u044F \u043D\u0430 \u043E\u0434\u043D\u043E. \u042D\u0444\u0444\u0435\u043A\u0442 \u0441\u0443\u043C\u043C\u0438\u0440\u0443\u0435\u0442\u0441\u044F \u0441 \u0434\u0440\u0443\u0433\u0438\u043C\u0438 \u043F\u0435\u0440\u043A\u0430\u043C\u0438.","upgrades.hypnosis.name":"\u0413\u0438\u043F\u043D\u043E\u0437","upgrades.hypnosis.tooltip":"\u041A\u043E\u0433\u0434\u0430 \u043A\u0438\u0440\u043F\u0438\u0447 \u043C\u0435\u043D\u044F\u0435\u0442 \u0446\u0432\u0435\u0442, \u0442\u0435\u043B\u0435\u043F\u043E\u0440\u0442\u0438\u0440\u0443\u0439\u0442\u0435 \u043C\u043E\u043D\u0435\u0442\u0443 \u043D\u0430 \u0431\u043B\u0438\u0436\u0430\u0439\u0448\u0438\u0439 \u0448\u0430\u0440 \u0438 \u043F\u0435\u0440\u0435\u0437\u0430\u0440\u044F\u0434\u0438\u0442\u0435 \u0435\u0451 \u0441\u043F\u043E\u0441\u043E\u0431\u043D\u043E\u0441\u0442\u044C \u043E\u043A\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044C \u043A\u0438\u0440\u043F\u0438\u0447.","upgrades.hypnosis.verbose_description":"","upgrades.implosions.name":"\u0418\u043C\u043F\u043B\u043E\u0437\u0438\u0438","upgrades.implosions.tooltip":"\u0412\u0437\u0440\u044B\u0432\u044B \u0432\u0441\u0430\u0441\u044B\u0432\u0430\u044E\u0442 \u043C\u043E\u043D\u0435\u0442\u044B, \u0430 \u043D\u0435 \u0432\u044B\u0434\u0443\u0432\u0430\u044E\u0442 \u0438\u0445.","upgrades.implosions.verbose_description":"\u0421\u0438\u043B\u0430 \u0432\u0437\u0440\u044B\u0432\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u043E\u0431\u0440\u0430\u0442\u043D\u043E\u043C \u043D\u0430\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0438. \u0414\u0430\u043B\u044C\u043D\u0438\u0435 \u0443\u0440\u043E\u0432\u043D\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044E\u0442 \u043A\u0430\u043A \\"\u0431\u043E\u043B\u044C\u0448\u0438\u0439 \u0432\u0437\u0440\u044B\u0432\\".","upgrades.instant_upgrade.name":"\u041C\u0433\u043D\u043E\u0432\u0435\u043D\u043D\u043E\u0435 \u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u0435","upgrades.instant_upgrade.tooltip":"+2 \u0430\u043F\u0433\u0440\u0435\u0439\u0434\u0430 \u0441\u0435\u0439\u0447\u0430\u0441, -1 \u0432\u044B\u0431\u043E\u0440 \u0434\u043E \u043A\u043E\u043D\u0446\u0430 \u0438\u0433\u0440\u044B.","upgrades.instant_upgrade.verbose_description":"\u0421\u0440\u0430\u0437\u0443 \u0436\u0435 \u0432\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u0434\u0432\u0430 \u0430\u043F\u0433\u0440\u0435\u0439\u0434\u0430, \u0447\u0442\u043E\u0431\u044B \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C \u043E\u0434\u0438\u043D \u0431\u0435\u0441\u043F\u043B\u0430\u0442\u043D\u044B\u0439 \u0438 \u043E\u0434\u0438\u043D \u0432 \u043A\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043A\u043E\u043C\u043F\u0435\u043D\u0441\u0430\u0446\u0438\u0438 \u0437\u0430 \u0442\u043E\u0442, \u0447\u0442\u043E \u0431\u044B\u043B \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D \u0434\u043B\u044F \u043F\u043E\u043B\u0443\u0447\u0435\u043D\u0438\u044F \u044D\u0442\u043E\u0433\u043E \u043F\u0435\u0440\u043A\u0430. \u0412 \u043A\u0430\u0436\u0434\u043E\u043C \u043F\u043E\u0441\u043B\u0435\u0434\u0443\u044E\u0449\u0435\u043C \u043C\u0435\u043D\u044E \u0432\u044B\u0431\u043E\u0440\u0430 \u0430\u043F\u0433\u0440\u0435\u0439\u0434\u043E\u0432 \u0431\u0443\u0434\u0435\u0442 \u0432\u0441\u0435 \u043C\u0435\u043D\u044C\u0448\u0435 \u0432\u0430\u0440\u0438\u0430\u043D\u0442\u043E\u0432.","upgrades.left_is_lava.name":"\u0418\u0437\u0431\u0435\u0433\u0430\u0439\u0442\u0435 \u043B\u0435\u0432\u043E\u0439 \u0441\u0442\u043E\u0440\u043E\u043D\u044B","upgrades.left_is_lava.tooltip":"+{{lvl}} \u043A\u043E\u043C\u0431\u043E \u0437\u0430 \u043A\u0430\u0436\u0434\u044B\u0439 \u0440\u0430\u0437\u0431\u0438\u0442\u044B\u0439 \u043A\u0438\u0440\u043F\u0438\u0447. \u041A\u043E\u043C\u0431\u043E \u0441\u0431\u0440\u0430\u0441\u044B\u0432\u0430\u0435\u0442\u0441\u044F, \u0435\u0441\u043B\u0438 \u043C\u044F\u0447 \u043F\u043E\u043F\u0430\u0434\u0430\u0435\u0442 \u0432 \u043B\u0435\u0432\u0443\u044E \u0447\u0430\u0441\u0442\u044C \u044D\u043A\u0440\u0430\u043D\u0430","upgrades.left_is_lava.verbose_description":"\u041A\u0430\u0436\u0434\u044B\u0439 \u0440\u0430\u0437, \u043A\u043E\u0433\u0434\u0430 \u0432\u044B \u0440\u0430\u0437\u0431\u0438\u0432\u0430\u0435\u0442\u0435 \u043A\u0438\u0440\u043F\u0438\u0447, \u0432\u0430\u0448\u0435 \u043A\u043E\u043C\u0431\u043E \u0443\u0432\u0435\u043B\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044F \u043D\u0430 \u043E\u0434\u0438\u043D, \u0442\u0430\u043A \u0447\u0442\u043E \u0432\u044B \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u0435 \u043D\u0430 \u043E\u0434\u043D\u0443 \u043C\u043E\u043D\u0435\u0442\u0443 \u0431\u043E\u043B\u044C\u0448\u0435 \u0441\u043E \u0432\u0441\u0435\u0445 \u0441\u043B\u0435\u0434\u0443\u044E\u0449\u0438\u0445 \u0440\u0430\u0437\u0431\u0438\u0442\u044B\u0445 \u043A\u0438\u0440\u043F\u0438\u0447\u0435\u0439.\\n\\n\u041E\u0434\u043D\u0430\u043A\u043E \u0432\u0430\u0448\u0435 \u043A\u043E\u043C\u0431\u043E \u043E\u0431\u043D\u0443\u043B\u044F\u0435\u0442\u0441\u044F, \u043A\u0430\u043A \u0442\u043E\u043B\u044C\u043A\u043E \u0432\u0430\u0448 \u0448\u0430\u0440\u0438\u043A \u043F\u043E\u043F\u0430\u0434\u0430\u0435\u0442 \u0432 \u043B\u0435\u0432\u0443\u044E \u0441\u0442\u043E\u0440\u043E\u043D\u0443.\\n\\n\u041A\u0430\u043A \u0442\u043E\u043B\u044C\u043A\u043E \u0432\u0430\u0448\u0435 \u043A\u043E\u043C\u0431\u043E \u0443\u0432\u0435\u043B\u0438\u0447\u0438\u0442\u0441\u044F, \u043B\u0435\u0432\u0430\u044F \u0441\u0442\u043E\u0440\u043E\u043D\u0430 \u0441\u0442\u0430\u043D\u0435\u0442 \u043A\u0440\u0430\u0441\u043D\u043E\u0439, \u0447\u0442\u043E\u0431\u044B \u043D\u0430\u043F\u043E\u043C\u043D\u0438\u0442\u044C \u0432\u0430\u043C, \u0447\u0442\u043E \u0432\u044B \u0434\u043E\u043B\u0436\u043D\u044B \u0438\u0437\u0431\u0435\u0433\u0430\u0442\u044C \u0441\u0442\u043E\u043B\u043A\u043D\u043E\u0432\u0435\u043D\u0438\u044F \u0441 \u043D\u0435\u0439.\\n","upgrades.limitless.name":"\u0411\u0435\u0437\u0433\u0440\u0430\u043D\u0438\u0447\u043D\u044B\u0439","upgrades.limitless.tooltip":"\u041F\u043E\u0432\u044B\u0441\u044C\u0442\u0435 \u043C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u044B\u0439 \u0443\u0440\u043E\u0432\u0435\u043D\u044C \u0432\u0441\u0435\u0445 \u0430\u043F\u0433\u0440\u0435\u0439\u0434\u043E\u0432 \u043D\u0430 {{lvl}} .","upgrades.limitless.verbose_description":"\u0412\u044B\u0431\u0440\u0430\u0432 \u044D\u0442\u043E \u0443\u043C\u0435\u043D\u0438\u0435, \u0432\u044B \u0442\u0430\u043A\u0436\u0435 \u043F\u043E\u0432\u044B\u0448\u0430\u0435\u0442\u0435 \u0441\u0432\u043E\u0439 \u0441\u043E\u0431\u0441\u0442\u0432\u0435\u043D\u043D\u044B\u0439 \u043B\u0438\u043C\u0438\u0442 \u043D\u0430 \u043E\u0434\u0438\u043D, \u0447\u0442\u043E \u043F\u043E\u0437\u0432\u043E\u043B\u044F\u0435\u0442 \u0432\u0430\u043C \u0432\u044B\u0431\u0440\u0430\u0442\u044C \u0435\u0433\u043E \u0441\u043D\u043E\u0432\u0430.","upgrades.metamorphosis.name":"\u041C\u0435\u0442\u0430\u043C\u043E\u0440\u0444\u043E\u0437\u044B","upgrades.metamorphosis.tooltip":"\u041A\u0430\u0436\u0434\u0430\u044F \u043C\u043E\u043D\u0435\u0442\u0430 \u043C\u043E\u0436\u0435\u0442 \u043E\u043A\u0440\u0430\u0441\u0438\u0442\u044C {{lvl}} \u043A\u0438\u0440\u043F\u0438\u0447\u0435\u0439 \u0432 \u0441\u0432\u043E\u0439 \u0446\u0432\u0435\u0442","upgrades.metamorphosis.verbose_description":"\u0421 \u044D\u0442\u0438\u043C \u043F\u0435\u0440\u043A\u043E\u043C \u043C\u043E\u043D\u0435\u0442\u044B \u0431\u0443\u0434\u0443\u0442 \u0438\u043C\u0435\u0442\u044C \u0446\u0432\u0435\u0442 \u043A\u0438\u0440\u043F\u0438\u0447\u0430, \u0438\u0437 \u043A\u043E\u0442\u043E\u0440\u043E\u0433\u043E \u043E\u043D\u0438 \u043F\u043E\u044F\u0432\u0438\u043B\u0438\u0441\u044C, \u0438 \u043E\u043A\u0440\u0430\u0441\u044F\u0442 \u043F\u0435\u0440\u0432\u044B\u0439 \u043A\u0438\u0440\u043F\u0438\u0447, \u043A\u043E\u0442\u043E\u0440\u043E\u0433\u043E \u043E\u043D\u0438 \u043A\u043E\u0441\u043D\u0443\u0442\u0441\u044F, \u0432 \u0442\u043E\u0442 \u0436\u0435 \u0446\u0432\u0435\u0442. \u041C\u043E\u043D\u0435\u0442\u044B \u0440\u043E\u0436\u0434\u0430\u044E\u0442\u0441\u044F \u0441\u043E \u0441\u043A\u043E\u0440\u043E\u0441\u0442\u044C\u044E \u0440\u0430\u0437\u0431\u0438\u0432\u0448\u0435\u0433\u043E \u0438\u0445 \u0448\u0430\u0440\u0430, \u0430 \u0437\u043D\u0430\u0447\u0438\u0442, \u0432\u044B \u043C\u043E\u0436\u0435\u0442\u0435 \u043D\u0435\u043C\u043D\u043E\u0433\u043E \u043F\u0440\u0438\u0446\u0435\u043B\u0438\u0442\u044C\u0441\u044F \u0432 \u043D\u0430\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0438 \u043A\u0438\u0440\u043F\u0438\u0447\u0435\u0439, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u0445\u043E\u0442\u0438\u0442\u0435 \\"\u0440\u0430\u0441\u043A\u0440\u0430\u0441\u0438\u0442\u044C\\". \u041D\u0430 \u043F\u0435\u0440\u0432\u043E\u043C \u0443\u0440\u043E\u0432\u043D\u0435 \u043A\u0430\u0436\u0434\u0430\u044F \u043C\u043E\u043D\u0435\u0442\u0430 \u043C\u043E\u0436\u0435\u0442 \u043E\u043A\u0440\u0430\u0441\u0438\u0442\u044C 1 \u043A\u0438\u0440\u043F\u0438\u0447, \u043F\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043C \u043E\u043D\u0430 \u0431\u0443\u0434\u0435\u0442 \\"\u043F\u043E\u0442\u0440\u0430\u0447\u0435\u043D\u0430\\" \u0438 \u043F\u043E\u044F\u0432\u0438\u0442\u0441\u044F \u0432 \u043F\u0443\u0441\u0442\u043E\u0442\u0435.","upgrades.minefield.name":"\u041C\u0438\u043D\u043D\u043E\u0435 \u043F\u043E\u043B\u0435","upgrades.minefield.tooltip":"+{{lvl}} \u043A\u043E\u043C\u0431\u043E \u0437\u0430 \u043A\u0430\u0436\u0434\u044B\u0439 \u043A\u0438\u0440\u043F\u0438\u0447 \u0441 \u0431\u043E\u043C\u0431\u043E\u0439 \u043D\u0430 \u044D\u043A\u0440\u0430\u043D\u0435","upgrades.minefield.verbose_description":"\u0414\u043E\u0431\u0430\u0432\u043B\u044F\u0435\u0442 +lvl \u043A \u043A\u043E\u043C\u0431\u043E, \u043A\u043E\u0433\u0434\u0430 \u043A\u0438\u0440\u043F\u0438\u0447 \u043D\u0430\u0445\u043E\u0434\u0438\u0442\u0441\u044F \u043D\u0430 \u043C\u0435\u0441\u0442\u0435, -lvl, \u043A\u043E\u0433\u0434\u0430 \u043E\u043D \u0443\u043D\u0438\u0447\u0442\u043E\u0436\u0430\u0435\u0442\u0441\u044F, \u0438 \u043F\u043E\u0432\u044B\u0448\u0430\u0435\u0442 \u0431\u0430\u0437\u043E\u0432\u043E\u0435 \u043A\u043E\u043C\u0431\u043E \u043D\u0430 \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u043A\u0438\u0440\u043F\u0438\u0447\u0435\u0439, \u0443\u043C\u043D\u043E\u0436\u0435\u043D\u043D\u043E\u0435 \u043D\u0430 lvl.","upgrades.multiball.name":"\u041C\u0443\u043B\u044C\u0442\u0438\u0448\u0430\u0440","upgrades.multiball.tooltip":"\u041D\u0430\u0447\u0438\u043D\u0430\u0439\u0442\u0435 \u043A\u0430\u0436\u0434\u044B\u0439 \u0443\u0440\u043E\u0432\u0435\u043D\u044C \u0441 {{count}} \u0448\u0430\u0440\u0438\u043A\u043E\u0432.","upgrades.multiball.verbose_description":"\u041A\u0430\u043A \u0442\u043E\u043B\u044C\u043A\u043E \u0432\u044B \u0431\u0440\u043E\u0441\u0438\u0442\u0435 \u043C\u044F\u0447 \u0432 \u0438\u0433\u0440\u0435 Breakout 71, \u0432\u044B \u043F\u0440\u043E\u0438\u0433\u0440\u0430\u0435\u0442\u0435.\\n\\n\u0421 \u044D\u0442\u0438\u043C \u043F\u0440\u0435\u0438\u043C\u0443\u0449\u0435\u0441\u0442\u0432\u043E\u043C \u0432\u044B \u043F\u043E\u043B\u0443\u0447\u0430\u0435\u0442\u0435 \u0434\u0432\u0430 \u043C\u044F\u0447\u0430, \u043F\u043E\u044D\u0442\u043E\u043C\u0443 \u043C\u043E\u0436\u0435\u0442\u0435 \u043F\u043E\u0437\u0432\u043E\u043B\u0438\u0442\u044C \u0441\u0435\u0431\u0435 \u043F\u043E\u0442\u0435\u0440\u044F\u0442\u044C \u043E\u0434\u0438\u043D.\\n\\n\u041F\u043E\u0442\u0435\u0440\u044F\u043D\u043D\u044B\u0435 \u043C\u044F\u0447\u0438 \u0432\u043E\u0437\u0432\u0440\u0430\u0449\u0430\u044E\u0442\u0441\u044F \u043D\u0430 \u0441\u043B\u0435\u0434\u0443\u044E\u0449\u0435\u043C \u0443\u0440\u043E\u0432\u043D\u0435.\\n\\n\u041D\u0430\u043B\u0438\u0447\u0438\u0435 \u0431\u043E\u043B\u0435\u0435 \u043E\u0434\u043D\u043E\u0433\u043E \u0448\u0430\u0440\u0430 \u0434\u0435\u043B\u0430\u0435\u0442 \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u044B\u043C\u0438 \u043D\u0435\u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u0434\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u044B\u0435 \u043F\u0440\u0435\u0438\u043C\u0443\u0449\u0435\u0441\u0442\u0432\u0430 \u0438, \u043A\u043E\u043D\u0435\u0447\u043D\u043E, \u043F\u043E\u0437\u0432\u043E\u043B\u044F\u0435\u0442 \u0431\u044B\u0441\u0442\u0440\u0435\u0435 \u043F\u0440\u043E\u0439\u0442\u0438 \u0443\u0440\u043E\u0432\u0435\u043D\u044C.","upgrades.nbricks.name":"\u0421\u0442\u0440\u043E\u0433\u0438\u0439 \u0440\u0430\u0437\u043C\u0435\u0440 \u0432\u044B\u0431\u043E\u0440\u043A\u0438","upgrades.nbricks.tooltip":"\u041F\u043E\u043F\u0430\u0434\u0438\u0442\u0435 \u0442\u043E\u0447\u043D\u043E \u0432 {{lvl}} \u043A\u0438\u0440\u043F\u0438\u0447\u0435\u0439 \u0437\u0430 \u043E\u0434\u0438\u043D \u0443\u0434\u0430\u0440 \u0432\u0435\u0441\u043B\u043E\u043C, \u0447\u0442\u043E\u0431\u044B \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C +{{lvl}} \u043A\u043E\u043C\u0431\u043E, \u0438\u043D\u0430\u0447\u0435 \u043E\u043D\u043E \u0441\u0431\u0440\u0430\u0441\u044B\u0432\u0430\u0435\u0442\u0441\u044F.","upgrades.nbricks.verbose_description":"\u0412\u0430\u043C \u043D\u0435 \u043E\u0431\u044F\u0437\u0430\u0442\u0435\u043B\u044C\u043D\u043E \u0443\u043D\u0438\u0447\u0442\u043E\u0436\u0430\u0442\u044C \u043A\u0438\u0440\u043F\u0438\u0447\u0438, \u043D\u043E \u0432\u044B \u0434\u043E\u043B\u0436\u043D\u044B \u043F\u043E\u043F\u0430\u0441\u0442\u044C \u0432 \u043D\u0438\u0445. \u041A\u0438\u0440\u043F\u0438\u0447\u0438, \u0440\u0430\u0437\u0440\u0443\u0448\u0435\u043D\u043D\u044B\u0435 \u0432\u0437\u0440\u044B\u0432\u0430\u043C\u0438, \u043D\u0435 \u0441\u0447\u0438\u0442\u0430\u044E\u0442\u0441\u044F.","upgrades.one_more_choice.name":"\u0414\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u044B\u0439 \u0432\u044B\u0431\u043E\u0440","upgrades.one_more_choice.tooltip":"\u041F\u0440\u0438 \u0434\u0430\u043B\u044C\u043D\u0435\u0439\u0448\u0435\u043C \u043F\u043E\u0432\u044B\u0448\u0435\u043D\u0438\u0438 \u0443\u0440\u043E\u0432\u043D\u044F \u0431\u0443\u0434\u0435\u0442 \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u043E \u043D\u0430 {{lvl}} \u0431\u043E\u043B\u044C\u0448\u0435 \u0432\u0430\u0440\u0438\u0430\u043D\u0442\u043E\u0432 \u0432 \u0441\u043F\u0438\u0441\u043A\u0435","upgrades.one_more_choice.verbose_description":"\u0412 \u043A\u0430\u0436\u0434\u043E\u043C \u043C\u0435\u043D\u044E \u0430\u043F\u0433\u0440\u0435\u0439\u0434\u043E\u0432 \u043F\u043E\u044F\u0432\u0438\u0442\u0441\u044F \u0435\u0449\u0435 \u043E\u0434\u043D\u0430 \u043E\u043F\u0446\u0438\u044F. \u042D\u0442\u043E \u043D\u0435 \u0443\u0432\u0435\u043B\u0438\u0447\u0438\u0432\u0430\u0435\u0442 \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0430\u043F\u0433\u0440\u0435\u0439\u0434\u043E\u0432, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u0432\u044B \u043C\u043E\u0436\u0435\u0442\u0435 \u0432\u044B\u0431\u0440\u0430\u0442\u044C.","upgrades.passive_income.name":"\u041F\u0430\u0441\u0441\u0438\u0432\u043D\u044B\u0439 \u0434\u043E\u0445\u043E\u0434","upgrades.passive_income.tooltip":"+{{lvl}} \u043A\u043E\u043C\u0431\u043E/\u043A\u0438\u0440\u043F\u0438\u0447, \u0435\u0441\u043B\u0438 \u0442\u043E\u043B\u044C\u043A\u043E \u043F\u0430\u0434\u0434\u043B \u043D\u0435 \u0434\u0432\u0438\u0433\u0430\u043B\u0441\u044F \u0432 \u0442\u0435\u0447\u0435\u043D\u0438\u0435 \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0438\u0445 {{time}}\u0441, \u0442\u043E\u0433\u0434\u0430 \u043E\u043D \u0441\u0431\u0440\u0430\u0441\u044B\u0432\u0430\u0435\u0442\u0441\u044F.","upgrades.passive_income.verbose_description":"\u041D\u0435\u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u043F\u0440\u0438\u0432\u0438\u043B\u0435\u0433\u0438\u0438 \u043C\u043E\u0433\u0443\u0442 \u043F\u043E\u043C\u043E\u0447\u044C \u0448\u0430\u0440\u0430\u043C \u0434\u0435\u043B\u0430\u0442\u044C \u0442\u043E, \u0447\u0442\u043E \u0432\u044B \u0445\u043E\u0442\u0438\u0442\u0435, \u0431\u0435\u0437 \u043D\u0435\u043E\u0431\u0445\u043E\u0434\u0438\u043C\u043E\u0441\u0442\u0438 \u0447\u0442\u043E-\u043B\u0438\u0431\u043E \u043F\u0440\u0435\u0434\u043F\u0440\u0438\u043D\u0438\u043C\u0430\u0442\u044C.","upgrades.picky_eater.name":"\u041F\u0440\u0438\u0434\u0438\u0440\u0447\u0438\u0432\u044B\u0439 \u0435\u0434\u043E\u043A","upgrades.picky_eater.tooltip":"+{{lvl}} \u043A\u043E\u043C\u0431\u043E \u0437\u0430 \u043A\u0430\u0436\u0434\u044B\u0439 \u0440\u0430\u0437\u0431\u0438\u0442\u044B\u0439 \u043A\u0438\u0440\u043F\u0438\u0447, \u0441\u0431\u0440\u0430\u0441\u044B\u0432\u0430\u0435\u0442\u0441\u044F \u043F\u0440\u0438 \u0441\u043C\u0435\u043D\u0435 \u0446\u0432\u0435\u0442\u0430 \u0448\u0430\u0440\u0430","upgrades.picky_eater.verbose_description":"\u041A\u043E\u0433\u0434\u0430 \u0432\u044B \u0440\u0430\u0437\u0431\u0438\u0432\u0430\u0435\u0442\u0435 \u043A\u0438\u0440\u043F\u0438\u0447 \u0442\u043E\u0433\u043E \u0436\u0435 \u0446\u0432\u0435\u0442\u0430, \u0447\u0442\u043E \u0438 \u0432\u0430\u0448 \u0448\u0430\u0440\u0438\u043A, \u0432\u0430\u0448\u0435 \u043A\u043E\u043C\u0431\u043E \u0443\u0432\u0435\u043B\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044F \u043D\u0430 \u0435\u0434\u0438\u043D\u0438\u0446\u0443.\\n\u0415\u0441\u043B\u0438 \u043A\u0438\u0440\u043F\u0438\u0447 \u0434\u0440\u0443\u0433\u043E\u0433\u043E \u0446\u0432\u0435\u0442\u0430, \u0442\u043E \u043C\u044F\u0447 \u043F\u0440\u0438\u043D\u0438\u043C\u0430\u0435\u0442 \u043D\u043E\u0432\u044B\u0439 \u0446\u0432\u0435\u0442, \u043D\u043E \u043A\u043E\u043C\u0431\u043E \u043E\u0431\u043D\u0443\u043B\u044F\u0435\u0442\u0441\u044F, \u0435\u0441\u043B\u0438 \u0442\u043E\u043B\u044C\u043A\u043E \u043D\u0435 \u043E\u0441\u0442\u0430\u043B\u043E\u0441\u044C \u043A\u0438\u0440\u043F\u0438\u0447\u0435\u0439 \u0442\u043E\u0433\u043E \u0436\u0435 \u0446\u0432\u0435\u0442\u0430, \u0447\u0442\u043E \u0438 \u043C\u044F\u0447.\\n\u041A\u0430\u043A \u0442\u043E\u043B\u044C\u043A\u043E \u0432\u044B \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u0435 \u043A\u043E\u043C\u0431\u043E \u0432\u044B\u0448\u0435 \u043C\u0438\u043D\u0438\u043C\u0430\u043B\u044C\u043D\u043E\u0433\u043E, \u043A\u0438\u0440\u043F\u0438\u0447\u0438 \u043D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u043E\u0433\u043E \u0446\u0432\u0435\u0442\u0430 \u0431\u0443\u0434\u0443\u0442 \u043E\u0431\u0432\u0435\u0434\u0435\u043D\u044B \u043A\u0440\u0430\u0441\u043D\u043E\u0439 \u0440\u0430\u043C\u043A\u043E\u0439.\\n\u0415\u0441\u043B\u0438 \u0443 \u0432\u0430\u0441 \u0431\u043E\u043B\u044C\u0448\u0435 \u043E\u0434\u043D\u043E\u0433\u043E \u0448\u0430\u0440\u0430, \u043E\u043D\u0438 \u0432\u0441\u0435 \u043C\u0435\u043D\u044F\u044E\u0442 \u0446\u0432\u0435\u0442, \u043A\u043E\u0433\u0434\u0430 \u043E\u0434\u0438\u043D \u0438\u0437 \u043D\u0438\u0445 \u043F\u043E\u043F\u0430\u0434\u0430\u0435\u0442 \u0432 \u043A\u0438\u0440\u043F\u0438\u0447.","upgrades.pierce.name":"\u041F\u0438\u0440\u0441\u0438\u043D\u0433","upgrades.pierce.tooltip":"\u041C\u044F\u0447 \u043F\u0440\u043E\u0431\u0438\u0432\u0430\u0435\u0442 {{count}} \u043A\u0438\u0440\u043F\u0438\u0447\u0435\u0439 \u043F\u043E\u0441\u043B\u0435 \u043E\u0442\u0441\u043A\u043E\u043A\u0430 \u043E\u0442 \u043F\u043B\u043E\u0449\u0430\u0434\u043A\u0438","upgrades.pierce.verbose_description":"\u041E\u0431\u044B\u0447\u043D\u043E \u043C\u044F\u0447 \u043E\u0442\u0441\u043A\u0430\u043A\u0438\u0432\u0430\u0435\u0442, \u043A\u0430\u043A \u0442\u043E\u043B\u044C\u043A\u043E \u043A\u043E\u0441\u043D\u0435\u0442\u0441\u044F \u0447\u0435\u0433\u043E-\u043D\u0438\u0431\u0443\u0434\u044C. \u0421 \u044D\u0442\u0438\u043C \u043F\u0440\u0435\u0438\u043C\u0443\u0449\u0435\u0441\u0442\u0432\u043E\u043C \u043E\u043D \u0431\u0443\u0434\u0435\u0442 \u043F\u0440\u043E\u0434\u043E\u043B\u0436\u0430\u0442\u044C \u0434\u0432\u0438\u0433\u0430\u0442\u044C\u0441\u044F \u043F\u043E \u0442\u0440\u0430\u0435\u043A\u0442\u043E\u0440\u0438\u0438 \u0434\u043E 3 \u0440\u0430\u0437\u0431\u0438\u0442\u044B\u0445 \u043A\u0438\u0440\u043F\u0438\u0447\u0435\u0439.\\n\\n\u041F\u043E\u0441\u043B\u0435 \u044D\u0442\u043E\u0433\u043E \u043E\u043D \u043E\u0442\u0441\u043A\u043E\u0447\u0438\u0442 \u043D\u0430 4-\u043C \u043A\u0438\u0440\u043F\u0438\u0447\u0435, \u0438 \u0432\u0430\u043C \u043D\u0443\u0436\u043D\u043E \u0431\u0443\u0434\u0435\u0442 \u043A\u043E\u0441\u043D\u0443\u0442\u044C\u0441\u044F \u043B\u043E\u043F\u0430\u0442\u043A\u0438, \u0447\u0442\u043E\u0431\u044B \u0441\u0431\u0440\u043E\u0441\u0438\u0442\u044C \u0441\u0447\u0435\u0442\u0447\u0438\u043A.","upgrades.pierce_color.name":"\u0426\u0432\u0435\u0442\u043D\u043E\u0439 \u043F\u0438\u0440\u0441\u0438\u043D\u0433","upgrades.pierce_color.tooltip":"+{{lvl}} \u0443\u0440\u043E\u043D\u0430 \u043A\u0438\u0440\u043F\u0438\u0447\u0430\u043C \u0446\u0432\u0435\u0442\u0430 \u0448\u0430\u0440\u0430","upgrades.pierce_color.verbose_description":"\u0415\u0441\u043B\u0438 \u0448\u0430\u0440\u0438\u043A \u043F\u043E\u043F\u0430\u0434\u0430\u0435\u0442 \u0432 \u043A\u0438\u0440\u043F\u0438\u0447 \u0442\u043E\u0433\u043E \u0436\u0435 \u0446\u0432\u0435\u0442\u0430, \u043E\u043D \u043F\u0440\u043E\u0441\u0442\u043E \u0431\u0435\u0441\u043F\u0440\u0435\u043F\u044F\u0442\u0441\u0442\u0432\u0435\u043D\u043D\u043E \u043F\u0440\u043E\u0445\u043E\u0434\u0438\u0442 \u0441\u043A\u0432\u043E\u0437\u044C \u043D\u0435\u0433\u043E.\\n\\n\u0415\u0441\u043B\u0438 \u043E\u043D \u043F\u043E\u043F\u0430\u0434\u0435\u0442 \u0432 \u043A\u0438\u0440\u043F\u0438\u0447 \u0434\u0440\u0443\u0433\u043E\u0433\u043E \u0446\u0432\u0435\u0442\u0430, \u0442\u043E \u0440\u0430\u0437\u043E\u0431\u044C\u0435\u0442 \u0435\u0433\u043E, \u0432\u043E\u0437\u044C\u043C\u0435\u0442 \u0435\u0433\u043E \u0446\u0432\u0435\u0442 \u0438 \u043E\u0442\u0441\u043A\u043E\u0447\u0438\u0442.\\n\\n\u0415\u0441\u043B\u0438 \u0443 \u0432\u0430\u0441 \u043F\u0440\u043E\u0447\u043D\u044B\u0435 \u043A\u0438\u0440\u043F\u0438\u0447\u0438, \u043C\u044F\u0447 \u0432\u0441\u0435 \u0440\u0430\u0432\u043D\u043E \u043C\u043E\u0436\u0435\u0442 \u043E\u0442\u0441\u043A\u043E\u0447\u0438\u0442\u044C \u043E\u0442 \u043A\u0438\u0440\u043F\u0438\u0447\u0430 \u0442\u043E\u0433\u043E \u0436\u0435 \u0446\u0432\u0435\u0442\u0430.","upgrades.puck_repulse_ball.help_plural":"\u0411\u043E\u043B\u0435\u0435 \u0441\u0438\u043B\u044C\u043D\u044B\u0435 \u0441\u0438\u043B\u044B \u043E\u0442\u0442\u0430\u043B\u043A\u0438\u0432\u0430\u043D\u0438\u044F","upgrades.puck_repulse_ball.name":"\u041C\u044F\u0433\u043A\u0430\u044F \u043F\u043E\u0441\u0430\u0434\u043A\u0430","upgrades.puck_repulse_ball.tooltip":"\u041B\u043E\u043F\u0430\u0441\u0442\u044C \u043E\u0442\u0442\u0430\u043B\u043A\u0438\u0432\u0430\u0435\u0442 \u043C\u044F\u0447\u0438","upgrades.puck_repulse_ball.verbose_description":"\u041A\u043E\u0433\u0434\u0430 \u043C\u044F\u0447 \u043F\u0440\u0438\u0431\u043B\u0438\u0437\u0438\u0442\u0441\u044F \u043A \u043B\u043E\u043F\u0430\u0442\u043A\u0435, \u043E\u043D \u043D\u0430\u0447\u043D\u0435\u0442 \u0437\u0430\u043C\u0435\u0434\u043B\u044F\u0442\u044C\u0441\u044F \u0438 \u0434\u0430\u0436\u0435 \u043C\u043E\u0436\u0435\u0442 \u043E\u0442\u0441\u043A\u043E\u0447\u0438\u0442\u044C, \u043D\u0435 \u043A\u043E\u0441\u043D\u0443\u0432\u0448\u0438\u0441\u044C \u043B\u043E\u043F\u0430\u0442\u043A\u0438.","upgrades.rainbow.name":"\u0420\u0430\u0434\u0443\u0433\u0430","upgrades.rainbow.tooltip":"\u041C\u043E\u043D\u0435\u0442\u044B \u0441\u043F\u0430\u0443\u043D\u044F\u0442\u0441\u044F \u0441 \u0440\u0430\u0434\u0443\u0436\u043D\u044B\u043C \u0446\u0432\u0435\u0442\u043E\u043C.","upgrades.rainbow.verbose_description":"\u0421 \u043A\u0430\u0436\u0434\u044B\u043C \u0443\u0440\u043E\u0432\u043D\u0435\u043C \u0443\u0432\u0435\u043B\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044F \u0434\u043E\u043B\u044F \u0446\u0432\u0435\u0442\u043D\u044B\u0445 \u043C\u043E\u043D\u0435\u0442. \u0426\u0432\u0435\u0442 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043E\u0442 \u0432\u0440\u0435\u043C\u0435\u043D\u0438 \u043F\u0440\u043E\u0445\u043E\u0436\u0434\u0435\u043D\u0438\u044F \u0443\u0440\u043E\u0432\u043D\u044F.","upgrades.reach.name":"\u0421\u0432\u0435\u0440\u0445\u0443 \u0432\u043D\u0438\u0437","upgrades.reach.tooltip":" \u041F\u0440\u0438\u043A\u043E\u0441\u043D\u043E\u0432\u0435\u043D\u0438\u0435 \u043A N \u043A\u0438\u0440\u043F\u0438\u0447\u0430\u043C \u0441\u0430\u043C\u043E\u0433\u043E \u043D\u0438\u0436\u043D\u0435\u0433\u043E \u0440\u044F\u0434\u0430 \u0441\u0431\u0440\u0430\u0441\u044B\u0432\u0430\u0435\u0442 \u043A\u043E\u043C\u0431\u043E. \u0412 \u043F\u0440\u043E\u0442\u0438\u0432\u043D\u043E\u043C \u0441\u043B\u0443\u0447\u0430\u0435 +N \u043A\u043E\u043C\u0431\u043E","upgrades.reach.verbose_description":"\u0415\u0441\u043B\u0438 \u0435\u0441\u0442\u044C \u0442\u043E\u043B\u044C\u043A\u043E \u043E\u0434\u0438\u043D \u0440\u044F\u0434 \u043A\u0438\u0440\u043F\u0438\u0447\u0435\u0439 \u0438\u043B\u0438 \u0435\u0441\u043B\u0438 \u0441\u0430\u043C\u044B\u0439 \u043D\u0438\u0436\u043D\u0438\u0439 \u0440\u044F\u0434 \u043A\u0438\u0440\u043F\u0438\u0447\u0435\u0439 \u0437\u0430\u043D\u0438\u043C\u0430\u0435\u0442 \u0432\u0441\u044E \u0448\u0438\u0440\u0438\u043D\u0443 \u0438\u0433\u0440\u044B, \u0442\u043E \u044D\u0442\u043E\u0442 \u043F\u0435\u0440\u043A \u043D\u0438\u0447\u0435\u0433\u043E \u043D\u0435 \u0434\u0435\u043B\u0430\u0435\u0442. \u0412 \u043F\u0440\u043E\u0442\u0438\u0432\u043D\u043E\u043C \u0441\u043B\u0443\u0447\u0430\u0435, \u0440\u0430\u0437\u0431\u0438\u0432 \u044D\u0442\u043E\u0442 \u0441\u0430\u043C\u044B\u0439 \u043D\u0438\u0436\u043D\u0438\u0439 \u0440\u044F\u0434, \u0432\u044B \u0441\u0431\u0440\u0430\u0441\u044B\u0432\u0430\u0435\u0442\u0435 \u043A\u043E\u043C\u0431\u043E, \u0430 \u0440\u0430\u0437\u0431\u0438\u0432 \u043B\u044E\u0431\u043E\u0439 \u0434\u0440\u0443\u0433\u043E\u0439, \u0443\u0432\u0435\u043B\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0435 \u043A\u043E\u043C\u0431\u043E \u043D\u0430 \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u043A\u0438\u0440\u043F\u0438\u0447\u0435\u0439 \u0432 \u044D\u0442\u043E\u043C \u0441\u0430\u043C\u043E\u043C \u043D\u0438\u0436\u043D\u0435\u043C \u0440\u044F\u0434\u0443.\\n\\n\u0421\u0430\u043C\u044B\u0439 \u043D\u0438\u0436\u043D\u0438\u0439 \u0440\u044F\u0434 \u0431\u0443\u0434\u0435\u0442 \u0432\u044B\u0434\u0435\u043B\u0435\u043D \u043A\u0440\u0430\u0441\u043D\u044B\u043C \u0446\u0432\u0435\u0442\u043E\u043C.","upgrades.respawn.name":"\u041F\u0435\u0440\u0435\u0440\u043E\u0436\u0434\u0435\u043D\u0438\u0435","upgrades.respawn.tooltip":"{{percent}}% \u043A\u0438\u0440\u043F\u0438\u0447\u0435\u0439 \u043F\u0435\u0440\u0435\u0440\u043E\u0436\u0434\u0430\u044E\u0442\u0441\u044F \u0447\u0435\u0440\u0435\u0437 {{delay}}\u0441.","upgrades.respawn.verbose_description":"\u041D\u0435\u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u044D\u0444\u0444\u0435\u043A\u0442\u044B \u0447\u0430\u0441\u0442\u0438\u0446 \u043F\u043E\u0437\u0432\u043E\u043B\u044F\u0442 \u0432\u0430\u043C \u0443\u0437\u043D\u0430\u0442\u044C, \u0433\u0434\u0435 \u0431\u0443\u0434\u0443\u0442 \u043F\u043E\u044F\u0432\u043B\u044F\u0442\u044C\u0441\u044F \u043A\u0438\u0440\u043F\u0438\u0447\u0438.","upgrades.right_is_lava.name":"\u0418\u0437\u0431\u0435\u0433\u0430\u0439\u0442\u0435 \u043F\u0440\u0430\u0432\u043E\u0439 \u0441\u0442\u043E\u0440\u043E\u043D\u044B","upgrades.right_is_lava.tooltip":"+{{lvl}} \u043A\u043E\u043C\u0431\u043E \u043D\u0430 \u043A\u0438\u0440\u043F\u0438\u0447. \u041A\u043E\u043C\u0431\u043E \u0441\u0431\u0440\u0430\u0441\u044B\u0432\u0430\u0435\u0442\u0441\u044F, \u0435\u0441\u043B\u0438 \u043C\u044F\u0447 \u043F\u043E\u043F\u0430\u0434\u0430\u0435\u0442 \u0432 \u043F\u0440\u0430\u0432\u0443\u044E \u0447\u0430\u0441\u0442\u044C \u044D\u043A\u0440\u0430\u043D\u0430","upgrades.right_is_lava.verbose_description":"\u041A\u0430\u0436\u0434\u044B\u0439 \u0440\u0430\u0437, \u043A\u043E\u0433\u0434\u0430 \u0432\u044B \u0440\u0430\u0437\u0431\u0438\u0432\u0430\u0435\u0442\u0435 \u043A\u0438\u0440\u043F\u0438\u0447, \u0432\u0430\u0448\u0435 \u043A\u043E\u043C\u0431\u043E \u0443\u0432\u0435\u043B\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044F \u043D\u0430 \u043E\u0434\u0438\u043D, \u0442\u0430\u043A \u0447\u0442\u043E \u0432\u044B \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u0435 \u043D\u0430 \u043E\u0434\u043D\u0443 \u043C\u043E\u043D\u0435\u0442\u0443 \u0431\u043E\u043B\u044C\u0448\u0435 \u0441\u043E \u0432\u0441\u0435\u0445 \u0441\u043B\u0435\u0434\u0443\u044E\u0449\u0438\u0445 \u0440\u0430\u0437\u0431\u0438\u0442\u044B\u0445 \u043A\u0438\u0440\u043F\u0438\u0447\u0435\u0439.\\n\\n\u041E\u0434\u043D\u0430\u043A\u043E, \u043A\u0430\u043A \u0442\u043E\u043B\u044C\u043A\u043E \u0432\u0430\u0448 \u0448\u0430\u0440\u0438\u043A \u043F\u043E\u043F\u0430\u0434\u0435\u0442 \u0432 \u043F\u0440\u0430\u0432\u0443\u044E \u0441\u0442\u043E\u0440\u043E\u043D\u0443, \u0432\u0430\u0448\u0430 \u043A\u043E\u043C\u0431\u0438\u043D\u0430\u0446\u0438\u044F \u043E\u0431\u043D\u0443\u043B\u0438\u0442\u0441\u044F.\\n\\n\u041A\u0430\u043A \u0442\u043E\u043B\u044C\u043A\u043E \u0432\u0430\u0448\u0435 \u043A\u043E\u043C\u0431\u043E \u0443\u0432\u0435\u043B\u0438\u0447\u0438\u0442\u0441\u044F, \u043F\u0440\u0430\u0432\u0430\u044F \u0441\u0442\u043E\u0440\u043E\u043D\u0430 \u0441\u0442\u0430\u043D\u0435\u0442 \u043A\u0440\u0430\u0441\u043D\u043E\u0439, \u0447\u0442\u043E\u0431\u044B \u043D\u0430\u043F\u043E\u043C\u043D\u0438\u0442\u044C \u0432\u0430\u043C, \u0447\u0442\u043E \u0432\u044B \u0434\u043E\u043B\u0436\u043D\u044B \u0438\u0437\u0431\u0435\u0433\u0430\u0442\u044C \u0441\u0442\u043E\u043B\u043A\u043D\u043E\u0432\u0435\u043D\u0438\u044F \u0441 \u043D\u0435\u0439.\\n","upgrades.sacrifice.help_l1":"\u041F\u043E\u0442\u0435\u0440\u044F \u0436\u0438\u0437\u043D\u0438 \u043E\u0447\u0438\u0449\u0430\u0435\u0442 \u0432\u0441\u0435 \u043A\u0438\u0440\u043F\u0438\u0447\u0438","upgrades.sacrifice.help_over":"\u041F\u043E\u0442\u0435\u0440\u044F\u0432 \u0436\u0438\u0437\u043D\u044C {{lvl}}x, \u043A\u043E\u043C\u0431\u043E \u0437\u0430\u0442\u0435\u043C \u043E\u0447\u0438\u0449\u0430\u0435\u0442 \u0432\u0441\u0435 \u043A\u0438\u0440\u043F\u0438\u0447\u0438.","upgrades.sacrifice.name":"\u0416\u0435\u0440\u0442\u0432\u043E\u043F\u0440\u0438\u043D\u043E\u0448\u0435\u043D\u0438\u0435","upgrades.sacrifice.verbose_description":"\u042D\u0442\u043E \u043C\u043E\u0436\u0435\u0442 \u043F\u043E\u0434\u043D\u044F\u0442\u044C \u043A\u043E\u043C\u0431\u043E \u0434\u043E\u0432\u043E\u043B\u044C\u043D\u043E \u0432\u044B\u0441\u043E\u043A\u043E.","upgrades.sapper.help_plural":"\u041F\u0435\u0440\u0432\u044B\u0435 \u0440\u0430\u0437\u0431\u0438\u0442\u044B\u0435 {{lvl}} \u043A\u0438\u0440\u043F\u0438\u0447\u0435\u0439 \u0441\u0442\u0430\u043D\u043E\u0432\u044F\u0442\u0441\u044F \u0431\u043E\u043C\u0431\u0430\u043C\u0438.","upgrades.sapper.name":"\u0421\u0430\u043F\u0451\u0440","upgrades.sapper.tooltip":"\u041F\u0435\u0440\u0432\u044B\u0439 \u0440\u0430\u0437\u0431\u0438\u0442\u044B\u0439 \u043A\u0438\u0440\u043F\u0438\u0447 \u043F\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044F \u0432 \u0431\u043E\u043C\u0431\u0443.","upgrades.sapper.verbose_description":"\u0412\u043C\u0435\u0441\u0442\u043E \u0442\u043E\u0433\u043E \u0447\u0442\u043E\u0431\u044B \u043F\u0440\u043E\u0441\u0442\u043E \u0438\u0441\u0447\u0435\u0437\u043D\u0443\u0442\u044C, \u043F\u0435\u0440\u0432\u044B\u0439 \u0440\u0430\u0437\u0431\u0438\u0442\u044B\u0439 \u0432\u0430\u043C\u0438 \u043A\u0438\u0440\u043F\u0438\u0447 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043C\u0435\u043D\u0435\u043D \u043A\u0438\u0440\u043F\u0438\u0447\u043E\u043C \u0441 \u0431\u043E\u043C\u0431\u043E\u0439. \u0415\u0441\u043B\u0438 \u0443\u0434\u0430\u0440\u0438\u0442\u044C \u043C\u044F\u0447\u043E\u043C \u043F\u043E \u043B\u043E\u043F\u0430\u0442\u043A\u0435, \u044D\u0444\u0444\u0435\u043A\u0442 \u043F\u043E\u0432\u0442\u043E\u0440\u0438\u0442\u0441\u044F. \u041F\u043E\u0432\u044B\u0441\u0438\u0432 \u0443\u0440\u043E\u0432\u0435\u043D\u044C \u044D\u0442\u043E\u0433\u043E \u0443\u043C\u0435\u043D\u0438\u044F, \u0432\u044B \u0441\u043C\u043E\u0436\u0435\u0442\u0435 \u0443\u0441\u0442\u0430\u043D\u0430\u0432\u043B\u0438\u0432\u0430\u0442\u044C \u0431\u043E\u043B\u044C\u0448\u0435 \u0431\u043E\u043C\u0431.","upgrades.shocks.name":"\u0428\u043E\u043A\u0438","upgrades.shocks.tooltip":"\u0412\u0437\u0440\u044B\u0432\u043D\u044B\u0435 \u0441\u0442\u043E\u043B\u043A\u043D\u043E\u0432\u0435\u043D\u0438\u044F \u0448\u0430\u0440\u043E\u0432","upgrades.shocks.verbose_description":"\u041A\u043E\u0433\u0434\u0430 \u0434\u0432\u0430 \u0448\u0430\u0440\u0430 \u0441\u0442\u0430\u043B\u043A\u0438\u0432\u0430\u044E\u0442\u0441\u044F, \u043E\u043D\u0438 \u043E\u0431\u043C\u0435\u043D\u0438\u0432\u0430\u044E\u0442\u0441\u044F \u0441\u043A\u043E\u0440\u043E\u0441\u0442\u044C\u044E, \u043F\u043E\u0440\u043E\u0436\u0434\u0430\u044E\u0442 \u0432\u0437\u0440\u044B\u0432 \u0438 \u043D\u0430\u0431\u0438\u0440\u0430\u044E\u0442 \u0434\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u0443\u044E \u0441\u043A\u043E\u0440\u043E\u0441\u0442\u044C, \u0447\u0442\u043E\u0431\u044B \u0440\u0430\u0437\u0434\u0435\u043B\u0438\u0442\u044C\u0441\u044F.","upgrades.shunt.name":"\u0428\u0443\u043D\u0442","upgrades.shunt.tooltip":"\u0421\u043E\u0445\u0440\u0430\u043D\u044F\u0439\u0442\u0435 {{percent}}% \u0432\u0430\u0448\u0435\u0433\u043E \u043A\u043E\u043C\u0431\u043E \u043C\u0435\u0436\u0434\u0443 \u0443\u0440\u043E\u0432\u043D\u044F\u043C\u0438","upgrades.shunt.verbose_description":"\u0415\u0441\u043B\u0438 \u0443 \u0432\u0430\u0441 \u0442\u0430\u043A\u0436\u0435 \u0435\u0441\u0442\u044C \u0433\u043E\u0440\u044F\u0447\u0438\u0439 \u0441\u0442\u0430\u0440\u0442, \u0433\u043E\u0440\u044F\u0447\u0438\u0439 \u0441\u0442\u0430\u0440\u0442 \u043F\u0440\u043E\u0441\u0442\u043E \u0434\u043E\u0431\u0430\u0432\u043B\u044F\u0435\u0442\u0441\u044F \u043A \u0442\u0435\u043A\u0443\u0449\u0435\u043C\u0443 \u043A\u043E\u043C\u0431\u043E.","upgrades.side_flip.name":"\u041F\u0440\u0430\u0432\u0430\u044F \u0440\u0443\u043A\u0430","upgrades.side_flip.tooltip":"+{{lvl}} \u043A\u043E\u043C\u0431\u043E \u0437\u0430 \u043A\u0430\u0436\u0434\u044B\u0439 \u043A\u0438\u0440\u043F\u0438\u0447, \u0440\u0430\u0437\u0431\u0438\u0442\u044B\u0439 \u0441\u043F\u0440\u0430\u0432\u0430, -{{loss}} \u0432 \u043F\u0440\u043E\u0442\u0438\u0432\u043D\u043E\u043C \u0441\u043B\u0443\u0447\u0430\u0435","upgrades.side_flip.verbose_description":"\u0423\u0434\u0430\u0440\u044C\u0442\u0435 \u043A\u0438\u0440\u043F\u0438\u0447 \u0441 \u043F\u0440\u0430\u0432\u043E\u0439 \u0441\u0442\u043E\u0440\u043E\u043D\u044B, \u0447\u0442\u043E\u0431\u044B \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C \u043E\u0434\u043D\u043E \u043A\u043E\u043C\u0431\u043E, \u043D\u043E \u0438\u0437\u0431\u0435\u0433\u0430\u0439\u0442\u0435 \u0443\u0434\u0430\u0440\u043E\u0432 \u0441 \u043B\u0435\u0432\u043E\u0439 \u0441\u0442\u043E\u0440\u043E\u043D\u044B, \u0442\u0430\u043A \u043A\u0430\u043A \u044D\u0442\u043E \u0441\u043D\u0438\u043C\u0435\u0442 2 \u043A\u043E\u043C\u0431\u043E. \u0423\u0434\u0430\u0440\u044B \u0441\u0432\u0435\u0440\u0445\u0443 \u0438 \u0441\u043D\u0438\u0437\u0443 \u043D\u0435 \u0434\u0430\u044E\u0442 \u043D\u0438\u043A\u0430\u043A\u043E\u0433\u043E \u044D\u0444\u0444\u0435\u043A\u0442\u0430.","upgrades.side_kick.name":"\u041B\u0435\u0432\u0430\u044F \u0440\u0443\u043A\u0430","upgrades.side_kick.tooltip":"+{{lvl}} \u043A\u043E\u043C\u0431\u043E \u0437\u0430 \u043A\u0430\u0436\u0434\u044B\u0439 \u043A\u0438\u0440\u043F\u0438\u0447, \u0440\u0430\u0437\u0431\u0438\u0442\u044B\u0439 \u0441\u043B\u0435\u0432\u0430, -{{loss}} \u0432 \u043F\u0440\u043E\u0442\u0438\u0432\u043D\u043E\u043C \u0441\u043B\u0443\u0447\u0430\u0435","upgrades.side_kick.verbose_description":"\u0423\u0434\u0430\u0440\u044C\u0442\u0435 \u043A\u0438\u0440\u043F\u0438\u0447 \u0441 \u043B\u0435\u0432\u043E\u0439 \u0441\u0442\u043E\u0440\u043E\u043D\u044B, \u0447\u0442\u043E\u0431\u044B \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C \u043E\u0434\u043D\u043E \u043A\u043E\u043C\u0431\u043E, \u043D\u043E \u0438\u0437\u0431\u0435\u0433\u0430\u0439\u0442\u0435 \u0443\u0434\u0430\u0440\u043E\u0432 \u0441 \u043F\u0440\u0430\u0432\u043E\u0439 \u0441\u0442\u043E\u0440\u043E\u043D\u044B, \u0442\u0430\u043A \u043A\u0430\u043A \u044D\u0442\u043E \u0441\u043D\u0438\u043C\u0435\u0442 2 \u043A\u043E\u043C\u0431\u043E. \u0423\u0434\u0430\u0440\u044B \u0441\u0432\u0435\u0440\u0445\u0443 \u0438 \u0441\u043D\u0438\u0437\u0443 \u043D\u0435 \u0434\u0430\u044E\u0442 \u043D\u0438\u043A\u0430\u043A\u043E\u0433\u043E \u044D\u0444\u0444\u0435\u043A\u0442\u0430.","upgrades.skip_last.help_plural":"\u041F\u043E\u0441\u043B\u0435\u0434\u043D\u0438\u0435 {{lvl}} \u043A\u0438\u0440\u043F\u0438\u0447\u0435\u0439 \u0432\u0437\u043E\u0440\u0432\u0443\u0442\u0441\u044F.","upgrades.skip_last.name":"\u041B\u0435\u0433\u043A\u0430\u044F \u043E\u0447\u0438\u0441\u0442\u043A\u0430","upgrades.skip_last.tooltip":"\u041F\u043E\u0441\u043B\u0435\u0434\u043D\u0438\u0439 \u043A\u0438\u0440\u043F\u0438\u0447 \u0432\u0437\u043E\u0440\u0432\u0435\u0442\u0441\u044F.","upgrades.skip_last.verbose_description":"\u0412\u0430\u043C \u043D\u0443\u0436\u043D\u043E \u0440\u0430\u0437\u0431\u0438\u0442\u044C \u0432\u0441\u0435 \u043A\u0438\u0440\u043F\u0438\u0447\u0438, \u0447\u0442\u043E\u0431\u044B \u043F\u0435\u0440\u0435\u0439\u0442\u0438 \u043D\u0430 \u0441\u043B\u0435\u0434\u0443\u044E\u0449\u0438\u0439 \u0443\u0440\u043E\u0432\u0435\u043D\u044C. \u041E\u0434\u043D\u0430\u043A\u043E \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0438\u0435 \u043C\u043E\u0436\u0435\u0442 \u0431\u044B\u0442\u044C \u043D\u0435\u043F\u0440\u043E\u0441\u0442\u043E.\\n\\n\u0420\u0430\u043D\u043D\u0435\u0435 \u043F\u0440\u043E\u0445\u043E\u0436\u0434\u0435\u043D\u0438\u0435 \u0443\u0440\u043E\u0432\u043D\u044F \u0434\u0430\u0435\u0442 \u0434\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u044B\u0435 \u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E\u0441\u0442\u0438 \u043F\u0440\u0438 \u0443\u043B\u0443\u0447\u0448\u0435\u043D\u0438\u0438. \u041D\u0438\u043A\u043E\u0433\u0434\u0430 \u043D\u0435 \u043F\u0440\u043E\u043F\u0443\u0441\u043A\u0430\u0442\u044C \u043A\u0438\u0440\u043F\u0438\u0447\u0438 \u0442\u0430\u043A\u0436\u0435 \u043E\u0447\u0435\u043D\u044C \u043F\u043E\u043B\u0435\u0437\u043D\u043E.\\n\\n\u0422\u0430\u043A \u0447\u0442\u043E \u0435\u0441\u043B\u0438 \u0432\u0430\u043C \u0442\u0440\u0443\u0434\u043D\u043E \u0440\u0430\u0437\u0431\u0438\u0442\u044C \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0438\u0435 \u043A\u0438\u0440\u043F\u0438\u0447\u0438, \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u0435 \u044D\u0442\u0443 \u043F\u0440\u0438\u0432\u0438\u043B\u0435\u0433\u0438\u044E \u043D\u0435\u0441\u043A\u043E\u043B\u044C\u043A\u043E \u0440\u0430\u0437.","upgrades.slow_down.name":"\u041C\u0435\u0434\u043B\u0435\u043D\u043D\u044B\u0439 \u043C\u044F\u0447","upgrades.slow_down.tooltip":"\u041C\u044F\u0447 \u0434\u0432\u0438\u0436\u0435\u0442\u0441\u044F \u043C\u0435\u0434\u043B\u0435\u043D\u043D\u0435\u0435","upgrades.slow_down.verbose_description":"\u041C\u044F\u0447 \u0441\u0442\u0430\u0440\u0442\u0443\u0435\u0442 \u043E\u0442\u043D\u043E\u0441\u0438\u0442\u0435\u043B\u044C\u043D\u043E \u043C\u0435\u0434\u043B\u0435\u043D\u043D\u043E, \u043D\u043E \u0441 \u043A\u0430\u0436\u0434\u044B\u043C \u0443\u0440\u043E\u0432\u043D\u0435\u043C \u0432\u0430\u0448\u0435\u0439 \u0438\u0433\u0440\u044B \u043E\u043D \u0431\u0443\u0434\u0435\u0442 \u0441\u0442\u0430\u0440\u0442\u043E\u0432\u0430\u0442\u044C \u0432\u0441\u0435 \u0431\u044B\u0441\u0442\u0440\u0435\u0435.\\n\\n\u041E\u043D \u0442\u0430\u043A\u0436\u0435 \u0443\u0441\u043A\u043E\u0440\u0438\u0442\u0441\u044F, \u0435\u0441\u043B\u0438 \u0432\u044B \u043F\u0440\u043E\u0432\u0435\u0434\u0435\u0442\u0435 \u043C\u043D\u043E\u0433\u043E \u0432\u0440\u0435\u043C\u0435\u043D\u0438 \u043D\u0430 \u043E\u0434\u043D\u043E\u043C \u0443\u0440\u043E\u0432\u043D\u0435.\\n\\n\u042D\u0442\u043E \u043F\u0440\u0435\u0438\u043C\u0443\u0449\u0435\u0441\u0442\u0432\u043E \u0434\u0435\u043B\u0430\u0435\u0442 \u0435\u0433\u043E \u0431\u043E\u043B\u0435\u0435 \u0443\u043F\u0440\u0430\u0432\u043B\u044F\u0435\u043C\u044B\u043C.\\n\\n\u0412\u044B \u043C\u043E\u0436\u0435\u0442\u0435 \u043F\u043E\u043B\u0443\u0447\u0430\u0442\u044C \u0435\u0433\u043E \u043A\u0430\u0436\u0434\u044B\u0439 \u0440\u0430\u0437 \u0432 \u043D\u0430\u0447\u0430\u043B\u0435 \u0438\u0433\u0440\u044B, \u0432\u043A\u043B\u044E\u0447\u0438\u0432 \u0434\u0435\u0442\u0441\u043A\u0438\u0439 \u0440\u0435\u0436\u0438\u043C \u0432 \u043C\u0435\u043D\u044E.","upgrades.smaller_puck.help_plural":"\u0415\u0449\u0435 \u043C\u0435\u043D\u044C\u0448\u0435\u0435 \u0432\u0435\u0441\u043B\u043E \u0438 \u0431\u043E\u043B\u0435\u0435 \u0432\u044B\u0441\u043E\u043A\u0438\u0439 \u0431\u0430\u0437\u043E\u0432\u044B\u0439 \u043A\u043E\u043C\u0431\u043E","upgrades.smaller_puck.name":"\u041C\u0430\u043B\u0435\u043D\u044C\u043A\u043E\u0435 \u0432\u0435\u0441\u043B\u043E","upgrades.smaller_puck.tooltip":"\u0422\u0430\u043A\u0436\u0435 \u0434\u0430\u0435\u0442 +5 \u0431\u0430\u0437\u043E\u0432\u044B\u0445 \u043A\u043E\u043C\u0431\u043E","upgrades.smaller_puck.verbose_description":"\u042D\u0442\u043E \u0443\u043C\u0435\u043D\u044C\u0448\u0430\u0435\u0442 \u0440\u0430\u0437\u043C\u0435\u0440 \u043B\u0435\u043F\u0435\u0441\u0442\u043A\u0430, \u0447\u0442\u043E \u0442\u0435\u043E\u0440\u0435\u0442\u0438\u0447\u0435\u0441\u043A\u0438 \u043E\u0431\u043B\u0435\u0433\u0447\u0430\u0435\u0442 \u043D\u0435\u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u0443\u0433\u043B\u043E\u0432\u044B\u0435 \u0443\u0434\u0430\u0440\u044B, \u043D\u043E \u043D\u0430 \u0441\u0430\u043C\u043E\u043C \u0434\u0435\u043B\u0435 \u043B\u0438\u0448\u044C \u043F\u043E\u0432\u044B\u0448\u0430\u0435\u0442 \u0441\u043B\u043E\u0436\u043D\u043E\u0441\u0442\u044C \u0438\u0433\u0440\u044B.\\n\\n\u041F\u043E\u044D\u0442\u043E\u043C\u0443 \u0432\u044B \u0442\u0430\u043A\u0436\u0435 \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u0435 \u043F\u0440\u0438\u044F\u0442\u043D\u044B\u0439 \u0431\u043E\u043D\u0443\u0441 \u0432 \u0432\u0438\u0434\u0435 +5 \u043C\u043E\u043D\u0435\u0442 \u0437\u0430 \u043A\u0438\u0440\u043F\u0438\u0447 \u0437\u0430 \u0432\u0441\u0435 \u043A\u0438\u0440\u043F\u0438\u0447\u0438, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u0432\u044B \u0440\u0430\u0437\u043E\u0431\u044C\u0435\u0442\u0435 \u043F\u043E\u0441\u043B\u0435 \u044D\u0442\u043E\u0433\u043E.","upgrades.soft_reset.name":"\u041C\u044F\u0433\u043A\u0438\u0439 \u0441\u0431\u0440\u043E\u0441","upgrades.soft_reset.tooltip":"\u041A\u043E\u043C\u0431\u043E-\u0441\u0431\u0440\u043E\u0441 \u0441\u043E\u0445\u0440\u0430\u043D\u044F\u0435\u0442 {{percent}}%","upgrades.soft_reset.verbose_description":"\u041E\u0433\u0440\u0430\u043D\u0438\u0447\u044C\u0442\u0435 \u0432\u043B\u0438\u044F\u043D\u0438\u0435 \u043A\u043E\u043C\u0431\u043E-\u0441\u0431\u0440\u043E\u0441\u0430.","upgrades.streak_shots.name":"\u041F\u043E\u043F\u0430\u0434\u0430\u043D\u0438\u0435 \u0432 \u043F\u043E\u043B\u043E\u0441\u0443","upgrades.streak_shots.tooltip":"\u0411\u043E\u043B\u044C\u0448\u0435 \u043C\u043E\u043D\u0435\u0442, \u0435\u0441\u043B\u0438 \u0432\u044B \u0440\u0430\u0437\u043E\u0431\u044C\u0435\u0442\u0435 \u043C\u043D\u043E\u0433\u043E \u043A\u0438\u0440\u043F\u0438\u0447\u0435\u0439, \u043F\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043C \u043F\u043E\u0434\u043F\u0440\u044B\u0433\u043D\u0443\u0442\u044C \u043D\u0430 \u043B\u043E\u043F\u0430\u0442\u043A\u0435.","upgrades.streak_shots.verbose_description":"\u041A\u0430\u0436\u0434\u044B\u0439 \u0440\u0430\u0437, \u043A\u043E\u0433\u0434\u0430 \u0432\u044B \u0440\u0430\u0437\u0431\u0438\u0432\u0430\u0435\u0442\u0435 \u043A\u0438\u0440\u043F\u0438\u0447, \u0432\u0430\u0448\u0435 \u043A\u043E\u043C\u0431\u043E \u0443\u0432\u0435\u043B\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044F \u043D\u0430 \u0435\u0434\u0438\u043D\u0438\u0446\u0443.\\n\\n\u041E\u0434\u043D\u0430\u043A\u043E \u043A\u0430\u043A \u0442\u043E\u043B\u044C\u043A\u043E \u043C\u044F\u0447 \u043A\u043E\u0441\u043D\u0435\u0442\u0441\u044F \u0432\u0430\u0448\u0435\u0433\u043E \u0432\u0435\u0441\u043B\u0430, \u043A\u043E\u043C\u0431\u043E \u0431\u0443\u0434\u0435\u0442 \u0441\u0431\u0440\u043E\u0448\u0435\u043D\u043E \u0434\u043E \u0441\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u043E\u0433\u043E \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F.\\n\\n\u041A\u0430\u043A \u0442\u043E\u043B\u044C\u043A\u043E \u0432\u0430\u0448\u0435 \u043A\u043E\u043C\u0431\u043E \u043F\u043E\u0434\u043D\u0438\u043C\u0435\u0442\u0441\u044F \u0432\u044B\u0448\u0435 \u0431\u0430\u0437\u043E\u0432\u043E\u0433\u043E \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F, \u043D\u0430 \u043B\u043E\u043F\u0430\u0442\u043A\u0435 \u043F\u043E\u044F\u0432\u0438\u0442\u0441\u044F \u043A\u0440\u0430\u0441\u043D\u0430\u044F \u0440\u0430\u043C\u043A\u0430, \u043D\u0430\u043F\u043E\u043C\u0438\u043D\u0430\u044E\u0449\u0430\u044F \u043E \u0442\u043E\u043C, \u0447\u0442\u043E \u043F\u0440\u0438\u043A\u043E\u0441\u043D\u043E\u0432\u0435\u043D\u0438\u0435 \u043C\u044F\u0447\u0430 \u043A \u043D\u0435\u0439 \u0443\u043D\u0438\u0447\u0442\u043E\u0436\u0438\u0442 \u0432\u0430\u0448\u0435 \u043A\u043E\u043C\u0431\u043E.","upgrades.sturdy_bricks.name":"\u041F\u0440\u043E\u0447\u043D\u044B\u0435 \u043A\u0438\u0440\u043F\u0438\u0447\u0438","upgrades.sturdy_bricks.tooltip":"+{{lvl}} \u043A\u0438\u0440\u043F\u0438\u0447\u0435\u0439 HP, +{{percent}}% \u043C\u043E\u043D\u0435\u0442, \u0432\u044B\u043F\u0430\u0434\u0430\u044E\u0449\u0438\u0445 \u043F\u0440\u0438 \u0440\u0430\u0437\u0440\u0443\u0448\u0435\u043D\u0438\u0438","upgrades.sturdy_bricks.verbose_description":"\u041A\u0430\u0436\u0434\u044B\u0439 \u0443\u0440\u043E\u0432\u0435\u043D\u044C \u044D\u0442\u043E\u0433\u043E \u043F\u0435\u0440\u043A\u0430 \u0434\u043E\u0431\u0430\u0432\u043B\u044F\u0435\u0442 \u043E\u0434\u0438\u043D HP \u043A\u043E \u0432\u0441\u0435\u043C \u043A\u0438\u0440\u043F\u0438\u0447\u0430\u043C. \u0412\u044B \u043C\u043E\u0436\u0435\u0442\u0435 \u0443\u0432\u0438\u0434\u0435\u0442\u044C \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E HP \u0441 \u043F\u043E\u043C\u043E\u0449\u044C\u044E \u043F\u0435\u0440\u043A\u0430 \\"\u042F\u0441\u043D\u043E\u0432\u0438\u0434\u044F\u0449\u0438\u0439\\". \u0412\u044B \u043C\u043E\u0436\u0435\u0442\u0435 \u0443\u0432\u0435\u043B\u0438\u0447\u0438\u0442\u044C \u0443\u0440\u043E\u043D \u043E\u0442 \u0448\u0430\u0440\u043E\u0432, \u043F\u043E\u043B\u0443\u0447\u0438\u0432 \u043F\u0435\u0440\u043A \\"\u041F\u0440\u043E\u043D\u0437\u0430\u044E\u0449\u0438\u0439\\". \u041A\u0430\u0436\u0434\u044B\u0439 \u0443\u0440\u043E\u0432\u0435\u043D\u044C \u044D\u0442\u043E\u0433\u043E \u043F\u0435\u0440\u043A\u0430 \u0434\u043E\u0431\u0430\u0432\u043B\u044F\u0435\u0442 +50% \u043A \u0441\u043F\u0430\u0443\u043D\u0443 \u043C\u043E\u043D\u0435\u0442.","upgrades.superhot.name":"\u0421\u0423\u041F\u0415\u0420 \u0413\u041E\u0420\u042F\u0427\u0418\u0419","upgrades.superhot.tooltip":"\u0412\u0440\u0435\u043C\u044F \u0434\u0432\u0438\u0436\u0435\u0442\u0441\u044F, \u043A\u043E\u0433\u0434\u0430 \u0434\u0432\u0438\u0436\u0435\u0442\u0441\u044F \u0432\u0435\u0441\u043B\u043E.","upgrades.superhot.verbose_description":"\u0421\u0423\u041F\u0415\u0420 \u0413\u041E\u0420\u042F\u0427\u0418\u0419 \u0421\u0423\u041F\u0415\u0420 \u0413\u041E\u0420\u042F\u0427\u0418\u0419 \u0421\u0423\u041F\u0415\u0420 \u0413\u041E\u0420\u042F\u0427\u0418\u0419 \u0421\u0423\u041F\u0415\u0420 \u0413\u041E\u0420\u042F\u0427\u0418\u0419","upgrades.telekinesis.help_plural":"\u0411\u043E\u043B\u0435\u0435 \u0441\u0438\u043B\u044C\u043D\u043E\u0435 \u0432\u043E\u0437\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043D\u0430 \u043C\u044F\u0447","upgrades.telekinesis.name":"\u0422\u0435\u043B\u0435\u043A\u0438\u043D\u0435\u0437","upgrades.telekinesis.tooltip":"\u041F\u0430\u0434\u0434\u043B \u0443\u043F\u0440\u0430\u0432\u043B\u044F\u0435\u0442 \u0442\u0440\u0430\u0435\u043A\u0442\u043E\u0440\u0438\u0435\u0439 \u043F\u043E\u043B\u0435\u0442\u0430 \u043C\u044F\u0447\u0430","upgrades.telekinesis.verbose_description":"\u0412\u044B \u0443\u043F\u0440\u0430\u0432\u043B\u044F\u0435\u0442\u0435 \u043C\u044F\u0447\u043E\u043C, \u043F\u043E\u043A\u0430 \u043E\u043D \u043F\u043E\u0434\u043D\u0438\u043C\u0430\u0435\u0442\u0441\u044F \u0432\u0432\u0435\u0440\u0445.","upgrades.top_is_lava.name":"\u041D\u0435\u0431\u043E - \u044D\u0442\u043E \u043F\u0440\u0435\u0434\u0435\u043B","upgrades.top_is_lava.tooltip":"+{{lvl}} \u043A\u043E\u043C\u0431\u043E \u0437\u0430 \u043A\u0438\u0440\u043F\u0438\u0447, \u0441\u0431\u0440\u0430\u0441\u044B\u0432\u0430\u0435\u0442\u0441\u044F \u043F\u0440\u0438 \u0443\u0434\u0430\u0440\u0435 \u0441\u0432\u0435\u0440\u0445\u0443","upgrades.top_is_lava.verbose_description":"\u041A\u0430\u0436\u0434\u044B\u0439 \u0440\u0430\u0437, \u043A\u043E\u0433\u0434\u0430 \u0432\u044B \u0440\u0430\u0437\u0431\u0438\u0432\u0430\u0435\u0442\u0435 \u043A\u0438\u0440\u043F\u0438\u0447, \u0432\u0430\u0448\u0435 \u043A\u043E\u043C\u0431\u043E \u0443\u0432\u0435\u043B\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044F \u043D\u0430 \u043E\u0434\u0438\u043D. \u041E\u0434\u043D\u0430\u043A\u043E, \u043A\u0430\u043A \u0442\u043E\u043B\u044C\u043A\u043E \u0432\u0430\u0448 \u043C\u044F\u0447 \u043F\u043E\u043F\u0430\u0434\u0435\u0442 \u0432 \u0432\u0435\u0440\u0445\u043D\u044E\u044E \u0447\u0430\u0441\u0442\u044C \u044D\u043A\u0440\u0430\u043D\u0430, \u043A\u043E\u043C\u0431\u043E \u043E\u0431\u043D\u0443\u043B\u044F\u0435\u0442\u0441\u044F.\\n\\n\u041A\u043E\u0433\u0434\u0430 \u0432\u0430\u0448\u0435 \u043A\u043E\u043C\u0431\u043E \u043F\u0440\u0435\u0432\u044B\u0441\u0438\u0442 \u043C\u0438\u043D\u0438\u043C\u0430\u043B\u044C\u043D\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435, \u0432\u0432\u0435\u0440\u0445\u0443 \u043F\u043E\u044F\u0432\u0438\u0442\u0441\u044F \u043A\u0440\u0430\u0441\u043D\u0430\u044F \u043F\u043E\u043B\u043E\u0441\u043A\u0430, \u043D\u0430\u043F\u043E\u043C\u0438\u043D\u0430\u044E\u0449\u0430\u044F \u043E \u0442\u043E\u043C, \u0447\u0442\u043E \u0432\u0430\u043C \u0441\u043B\u0435\u0434\u0443\u0435\u0442 \u0438\u0437\u0431\u0435\u0433\u0430\u0442\u044C \u0443\u0434\u0430\u0440\u043E\u0432.","upgrades.trampoline.name":"\u0411\u0430\u0442\u0443\u0442","upgrades.trampoline.tooltip":"+{{lvl}} \u043A\u043E\u043C\u0431\u043E \u0437\u0430 \u043E\u0442\u0441\u043A\u043E\u043A, -{{lvl}} \u043A\u043E\u043C\u0431\u043E \u0437\u0430 \u043E\u0442\u0441\u043A\u043E\u043A \u043D\u0430 \u043B\u044E\u0431\u043E\u0439 \u0433\u0440\u0430\u043D\u0438\u0446\u0435","upgrades.trampoline.verbose_description":"\u041E\u0434\u043D\u043E \u0438\u0437 \u0440\u0435\u0434\u043A\u0438\u0445 \u043A\u043E\u043C\u0431\u043E-\u0443\u043B\u0443\u0447\u0448\u0435\u043D\u0438\u0439, \u043A\u043E\u0442\u043E\u0440\u043E\u0435 \u043D\u0435 \u0434\u043E\u0431\u0430\u0432\u043B\u044F\u0435\u0442 \u0443\u0441\u043B\u043E\u0432\u0438\u0435 \u0441\u0431\u0440\u043E\u0441\u0430.","upgrades.transparency.name":"\u041F\u0440\u043E\u0437\u0440\u0430\u0447\u043D\u043E\u0441\u0442\u044C","upgrades.transparency.tooltip":"\u0427\u0435\u043C \u0432\u044B\u0448\u0435 \u0448\u0430\u0440\u0438\u043A \u043D\u0430\u0445\u043E\u0434\u0438\u0442\u0441\u044F \u043D\u0430 \u044D\u043A\u0440\u0430\u043D\u0435, \u0442\u0435\u043C \u043F\u0440\u043E\u0437\u0440\u0430\u0447\u043D\u0435\u0435 \u043E\u043D \u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u0441\u044F. \u0427\u0435\u043C \u043F\u0440\u043E\u0437\u0440\u0430\u0447\u043D\u0435\u0435 \u0448\u0430\u0440, \u0442\u0435\u043C \u0431\u043E\u043B\u044C\u0448\u0435 \u043C\u043E\u043D\u0435\u0442 \u043E\u043D \u043F\u0440\u0438\u043D\u043E\u0441\u0438\u0442.","upgrades.transparency.verbose_description":"\u0411\u043E\u043B\u0435\u0435 \u0432\u044B\u0441\u043E\u043A\u0438\u0435 \u0443\u0440\u043E\u0432\u043D\u0438 \u0434\u0435\u043B\u0430\u044E\u0442 \u0448\u0430\u0440 \u043F\u0440\u043E\u0437\u0440\u0430\u0447\u043D\u044B\u043C \u0431\u044B\u0441\u0442\u0440\u0435\u0435 \u0438 \u0443\u0432\u0435\u043B\u0438\u0447\u0438\u0432\u0430\u044E\u0442 \u0431\u043E\u043D\u0443\u0441 \u0437\u0430 \u043E\u0447\u043A\u0438.","upgrades.trickledown.name":"\u042D\u043A\u043E\u043D\u043E\u043C\u0438\u043A\u0430 \u043F\u043E \u043F\u0440\u0438\u043D\u0446\u0438\u043F\u0443 \\"\u043A\u043E\u043F\u0435\u0435\u0447\u043D\u043E\u0439 \u043C\u043E\u043D\u0435\u0442\u044B","upgrades.trickledown.tooltip":"\u041C\u043E\u043D\u0435\u0442\u044B \u043F\u043E\u044F\u0432\u043B\u044F\u044E\u0442\u0441\u044F \u0432 \u0432\u0435\u0440\u0445\u043D\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u044D\u043A\u0440\u0430\u043D\u0430.","upgrades.trickledown.verbose_description":"\u042D\u0442\u043E \u043C\u043E\u0436\u0435\u0442 \u043F\u043E\u043C\u043E\u0447\u044C \u0432\u0430\u043C \u043E\u0442\u043B\u043E\u0436\u0438\u0442\u044C \u043D\u0435\u0441\u043A\u043E\u043B\u044C\u043A\u043E \u043C\u043E\u043D\u0435\u0442.","upgrades.unbounded.name":"\u041D\u0430\u0431\u0438\u0432\u043A\u0430","upgrades.unbounded.tooltip":"\u0414\u043E\u0431\u0430\u0432\u043B\u044F\u0435\u0442 \u043F\u0440\u043E\u0441\u0442\u0440\u0430\u043D\u0441\u0442\u0432\u043E \u0441\u043B\u0435\u0432\u0430 \u0438 \u0441\u043F\u0440\u0430\u0432\u0430 \u043E\u0442 \u0443\u0440\u043E\u0432\u043D\u044F, \u043D\u043E \u0432\u0430\u0448\u0435 \u0432\u0435\u0441\u043B\u043E \u043D\u0435 \u043C\u043E\u0436\u0435\u0442 \u043F\u0440\u043E\u0439\u0442\u0438 \u0442\u0430\u043A \u0434\u0430\u043B\u0435\u043A\u043E.","upgrades.unbounded.verbose_description":"\u0415\u0449\u0435 \u043E\u0434\u043D\u0430 \u043C\u043E\u0434\u0435\u0440\u043D\u0438\u0437\u0430\u0446\u0438\u044F \u043C\u043E\u0436\u0435\u0442 \u043F\u043E\u043C\u043E\u0447\u044C \u0432\u0430\u043C \u0443\u0432\u0435\u043B\u0438\u0447\u0438\u0442\u044C \u0440\u0430\u0434\u0438\u0443\u0441 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044F \u0432\u0435\u0441\u043B\u0430.","upgrades.viscosity.name":"\u0412\u044F\u0437\u043A\u043E\u0441\u0442\u044C","upgrades.viscosity.tooltip":"\u041C\u0435\u0434\u043B\u0435\u043D\u043D\u043E\u0435 \u043F\u0430\u0434\u0435\u043D\u0438\u0435 \u043C\u043E\u043D\u0435\u0442","upgrades.viscosity.verbose_description":"\u041C\u043E\u043D\u0435\u0442\u044B \u043E\u0431\u044B\u0447\u043D\u043E \u0440\u0430\u0437\u0433\u043E\u043D\u044F\u044E\u0442\u0441\u044F \u0441 \u043F\u043E\u043C\u043E\u0449\u044C\u044E \u0433\u0440\u0430\u0432\u0438\u0442\u0430\u0446\u0438\u0438 \u0438 \u0432\u0437\u0440\u044B\u0432\u043E\u0432 \u0434\u043E \u0434\u043E\u0432\u043E\u043B\u044C\u043D\u043E \u0432\u044B\u0441\u043E\u043A\u0438\u0445 \u0441\u043A\u043E\u0440\u043E\u0441\u0442\u0435\u0439.\\n\\n\u042D\u0442\u043E\u0442 \u043F\u0435\u0440\u043A \u043F\u043E\u0441\u0442\u043E\u044F\u043D\u043D\u043E \u0437\u0430\u0441\u0442\u0430\u0432\u043B\u044F\u0435\u0442 \u0438\u0445 \u0437\u0430\u043C\u0435\u0434\u043B\u044F\u0442\u044C\u0441\u044F, \u043A\u0430\u043A \u0431\u0443\u0434\u0442\u043E \u043E\u043D\u0438 \u043D\u0430\u0445\u043E\u0434\u044F\u0442\u0441\u044F \u0432 \u043A\u0430\u043A\u043E\u0439-\u0442\u043E \u0432\u044F\u0437\u043A\u043E\u0439 \u0436\u0438\u0434\u043A\u043E\u0441\u0442\u0438.\\n\\n\u042D\u0442\u043E \u043E\u0431\u043B\u0435\u0433\u0447\u0430\u0435\u0442 \u0438\u0445 \u043F\u043E\u0438\u043C\u043A\u0443 \u0438 \u043E\u0442\u043B\u0438\u0447\u043D\u043E \u0441\u043E\u0447\u0435\u0442\u0430\u0435\u0442\u0441\u044F \u0441 \u043F\u0435\u0440\u043A\u0430\u043C\u0438, \u0432\u043B\u0438\u044F\u044E\u0449\u0438\u043C\u0438 \u043D\u0430 \u0434\u0432\u0438\u0436\u0435\u043D\u0438\u0435 \u043C\u043E\u043D\u0435\u0442.","upgrades.wind.help_plural":"\u0411\u043E\u043B\u0435\u0435 \u0441\u0438\u043B\u044C\u043D\u0430\u044F \u0441\u0438\u043B\u0430 \u0432\u0435\u0442\u0440\u0430","upgrades.wind.name":"\u0412\u0435\u0442\u0435\u0440","upgrades.wind.tooltip":"\u041F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u0435 \u0432\u0435\u0441\u043B\u0430 \u0441\u043E\u0437\u0434\u0430\u0435\u0442 \u0432\u0435\u0442\u0435\u0440","upgrades.wind.verbose_description":"\u0412\u0435\u0442\u0435\u0440 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043E\u0442 \u043F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u044F \u043B\u043E\u043F\u0430\u0441\u0442\u0438: \u043B\u0435\u0432\u0430\u044F \u0434\u0443\u0435\u0442 \u0432\u043B\u0435\u0432\u043E, \u043F\u0440\u0430\u0432\u0430\u044F - \u0432\u043F\u0440\u0430\u0432\u043E. \u0412\u043B\u0438\u044F\u0435\u0442 \u043A\u0430\u043A \u043D\u0430 \u0448\u0430\u0440\u0438\u043A\u0438, \u0442\u0430\u043A \u0438 \u043D\u0430 \u043C\u043E\u043D\u0435\u0442\u044B.","upgrades.yoyo.name":"\u0419\u043E-\u0439\u043E","upgrades.yoyo.tooltip":"\u041C\u044F\u0447 \u043F\u0430\u0434\u0430\u0435\u0442 \u043D\u0430 \u043B\u043E\u043F\u0430\u0442\u043A\u0443","upgrades.yoyo.verbose_description":"\u042D\u0442\u043E \u043F\u0440\u043E\u0442\u0438\u0432\u043E\u043F\u043E\u043B\u043E\u0436\u043D\u043E\u0441\u0442\u044C \u0442\u0435\u043B\u0435\u043A\u0438\u043D\u0435\u0437\u0443: \u0443\u043F\u0440\u0430\u0432\u043B\u044F\u0439\u0442\u0435 \u043C\u044F\u0447\u043E\u043C, \u043F\u043E\u043A\u0430 \u043E\u043D \u043F\u0430\u0434\u0430\u0435\u0442 \u043E\u0431\u0440\u0430\u0442\u043D\u043E.","upgrades.zen.name":"\u0414\u0437\u0435\u043D","upgrades.zen.tooltip":"+{{lvl}} \u043A\u043E\u043C\u0431\u043E \u0437\u0430 \u043A\u0438\u0440\u043F\u0438\u0447, \u0441\u0431\u0440\u0430\u0441\u044B\u0432\u0430\u0435\u0442\u0441\u044F \u043F\u0440\u0438 \u0432\u0437\u0440\u044B\u0432\u0435","upgrades.zen.verbose_description":"\u0412 \u043A\u043E\u043D\u0446\u0435 \u043A\u043E\u043D\u0446\u043E\u0432, \u044D\u0442\u043E \u043D\u0435\u043D\u0430\u0441\u0438\u043B\u044C\u0441\u0442\u0432\u0435\u043D\u043D\u0430\u044F \u0438\u0433\u0440\u0430."}');
},{}],"hATkf":[function(require,module,exports,__globalThis) {
module.exports = JSON.parse('{"confirmRestart.no":"Cancelar","confirmRestart.text":"Est\xe1s a punto de empezar un nuevo partido: \xbfes esto realmente lo que quer\xedas?","confirmRestart.title":"\xbfEmpezar una nueva partida?","confirmRestart.yes":"Empezar una nueva partida","editor.editing.bigger":"Aumentar el tama\xf1o del nivel","editor.editing.color":"Elige un color de la lista de colores (m\xe1ximo 5 por nivel)","editor.editing.copy":"Copiar c\xf3digo de nivel","editor.editing.copy_help":"P\xe9galo en el canal #levels en nuestro discord","editor.editing.credit":"Cr\xe9ditos y fuente","editor.editing.credit_prompt":"Introduce la URL de origen o la explicaci\xf3n de tu nivel.","editor.editing.delete":"Eliminar nivel","editor.editing.down":"Baja todos los ladrillos","editor.editing.help":"Luego haz clic en un mosaico para colorearlo.","editor.editing.left":"Mueve todos los ladrillos hacia la izquierda","editor.editing.play":"Juega este nivel","editor.editing.rename":"Nombre del nivel","editor.editing.rename_prompt":"Por favor, introduzca un nuevo nombre para el nivel","editor.editing.right":"Mueve todos los ladrillos hacia la derecha","editor.editing.smaller":"Disminuir el tama\xf1o del nivel","editor.editing.title":"Nivel de edici\xf3n: {{name}}","editor.editing.up":"Mueve todos los ladrillos hacia arriba","editor.help":"Crea niveles personalizados y comp\xe1rtelos para incluirlos en el juego.","editor.import":"Importar un nivel","editor.import_instruction":"Pegue un c\xf3digo de nivel para importarlo en su lista de niveles","editor.locked":"Alcanza una puntuaci\xf3n total de {{min}} para desbloquear","editor.new_level":"Nuevo nivel","editor.title":"Editor de niveles","gameOver.creative":"Esta parte de la prueba no se grabar\xe1.","gameOver.cumulative_total":"Su puntuaci\xf3n total acumulada ha pasado de {{startTs}} a {{endTs}}.","gameOver.lost.summary":"Se te ha ca\xeddo la bola despu\xe9s de coger {{score}} monedas.","gameOver.lost.title":"Pelota perdida","gameOver.stats.balls_lost":"Balas perdidas","gameOver.stats.bricks_broken":"Ladrillos rotos","gameOver.stats.bricks_per_minute":"Ladrillos rotos por minuto","gameOver.stats.catch_rate":"Monedas atrapadas","gameOver.stats.combo_avg":"Combo medio","gameOver.stats.combo_max":"Combinaci\xf3n m\xe1xima","gameOver.stats.duration_per_level":"Duraci\xf3n por nivel","gameOver.stats.hit_rate":"Precisi\xf3n","gameOver.stats.intro":"A continuaci\xf3n se muestran las estad\xedsticas de este juego en comparaci\xf3n con sus {{count}} mejores juegos.","gameOver.stats.level_reached":"Nivel alcanzado","gameOver.stats.total_score":"Puntuaci\xf3n total","gameOver.stats.upgrades_applied":"Mejoras aplicadas","gameOver.stats_intro":"Encuentra a continuaci\xf3n tus estad\xedsticas de juego comparadas con tus {{count}} mejores juegos.","gameOver.unlocked_perk":"Actualizaci\xf3n desbloqueada","gameOver.unlocked_perk_plural":"Has desbloqueado {{count}} mejoras","gameOver.win.summary":"Este juego ha terminado. Has acumulado {{score}} monedas.","gameOver.win.title":"Ha completado esta parte","help.content":"## Objetivo\\n\\nAtrapa tantas monedas como puedas durante 7 niveles.\\nLas monedas aparecen al romper ladrillos.\\nAtr\xe1palas con tu pala para aumentar tu puntuaci\xf3n.\\nTu puntuaci\xf3n se muestra en la esquina superior derecha de la pantalla.\\nNo dejes caer la bola o se acabar\xe1 la partida.\\n\\nDespu\xe9s de destruir todos los ladrillos, podr\xe1s elegir una mejora.\\n\\n## Mejoras\\n\\nLas mejoras que elijas se aplicar\xe1n hasta el final de la partida.\\n\\nAlgunas se pueden elegir varias veces para un efecto m\xe1s potente.\\nAlgunas ayudan a apuntar o facilitan el juego de otras maneras.\\n\\nAlgunas solo son \xfatiles al combinarlas.\\n\\nSiempre obtienes una mejora al principio de cada partida.\\n\\nSu icono servir\xe1 como los ladrillos del primer nivel.\\n\\nPuedes seleccionar las mejoras iniciales en la configuraci\xf3n.\\n\\nMuchas mejoras afectan a tu combo.\\n\\n## Combo\\n\\nTu \\"combo\\" es la cantidad de monedas que se generan al romper un ladrillo. Se muestra en tu paleta; por ejemplo, x4 significa que cada ladrillo generar\xe1 4 monedas.\\nLa mayor\xeda de las mejoras que aumentan el combo tambi\xe9n a\xf1aden una condici\xf3n para reiniciarlo.\\nEl combo tambi\xe9n se reiniciar\xe1 si la pelota regresa a la paleta sin tocar ning\xfan ladrillo.\\nSe mostrar\xe1 un mensaje de \\"fallo\\" cuando esto ocurra.\\n\\nIntenta apuntar a un ladrillo siempre.\\n\\n## Apuntar\\n\\nSolo la posici\xf3n de la pelota en la paleta determina c\xf3mo rebotar\xe1.\\nSi la pelota impacta en el centro de la paleta, rebotar\xe1 verticalmente.\\n\\nSi golpeas m\xe1s hacia un lado, tendr\xe1 mayor \xe1ngulo.\\n\\nLa velocidad de la paleta y el \xe1ngulo de entrada no afectan la direcci\xf3n de la pelota despu\xe9s de rebotar.\\n\\nSe pueden desbloquear muchas mejoras que ayudan a apuntar.\\n\\n## Desbloqueos\\n\\nAl jugar Breakout 71 por primera vez, la mayor\xeda de las mejoras y niveles est\xe1n bloqueados.\\nLas mejoras se desbloquean simplemente jugando y atrapando muchas monedas.\\n\\nLos primeros niveles se desbloquean al alcanzar una puntuaci\xf3n alta. Los niveles posteriores a\xf1aden una condici\xf3n sobre las ventajas que puedes seleccionar.\\n\\nAlcanzar puntuaciones altas es mucho m\xe1s f\xe1cil si consigues varias mejoras despu\xe9s de cada nivel.\\n\\n## Repeticiones y mejoras gratuitas\\n\\nRecibir\xe1s una mejora adicional si juegas bien:\\n\\n- Completa el nivel en menos de {{levelTimeGood}} segundos\\n- Golpea los lados o la parte superior menos de {{wallBouncedGood}} veces\\n- Atrapa el {{catchRateGood}}% de monedas\\n- Falla los ladrillos menos de {{missesGood}} veces\\n\\nTambi\xe9n recibir\xe1s una repetici\xf3n que te permite saltarte mejoras si lo haces a\xfan mejor:\\n\\n- Completa un nivel en menos de {{levelTimeBest}} segundos\\n- Golpea los lados o la parte superior menos de {{wallBouncedBest}} veces\\n- Atrapa el {{catchRateBest}}% de monedas\\n- Falla los ladrillos menos de {{missesBest}} veces\\n\\nUna opci\xf3n en la configuraci\xf3n te permite ver estas estad\xedsticas","help.help":"Descubre m\xe1s sobre el juego","help.levels":"Niveles","help.title":"Ayuda","help.upgrades":"## Actualizaciones","history.columns.score":"Puntuaci\xf3n","history.columns.started":"Fecha","history.help":"Enumera tus {{count}} mejores juegos.","history.locked":"Juega primero al menos diez partidos","history.title":"Historia","lab.help":"Prueba cualquier combinaci\xf3n de mejoras y niveles.","lab.instructions":"Selecciona las mejoras que aparecen a continuaci\xf3n y elige el nivel al que quieres jugar. .","lab.menu_entry":"Modo creativo","lab.reset":"Eliminar todas las mejoras","lab.select_level":"Selecciona un nivel para jugar","lab.unlocks_at":"Desbloqueado a partir de una puntuaci\xf3n total de {{score}}.","level_up.after_buttons":"Acabas de completar el nivel {{level}}/{{max}}.","level_up.before_buttons":"Has cogido {{score}} monedas {{catchGain}} en {{levelSpawnedCoins}} en {{time}} segundos {{timeGain}}.\\n\\nHas fallado los ladrillos {{levelMisses}} veces {{missesGain}} y tocado los bordes del \xe1rea de juego {{levelWallBounces}} veces {{wallHitsGain}}.\\n\\n{{compliment}}","level_up.compliment_advice":"Intenta coger todas las piezas, no fallar nunca con los ladrillos, no tocar nunca las paredes o terminar el nivel en menos de 30 segundos para conseguir opciones extra y mejoras.","level_up.compliment_good":"\xa1Bien hecho!","level_up.compliment_perfect":"Impresionante, \xa1seguid as\xed!","level_up.pick_upgrade_title":"Elija una mejora","level_up.plus_one_upgrade":"(+1 mejora)","level_up.plus_one_upgrade_and_reroll":"(+1 mejora y +1 relanzamiento)","level_up.reroll":"Relanzamiento ({{count}})","level_up.reroll_help":"Nuevas opciones","level_up.upgrade_perk_to_level":" nivel {{level}}","main_menu.basic":"Gr\xe1ficos simplificados","main_menu.basic_help":"Mejor rendimiento.","main_menu.colorful_coins":"Piezas de color","main_menu.colorful_coins_help":"Las piezas aparecen siempre en el color del ladrillo","main_menu.comboIncreaseTexts":"Mostrar una +X dorada","main_menu.comboIncreaseTexts_help":"Cuando el combo aumenta","main_menu.contrast":"Alto contraste","main_menu.contrast_help":"M\xe1s contraste y color","main_menu.credit_levels":"Niveles","main_menu.donate":"Has jugado {{hours}} horas","main_menu.donate_help":"\xbfPodr\xedas donar unos euros? Puedes ocultar este recordatorio en los ajustes.","main_menu.donation_reminder":"Recuerde dar","main_menu.donation_reminder_help":"Mostrar el tiempo de juego y un enlace para donar en el men\xfa principal","main_menu.download_save_file":"Guardar mis progresos","main_menu.download_save_file_help":"Obtener un archivo de copia de seguridad","main_menu.extra_bright":"M\xe1s luz","main_menu.extra_bright_help":"Mayor halo de luz alrededor de ladrillos y piezas.","main_menu.fullscreen":"Pantalla completa","main_menu.fullscreen_help":"El juego intentar\xe1 cambiar a pantalla completa cuando lo inicies.","main_menu.help_content":"## Objetivo\\n\\nAtrapa tantas monedas como puedas a lo largo de los 7 niveles.\\nLas monedas aparecen cuando rompes ladrillos.\\nAtr\xe1palas con tu disco para aumentar tu puntuaci\xf3n.\\nTu puntuaci\xf3n aparece en la parte superior derecha de la pantalla.\\nNo dejes caer la bola o se acaba el juego.\\n\\nCuando hayas roto todos los ladrillos, podr\xe1s elegir una mejora.\\n\\n## Mejoras\\n\\nLas mejoras que elijas ser\xe1n v\xe1lidas hasta el final del juego.\\nAlgunas pueden seleccionarse varias veces para conseguir un efecto m\xe1s potente.\\nOtras ayudan a apuntar o simplifican el juego.\\nAlgunas s\xf3lo son \xfatiles cuando se combinan.\\n\\nSiempre obtienes una mejora al principio de cada partida.\\nSu icono forma los ladrillos del primer nivel.\\nPuedes seleccionar las mejoras iniciales en los ajustes.\\n\\nMuchas mejoras influyen en tu combo.\\n\\n## Combo\\n\\nTu \'combo\' es el n\xfamero de monedas generadas cuando se rompe un ladrillo.\\nSe muestra en tu disco. Por ejemplo, x4 significa que cada ladrillo genera 4 monedas.\\n\\nLa mayor\xeda de las mejoras que aumentan el combo tambi\xe9n a\xf1aden una condici\xf3n para restablecerlo.\\nEl combo tambi\xe9n se reinicia si la pelota vuelve a la raqueta sin golpear un ladrillo.\\nEntonces se muestra un mensaje de \\"Fallado\\".\\n\\nIntenta golpear un ladrillo en cada rebote.\\n\\n## Apuntar\\n\\nS\xf3lo la posici\xf3n de la pelota en la raqueta determina su \xe1ngulo de rebote.\\nSi la pelota golpea la raqueta en el centro, rebotar\xe1 verticalmente.\\nSi golpea hacia un lado de la raqueta, el \xe1ngulo ser\xe1 mayor.\\nLa velocidad de la raqueta y el \xe1ngulo de incidencia de la pelota no tienen ning\xfan efecto.\\n\\nSe pueden desbloquear varias mejoras de punter\xeda.\\n\\n## Desbloqueo\\n\\nCuando juegas a Breakout 71 por primera vez, la mayor\xeda de las mejoras y niveles est\xe1n bloqueados.\\nLas mejoras se desbloquean simplemente jugando y cogiendo muchas monedas.\\nLos primeros niveles se desbloquean consiguiendo una puntuaci\xf3n alta.\\nLos niveles posteriores a\xf1aden una condici\xf3n a las ventajas seleccionadas.\\n\\nConseguir puntuaciones altas es mucho m\xe1s f\xe1cil cuando obtienes varias mejoras despu\xe9s de cada nivel.\\n\\n## Reintentos y mejoras gratis\\n\\nConseguir\xe1s una mejora extra si juegas bien:\\n\\n- Completa el nivel en menos de {{levelTimeGood}} segundos\\n- Toca los bordes o la parte superior menos de {{wallBouncedGood}} veces\\n- Atrapa el {{catchRateGood}}% de las monedas\\n- Pierde los ladrillos menos de {{missesGood}} veces\\n\\nTambi\xe9n obtendr\xe1s un potenciador que te permitir\xe1 ignorar las mejoras si lo haces a\xfan mejor:\\n\\n- Completa un nivel en menos de {{levelTimeBest}} segundos\\n- Toca los bordes o la parte superior menos de {{wallBouncedBest}} veces\\n- Atrapa {{catchRateBest}} de monedas\\n- Pierde ladrillos menos de {{missesBest}} veces\\n\\nUna opci\xf3n en los ajustes te permite mostrar estas estad\xedsticas","main_menu.help_help":"Descubra el juego en detalle","main_menu.help_title":"Ayuda","main_menu.help_upgrades":"## Mejoras","main_menu.high_score":"Puntuaci\xf3n m\xe1xima : {{score}}","main_menu.kid":"Modo Ni\xf1os","main_menu.kid_help":"Bola m\xe1s lenta","main_menu.language":"Idioma","main_menu.language_help":"Cambiar el idioma de la pantalla","main_menu.load_save_file":"Cargar una copia de seguridad","main_menu.load_save_file_help":"Desde un archivo","main_menu.max_coins":"{{max}} partes mostradas m\xe1ximo","main_menu.max_coins_help":"S\xf3lo visual, sin impacto en la puntuaci\xf3n","main_menu.max_particles":" {{max}} part\xedculas m\xe1ximas","main_menu.max_particles_help":"Limita el n\xfamero de part\xedculas mostradas en pantalla para efectos visuales","main_menu.mobile":"Modo m\xf3vil","main_menu.mobile_help":"Deja un espacio debajo de la raqueta.","main_menu.normal":"Pieza nueva","main_menu.normal_help":"Con una ventaja inicial aleatoria","main_menu.pointer_lock":"Bloqueo de puntero","main_menu.pointer_lock_help":"Tambi\xe9n oculta el cursor del rat\xf3n.","main_menu.record":"Grabar v\xeddeos de partidos","main_menu.record_download":"Descargar el v\xeddeo ({{size}} MB)","main_menu.record_help":"Consigue un v\xeddeo de cada nivel.","main_menu.red_miss":"Balones perdidos","main_menu.red_miss_help":"Muestra part\xedculas rojas alrededor de las bolas que bajan sin golpear un ladrillo.","main_menu.reset":"Reiniciar el juego","main_menu.reset_cancel":"No","main_menu.reset_confirm":"S\xed","main_menu.reset_help":"Borrar resultados, estad\xedsticas y horarios de los partidos","main_menu.reset_instruction":"\xbfEst\xe1s seguro de que perder\xe1s todos los progresos que hayas hecho en el juego?","main_menu.save_file_error":"Error al cargar el archivo de copia de seguridad","main_menu.save_file_loaded":"Copia de seguridad cargada","main_menu.save_file_loaded_help":"La aplicaci\xf3n se reiniciar\xe1","main_menu.save_file_loaded_ok":"Ok","main_menu.settings_help":"Adapta el juego a tus necesidades","main_menu.settings_title":"Par\xe1metro","main_menu.show_fps":"Contador FPS","main_menu.show_fps_help":"Control del rendimiento del juego","main_menu.show_stats":"Estad\xedsticas en tiempo real","main_menu.show_stats_help":"Piezas, tiempo, rebotes, fallos","main_menu.sounds":"Sonidos del juego","main_menu.sounds_help":"Ralentiza ciertos tel\xe9fonos.","main_menu.starting_perks":"Beneficios iniciales","main_menu.starting_perks_checked":"Cuando inicies una nueva partida, se te asignar\xe1 una de estas ventajas. Haz clic en una ventaja para excluirla.","main_menu.starting_perks_full_random":"Se han eliminado todos los beneficios, la elecci\xf3n ser\xe1 aleatoria.","main_menu.starting_perks_help":"Elija sus prestaciones iniciales","main_menu.starting_perks_unchecked":"Las prestaciones que figuran a continuaci\xf3n no se proponen como prestaciones iniciales, pero puede hacer clic en ellas para a\xf1adirlas a las posibles prestaciones iniciales.","main_menu.title":"Breakout 71","main_menu.unlocks":"Contenido desbloqueado","main_menu.unlocks_help":"Prueba los objetos desbloqueados","play.close_modale_window_tooltip":"Cerrar","play.current_lvl":"Nivel {{level}}/{{max}}","play.menu_label":"Men\xfa","play.menu_tooltip":"Abrir el men\xfa principal","play.missed_ball":"fallado","play.mobile_press_to_play":"Mantener pulsado para jugar","play.score_tooltip":"Consulta tu puntuaci\xf3n, mejoras y mucho m\xe1s","play.stats.coins_catch_rate":"Tasa de captura de monedas","play.stats.levelMisses":"Fallaste tiros, o no golpeaste ning\xfan ladrillo","play.stats.levelTime":"Duraci\xf3n del nivel","play.stats.levelWallBounces":"Rebota en las paredes","score_panel.close_to_unlock":"Siguiente nivel desbloqueado:","score_panel.get_upgrades_to_unlock":"Consigue {{missingUpgrades}} y coge {{points}} monedas extra para desbloquear el nivel \\"{{level}}\\".","score_panel.rerolls_count":"Has acumulado {{rerolls}} rerolls","score_panel.score_to_unlock":"Coge {{points}} monedas m\xe1s para desbloquear el nivel \\"{{level}}\\".","score_panel.title":"{{score}} puntos en {{level}}/{{max}} nivel","score_panel.upcoming_levels":"Niveles de partido :","score_panel.upgrades_picked":"Mejoras elegidas durante el juego :","settings.autoplay":"","settings.autoplay_help":"","settings.basic":"Gr\xe1ficos b\xe1sicos","settings.basic_help":"Mejor rendimiento.","settings.colorful_coins":"Monedas de colores","settings.colorful_coins_help":"Las monedas siempre aparecen del color del ladrillo.","settings.comboIncreaseTexts":"Mostrar +X en oro","settings.comboIncreaseTexts_help":"Cuando el combo aumenta","settings.contrast":"Alto contraste","settings.contrast_help":"Representaci\xf3n m\xe1s colorida y oscura.","settings.donation_reminder":"Recu\xe9rdame que debo donar","settings.donation_reminder_help":"Ver el tiempo jugado y el enlace de donaci\xf3n en el men\xfa principal","settings.download_save_file":"Descargar puntuaci\xf3n y estad\xedsticas","settings.download_save_file_help":"Obtener un archivo guardado","settings.extra_bright":"Extra brillante","settings.extra_bright_help":"Aumenta el tama\xf1o del halo alrededor de las monedas y los ladrillos.","settings.fullscreen":"Pantalla completa","settings.fullscreen_help":"El juego intentar\xe1 pasar a pantalla completa antes de comenzar.","settings.kid":"Modo Ni\xf1os","settings.kid_help":"Comience los juegos futuros con \\"pelota m\xe1s lenta\\".","settings.language":"Idioma","settings.language_help":"Elige el idioma del juego","settings.load_save_file":"Cargar archivo guardado","settings.load_save_file_help":"Seleccione un archivo guardado en su dispositivo","settings.max_coins":" {{max}} monedas en pantalla m\xe1ximo","settings.max_coins_help":"Solo cosm\xe9tico, sin efecto en la puntuaci\xf3n.","settings.mobile":"Modo m\xf3vil","settings.mobile_help":"Deja espacio debajo de la paleta.","settings.pointer_lock":"Bloqueo del puntero del rat\xf3n","settings.pointer_lock_help":"Bloquea y oculta el cursor del mouse.","settings.precise_lighting":"","settings.precise_lighting_help":"","settings.probabilistic_lighting":"","settings.probabilistic_lighting_help":"","settings.record":"Grabar v\xeddeos de juego","settings.record_download":"Descargar v\xeddeo ({{size}} MB)","settings.record_help":"Obtenga un v\xeddeo de cada nivel.","settings.red_miss":"Advertencia de p\xe9rdida","settings.red_miss_help":"Muestra part\xedculas rojas alrededor de las bolas que caen sin impacto.","settings.reset":"Reiniciar Juego","settings.reset_cancel":"No","settings.reset_confirm":"S\xed","settings.reset_help":"Borrar puntuaciones altas, tiempo de juego y estad\xedsticas","settings.reset_instruction":"Perder\xe1s todo el progreso que hayas logrado en el juego, \xbfest\xe1s seguro?","settings.save_file_error":"Error al cargar el archivo guardado","settings.save_file_loaded":"Guardar archivo cargado","settings.save_file_loaded_help":"La aplicaci\xf3n ahora se recargar\xe1 para aplicar tu guardado.","settings.save_file_loaded_ok":"DE ACUERDO","settings.show_fps":"Contador de FPS","settings.show_fps_help":"Supervisar el rendimiento de la aplicaci\xf3n","settings.show_stats":"Mostrar estad\xedsticas en tiempo real","settings.show_stats_help":"Monedas, tiempo, rebotes, fallos.","settings.smooth_lighting":"","settings.smooth_lighting_help":"","settings.sounds":"Sonidos del juego","settings.sounds_help":"Pitidos, bloops y brrrr","settings.storage_granted":"","settings.storage_refused":"","settings.stress_test":"","settings.stress_test_help":"","starting_perks.checked":"Al empezar una partida nueva, recibir\xe1s una de esas ventajas. Haz clic en una ventaja para excluirla.","starting_perks.help":"Elija posibles actualizaciones iniciales","starting_perks.random":"Se han eliminado todos los beneficios, la elecci\xf3n ser\xe1 aleatoria.","starting_perks.title":"Beneficios iniciales","starting_perks.unchecked":"Los beneficios a continuaci\xf3n no se ofrecen como beneficios iniciales, pero puedes hacer clic para agregarlos al grupo.","unlocks.greyed_out_help":"Los objetos en gris pueden desbloquearse aumentando tu puntuaci\xf3n total. La puntuaci\xf3n total aumenta cada vez que consigues puntos en el juego.","unlocks.intro":"Tu puntuaci\xf3n total es {{ts}}. A continuaci\xf3n encontrar\xe1s todas las mejoras y niveles que ofrece el juego. Haz clic en uno de ellos para probarlo en una partida de prueba.","unlocks.just_unlocked":"Nivel desbloqueado","unlocks.just_unlocked_plural":"Acabas de desbloquear {{count}} niveles","unlocks.level":"<h2>Has desbloqueado {{unlocked}} niveles en {{out_of}}</h2>\\n<p>Aqu\xed est\xe1n todos los niveles del juego, haz clic en uno para probarlo. </p> ","unlocks.level_description":"Un nivel {{size}}x{{size}} con {{bricks}} ladrillos, {{colors}} colores y {{bombs}} bombas.","unlocks.minScore":"Alcanza una puntuaci\xf3n de ${{minScore}} en una partida para desbloquearla.","unlocks.minScoreWithPerks":"Alcanzar ${{minScore}} en un juego con {{required}} pero sin {{forbidden}}.","unlocks.minTotalScore":"Acumula un total de ${{score}}","unlocks.reached":"Tu mejor puntuaci\xf3n hasta ahora es {{reached}}.","unlocks.title_upgrades":"Has desbloqueado {{unlocked}} mejoras en {{out_of}}.","upgrades.addiction.name":"Adicci\xf3n","upgrades.addiction.tooltip":"+{{lvl}} combo / ladrillo, combo perdido despu\xe9s de {{delay}}s sin romper ning\xfan ladrillo","upgrades.addiction.verbose_description":"La cuenta atr\xe1s s\xf3lo comienza una vez que se ha destruido el primer ladrillo del nivel, y se detiene en cuanto no hay m\xe1s ladrillos.","upgrades.asceticism.name":"Ascetismo","upgrades.asceticism.tooltip":"+{{combo}} combo por ladrillo roto, - {{combo}} cuando una pieza es atrapada","upgrades.asceticism.verbose_description":"Tendremos que encontrar una forma de almacenar las piezas mientras crece el combo.","upgrades.ball_attract_ball.help_plural":"Mayor fuerza de atracci\xf3n","upgrades.ball_attract_ball.name":"Gravedad","upgrades.ball_attract_ball.tooltip":"Las pelotas atraen a las pelotas","upgrades.ball_attract_ball.verbose_description":"Las bolas que est\xe1n separadas m\xe1s de 3/4 de la anchura de la pantalla empiezan a atraerse. La fuerza de atracci\xf3n es mayor cuanto m\xe1s separadas est\xe1n las bolas. Las part\xedculas del arco iris volar\xe1n para simbolizar la fuerza de atracci\xf3n. Esta ventaja s\xf3lo est\xe1 disponible si ya tienes m\xe1s de una bola en juego.","upgrades.ball_attracts_coins.name":"Balas de la suerte","upgrades.ball_attracts_coins.tooltip":"Las monedas van con la bola m\xe1s cercana","upgrades.ball_attracts_coins.verbose_description":"Puedes utilizarlo para que las piezas orbiten la pelota y colorear los ladrillos cercanos, o como una especie de rinc\xf3n imantado.","upgrades.ball_repulse_ball.help_plural":"Fuerza de repulsi\xf3n m\xe1s fuerte","upgrades.ball_repulse_ball.name":"Vuelo en formaci\xf3n","upgrades.ball_repulse_ball.tooltip":"Las balas repelen a las balas","upgrades.ball_repulse_ball.verbose_description":"Las bolas que est\xe1n a menos de un cuarto de la anchura de la pantalla empiezan a repelerse. La fuerza de repulsi\xf3n es mayor cuanto m\xe1s cerca est\xe1n una de otra. Se mostrar\xe1n part\xedculas para simbolizar la aplicaci\xf3n de esta fuerza. Esta ventaja s\xf3lo est\xe1 disponible si ya tienes m\xe1s de una bola.","upgrades.base_combo.name":"Mejor base","upgrades.base_combo.tooltip":"El combo comienza en {{coins}} en lugar de 1.","upgrades.base_combo.verbose_description":"Tu combo normalmente empieza en 1 al principio del nivel y vuelve a 1 cuando rebotas sin golpear nada. Con esta funci\xf3n, el combo empieza 3 puntos m\xe1s arriba, por lo que siempre conseguir\xe1s al menos 4 monedas por ladrillo. Cuando tu combo se reinicia, vuelve a ser 4 en lugar de 1. Tu bola parpadear\xe1 un poco para indicar que su combo es superior a 1.","upgrades.bigger_explosions.name":"Kaboom","upgrades.bigger_explosions.tooltip":"Explosiones m\xe1s violentas","upgrades.bigger_explosions.verbose_description":"La explosi\xf3n por defecto arrasa un cuadrado de ladrillos de 3x3; con esta mejora, uno de 5x5. El viento que sopla las piezas tambi\xe9n es mucho m\xe1s fuerte. La pantalla parpadear\xe1 un poco despu\xe9s de cada explosi\xf3n (excepto en el modo de gr\xe1ficos b\xe1sicos).","upgrades.bigger_puck.name":"Raqueta m\xe1s grande","upgrades.bigger_puck.tooltip":"Atrapa m\xe1s monedas f\xe1cilmente.","upgrades.bigger_puck.verbose_description":"Una raqueta grande significa que nunca se te escapa la pelota y que puedes coger m\xe1s piezas, adem\xe1s de apuntar los rebotes con precisi\xf3n. Sin embargo, una raqueta grande es m\xe1s dif\xedcil de usar en los laterales del nivel.","upgrades.bricks_attract_ball.name":"Los ladrillos atraen bolas","upgrades.bricks_attract_ball.tooltip":"La pelota va hacia los primeros {{count}} ladrillos que golpea.","upgrades.bricks_attract_ball.verbose_description":"El efecto es m\xe1s intenso en niveles m\xe1s altos. La cantidad de ladrillos que pueden impactar antes de que el efecto se detenga tambi\xe9n es mayor. El efecto se reactiva cuando el bal\xf3n impacta el disco.","upgrades.bricks_attract_coins.name":"Los ladrillos atraen monedas","upgrades.bricks_attract_coins.tooltip":"Les ayuda a permanecer all\xed arriba.","upgrades.bricks_attract_coins.verbose_description":"","upgrades.clairvoyant.name":"Perspicaz","upgrades.clairvoyant.tooltip":"Revela los niveles, el PV de los ladrillos y la direcci\xf3n de las balas","upgrades.clairvoyant.verbose_description":"Te ayuda a elegir las mejoras adecuadas y a entender qu\xe9 ocurre con los \\"ladrillos macizos\\". Los niveles 2 y 3 (en modo bucle) proporcionan informaci\xf3n adicional de dudosa utilidad.","upgrades.coin_magnet.help_plural":"Mayor efecto sobre las piezas","upgrades.coin_magnet.name":"Im\xe1n para monedas","upgrades.coin_magnet.tooltip":"La raqueta atrae monedas","upgrades.coin_magnet.verbose_description":"Dirige las piezas hacia la raqueta. El efecto es mayor en las piezas que ya est\xe1n cerca de la raqueta.","upgrades.compound_interest.name":"Inter\xe9s compuesto","upgrades.compound_interest.tooltip":"+{{lvl}} combo por ladrillo roto, se pone a cero cuando se pierde una pieza","upgrades.compound_interest.verbose_description":"Tu combo aumentar\xe1 en uno cada vez que rompas un ladrillo. Si pierdes alguna pieza, tu combo volver\xe1 a cero.\\n\\nSi tu combo es superior al m\xednimo, aparecer\xe1 una l\xednea roja en la parte inferior de la zona de juego para recordarte que las monedas no deben ir all\xed.","upgrades.concave_puck.name":"Raqueta c\xf3ncava","upgrades.concave_puck.tooltip":"Ayuda a evitar los bordes.","upgrades.concave_puck.verbose_description":"Las pelotas comienzan verticalmente al principio del nivel y rebotan en la raqueta m\xe1s verticalmente y al rev\xe9s.","upgrades.corner_shot.name":"Tiro de esquina","upgrades.corner_shot.tooltip":"Deja que tu raqueta salga del \xe1rea enmarcada","upgrades.corner_shot.verbose_description":"Te ayuda a apuntar a las esquinas","upgrades.etherealcoins.name":"Moneda espacial","upgrades.etherealcoins.tooltip":"Las piezas ya no se ven afectadas por la gravedad","upgrades.etherealcoins.verbose_description":"Las monedas mantendr\xe1n su velocidad incluso despu\xe9s de varios rebotes y ya no se ver\xe1n afectadas por la gravedad.","upgrades.extra_levels.name":"5 minutos m\xe1s","upgrades.extra_levels.tooltip":"Juega {{count}} niveles en lugar de 7","upgrades.extra_levels.verbose_description":"El juego suele durar 7 niveles, tras los cuales se acaba la partida y la puntuaci\xf3n que hayas alcanzado es tu puntuaci\xf3n del juego.\\n\\nElegir esta mejora te permite prolongar el juego un nivel. Los \xfaltimos niveles suelen ser en los que m\xe1s puntos consigues, as\xed que la diferencia puede ser espectacular.","upgrades.extra_life.help_plural":"La (\xfaltima) bola rebota hasta el fondo de la pantalla en lugar de perderse ( {{lvl}} veces).","upgrades.extra_life.name":"Segunda oportunidad","upgrades.extra_life.tooltip":"La pelota rebota una vez antes de perderse.","upgrades.extra_life.verbose_description":"Normalmente, s\xf3lo tienes una bola por ronda, y la ronda termina en cuanto la sueltas.\\n\\nEsta habilidad a\xf1ade una barra blanca en la parte inferior de la pantalla que guardar\xe1 una bola una vez, y se romper\xe1 en el proceso.\\n\\nPuedes coger varias vidas por adelantado, que se usan cada vez que una bola est\xe1 a punto de perderse.","upgrades.forgiving.name":"Errar es humano","upgrades.forgiving.tooltip":"Perder los ladrillos significa perder una porci\xf3n progresivamente mayor del combo","upgrades.forgiving.verbose_description":" El primer ladrillo perdido por nivel no cuesta nada, el siguiente 10%, 20% y as\xed sucesivamente.","upgrades.fountain_toss.name":"Moneda en la fuente","upgrades.fountain_toss.tooltip":"A veces ganas un peque\xf1o combo cuando pierdes monedas.","upgrades.fountain_toss.verbose_description":"Cuando se pierde una moneda mientras tu combo estaba por debajo de {{max}}, tu combo tiene una probabilidad de {{lvl}}/combo de incrementarse.","upgrades.ghost_coins.name":"Habitaciones fantasma","upgrades.ghost_coins.tooltip":"Las monedas atraviesan los ladrillos lentamente","upgrades.ghost_coins.verbose_description":"No es un error, \xa1es una caracter\xedstica! Las piezas atraviesan los ladrillos lentamente. Los niveles m\xe1s altos permiten que las monedas pasen m\xe1s r\xe1pido a trav\xe9s de los ladrillos.","upgrades.helium.name":"Helio","upgrades.helium.tooltip":"Las piezas flotan en lugar de caer alrededor de la raqueta.","upgrades.helium.verbose_description":"Las monedas esperar\xe1n a estar debajo de la raqueta para caer.","upgrades.hot_start.name":"Arranque en caliente","upgrades.hot_start.tooltip":"Combo a {{start}}, -{{loss}} combo por segundo","upgrades.hot_start.verbose_description":"Al principio de cada nivel, tu combo comenzar\xe1 con +30 puntos, pero cada segundo se reducir\xe1 en un punto. ","upgrades.hypnosis.name":"Hipnosis","upgrades.hypnosis.tooltip":"Cada vez que un ladrillo cambia de color, teletransporta esa moneda a la bola m\xe1s cercana y recarga su capacidad para manchar un ladrillo.","upgrades.hypnosis.verbose_description":"","upgrades.implosions.name":"Implosiones","upgrades.implosions.tooltip":"Las explosiones absorben las piezas en lugar de hacerlas estallar.","upgrades.implosions.verbose_description":"La fuerza de la explosi\xf3n se aplica en sentido contrario. El nivel 2+ aumenta la potencia de la implosi\xf3n.","upgrades.instant_upgrade.name":"M\xe1s vale p\xe1jaro en mano que ciento volando","upgrades.instant_upgrade.tooltip":"+2 de mejora ahora, -1 de elecci\xf3n hasta el final del juego.","upgrades.instant_upgrade.verbose_description":"Elige inmediatamente dos mejoras para conseguir una gratis y otra para pagar la que usaste para conseguir esta ventaja. Cada vez que elijas mejoras del siguiente men\xfa, tendr\xe1s menos opciones.","upgrades.left_is_lava.name":"Evitar el lado izquierdo","upgrades.left_is_lava.tooltip":"+{{lvl}} combo por ladrillo, se pierde al tocar el borde izquierdo","upgrades.left_is_lava.verbose_description":"Cada vez que rompes un ladrillo, tu combo aumenta en uno, d\xe1ndote una moneda extra cada vez que rompes un ladrillo.\\n\\nSin embargo, tu combo se reinicia en cuanto tu bola golpea el lado izquierdo.\\n\\nEn cuanto tu combo aumenta, el lado izquierdo se vuelve rojo para recordarte que debes evitar golpearlo.","upgrades.limitless.name":"Sin l\xedmites","upgrades.limitless.tooltip":"Aumenta el nivel m\xe1ximo de todas las mejoras de {{lvl}} .","upgrades.limitless.verbose_description":"Elegir esta ventaja tambi\xe9n aumenta su propio l\xedmite en un punto, permiti\xe9ndote elegirla de nuevo.","upgrades.metamorphosis.name":"Metamorfosis","upgrades.metamorphosis.tooltip":"Cada pieza puede manchar {{lvl}} ladrillo(s) con su color","upgrades.metamorphosis.verbose_description":"Con esta mejora, las monedas tendr\xe1n el color del ladrillo del que proceden y colorear\xe1n el primer ladrillo que toquen.\\n\\nLas piezas aparecen a la velocidad de la bola que las rompi\xf3, lo que significa que puedes apuntar un poco en la direcci\xf3n de los ladrillos que quieres \\"pintar\\".","upgrades.minefield.name":"Campo de minas","upgrades.minefield.tooltip":"+{{lvl}} combo por ladrillo explosivo en pantalla","upgrades.minefield.verbose_description":"A\xf1ade +lvl al combo cuando se coloca un ladrillo, -lvl cuando se destruye y aumenta el combo b\xe1sico en el n\xfamero de ladrillos multiplicado por el nivel.","upgrades.multiball.name":"Bola m\xfaltiple","upgrades.multiball.tooltip":"Cada nivel comienza con {{count}} bolas.","upgrades.multiball.verbose_description":"En cuanto sueltas la bola en Breakout 71, pierdes.\\n\\nCon esta ventaja, tienes dos bolas, as\xed que puedes permitirte perder una.\\n\\nLas bolas perdidas vuelven al siguiente nivel.\\n\\nTener m\xe1s de una bala te permite obtener otras ventajas y, por supuesto, completar el nivel m\xe1s r\xe1pidamente.","upgrades.nbricks.name":"Domiciliaci\xf3n bancaria","upgrades.nbricks.tooltip":"Golpea exactamente {{lvl}} ladrillos por rebote para +{{lvl}} combo, de lo contrario combo perdido","upgrades.nbricks.verbose_description":"Si tu bola rebota sin romper ning\xfan ladrillo, cuenta como golpe. Los ladrillos destruidos por explosiones no cuentan.","upgrades.one_more_choice.name":"La respuesta D","upgrades.one_more_choice.tooltip":"1 opci\xf3n de mejora adicional disponible hasta el final del juego","upgrades.one_more_choice.verbose_description":"Cada men\xfa de mejoras tendr\xe1 una opci\xf3n adicional. Esto no aumenta el n\xfamero de mejoras que puede elegir, pero le ayuda a crear el perfil ideal. \\"Respuesta D\\" es una referencia a un sketch cl\xe1sico.","upgrades.passive_income.name":"Ingresos pasivos","upgrades.passive_income.tooltip":"+{{lvl}} combo / ladrillo, a menos que la raqueta se haya movido en los \xfaltimos {{time}} segundos, en cuyo caso se pierde el combo.","upgrades.passive_income.verbose_description":"Algunas mejoras hacen que las pelotas se muevan sin necesidad de poner la raqueta en movimiento.","upgrades.picky_eater.name":"Comer por colores","upgrades.picky_eater.tooltip":"+{{lvl}} combo por ladrillo roto del color de la bola, combo perdido en caso contrario","upgrades.picky_eater.verbose_description":"Cada vez que rompes un ladrillo del mismo color que tu bola, tu combinaci\xf3n aumenta en uno.\\nSi es de otro color, la bola adopta este nuevo color, pero la combinaci\xf3n se reinicia, a menos que no queden ladrillos del mismo color que la bola. Los ladrillos de color incorrecto se marcan con un c\xedrculo rojo. Si tienes m\xe1s de una bola, todas cambian de color al mismo tiempo cuando una de ellas toca un ladrillo.","upgrades.pierce.name":"Bola perforadora","upgrades.pierce.tooltip":"La pelota golpea {{count}} ladrillos despu\xe9s de cada rebote en la raqueta.","upgrades.pierce.verbose_description":"Normalmente, la pelota rebota en cuanto golpea un ladrillo. Con esta mejora, continuar\xe1 su trayectoria hasta que haya roto 3 ladrillos.\\n\\nDespu\xe9s, rebotar\xe1 en el cuarto ladrillo y tendr\xe1 que tocar la raqueta para poner a cero el contador.","upgrades.pierce_color.name":"Taladro de color","upgrades.pierce_color.tooltip":"+{{lvl}} de da\xf1o a los ladrillos del mismo color que la bola","upgrades.pierce_color.verbose_description":"Cada vez que una bola golpea un ladrillo del mismo color, lo atraviesa sin obst\xe1culos.\\n\\nCuando choca contra un ladrillo de otro color, lo rompe, adopta su color y rebota.\\n\\nSi tienes ladrillos macizos, las cosas funcionan de otra manera.","upgrades.puck_repulse_ball.help_plural":"La fuerza de repulsi\xf3n es mayor","upgrades.puck_repulse_ball.name":"Aterrizaje suave","upgrades.puck_repulse_ball.tooltip":"La raqueta repele las pelotas","upgrades.puck_repulse_ball.verbose_description":"Cuando una pelota se acerca a la raqueta, empieza a frenarse e incluso a botar sin tocar el disco.","upgrades.rainbow.name":"Arco\xedris","upgrades.rainbow.tooltip":"Las monedas aparecen con colores del arco iris.","upgrades.rainbow.verbose_description":"Cada nivel aumenta la cantidad de monedas de colores. El color depende del tiempo transcurrido.","upgrades.reach.name":"Ataque a\xe9reo","upgrades.reach.tooltip":"Romper uno de los N ladrillos de la l\xednea inferior destruye el combo. De lo contrario, +N combo.","upgrades.reach.verbose_description":"Si s\xf3lo hay una fila de ladrillos, o si la fila m\xe1s baja cubre todo el ancho del juego, esta ventaja no tiene efecto. De lo contrario, si se rompe esta fila inferior, se reinicia el combo; si se rompe cualquier otra fila, el combo aumenta en el n\xfamero de ladrillos de esa fila.\\n\\nLa fila inferior de ladrillos se marcar\xe1 con un c\xedrculo rojo para recordarte que no debes tocarla.","upgrades.respawn.name":"Reaparici\xf3n","upgrades.respawn.tooltip":"{{percent}}% de los ladrillos reaparecen despu\xe9s de {{delay}}s.","upgrades.respawn.verbose_description":"Los efectos de part\xedculas te mostrar\xe1n d\xf3nde aparecer\xe1n los ladrillos.","upgrades.right_is_lava.name":"Evitar el lado derecho","upgrades.right_is_lava.tooltip":"+{{lvl}} combo por ladrillo, perdido en el impacto con el lado derecho","upgrades.right_is_lava.verbose_description":"Cada vez que rompes un ladrillo, tu combo aumenta en uno, d\xe1ndote una moneda extra cada vez que rompas los ladrillos siguientes.\\n\\nSin embargo, tu combo se reinicia en cuanto tu bola toca el lado derecho del \xe1rea de juego.\\n\\nEn cuanto tu combo aumenta, el lado derecho se vuelve rojo para recordarte que debes evitar golpearlo.","upgrades.sacrifice.help_l1":"Perder una vida destruye todos los ladrillos","upgrades.sacrifice.help_over":"Perder una vida multiplica el combo por {{lvl}} y luego destruye todos los ladrillos de la pantalla","upgrades.sacrifice.name":"Sacrificio","upgrades.sacrifice.verbose_description":"El combo podr\xeda llegar muy alto.","upgrades.sapper.help_plural":"Los primeros {{lvl}} ladrillos rotos se convierten en bombas.","upgrades.sapper.name":"Zapador","upgrades.sapper.tooltip":"El primer ladrillo roto se convierte en una bomba.","upgrades.sapper.verbose_description":"En lugar de desaparecer, el primer ladrillo roto es sustituido por una bomba. Al rebotar la pelota en la raqueta, se restablece el efecto. A medida que subas de nivel, podr\xe1s colocar m\xe1s bombas.","upgrades.shocks.name":"Choque","upgrades.shocks.tooltip":"Choque explosivo entre balas","upgrades.shocks.verbose_description":"Cuando dos balas chocan, intercambian velocidades, crean una explosi\xf3n y ganan un poco de la velocidad que las separaba.","upgrades.shunt.name":"Derivaci\xf3n","upgrades.shunt.tooltip":"Aparca {{percent}}% de combo al cambiar de nivel","upgrades.shunt.verbose_description":"El arranque en caliente simplemente se a\xf1adir\xe1 a la combinaci\xf3n actual","upgrades.side_flip.name":"Derecha","upgrades.side_flip.tooltip":"+{{lvl}} combo por ladrillo roto de la derecha, -{{loss}} de lo contrario","upgrades.side_flip.verbose_description":"Golpea el ladrillo por su lado derecho para conseguir un combo, pero evita golpearlo por su lado izquierdo ya que esto cancelar\xe1 dos combos. Golpear desde arriba y desde abajo no tiene efecto.","upgrades.side_kick.name":"Zurdos","upgrades.side_kick.tooltip":"+{{lvl}} combo por ladrillo roto de la izquierda, -{{loss}} de lo contrario","upgrades.side_kick.verbose_description":"Golpea el ladrillo por su lado izquierdo para conseguir un combo, pero evita golpearlo por su lado derecho ya que esto cancelar\xe1 dos combos. Golpear desde arriba y desde abajo no tiene efecto.","upgrades.skip_last.help_plural":"Los \xfaltimos {{lvl}} ladrillos restantes se autodestruir\xe1n","upgrades.skip_last.name":"F\xe1cil de limpiar","upgrades.skip_last.tooltip":"El \xfaltimo ladrillo se autodestruye.","upgrades.skip_last.verbose_description":"Tienes que romper todos los ladrillos para pasar al siguiente nivel.\\n\\nSin embargo, puede ser dif\xedcil conseguir los \xfaltimos ladrillos.\\n\\nCompletar un nivel antes de tiempo te da opciones extra al subir de nivel.\\n\\nNo quedarte nunca sin ladrillos tambi\xe9n es una gran ventaja.\\n\\nAs\xed que si te cuesta romper los \xfaltimos ladrillos, conseguir esta ventaja unas cuantas veces puede ayudarte.","upgrades.slow_down.name":"Bola lenta","upgrades.slow_down.tooltip":"El bal\xf3n se mueve m\xe1s despacio","upgrades.slow_down.verbose_description":"La bola empieza relativamente despacio, pero con cada nivel del juego empieza un poco m\xe1s r\xe1pido, y tambi\xe9n se acelera si pasas mucho tiempo en un nivel.\\n\\nEsta ventaja hace que la bola sea m\xe1s f\xe1cil de manejar.\\n\\nPuedes conseguirla al principio de cada partida activando el modo ni\xf1o en el men\xfa.","upgrades.smaller_puck.help_plural":"La raqueta se encoge a\xfan m\xe1s y el combo vuelve a aumentar.","upgrades.smaller_puck.name":"Raqueta m\xe1s peque\xf1a","upgrades.smaller_puck.tooltip":"Tambi\xe9n da +5 combo","upgrades.smaller_puck.verbose_description":"Recibes una bonificaci\xf3n de combo permanente de +5 por elegir esta mejora.","upgrades.soft_reset.name":"Restablecimiento progresivo","upgrades.soft_reset.tooltip":"Al reiniciar el combo se conserva el {{percent}}% de los puntos","upgrades.soft_reset.verbose_description":"Limita el impacto de un reinicio de combo.","upgrades.streak_shots.name":"Secuencia de destrucci\xf3n","upgrades.streak_shots.tooltip":"M\xe1s piezas si rompes varios ladrillos a la vez.","upgrades.streak_shots.verbose_description":"Cada vez que rompes un ladrillo, tu combo aumenta. El combo se pone a cero cuando la pelota golpea la raqueta. Una vez que tu combo supera el valor base, tu raqueta se vuelve roja para recordarte que tocarla con la pelota destruir\xe1 tu combo.","upgrades.sturdy_bricks.name":"Ladrillos macizos","upgrades.sturdy_bricks.tooltip":"+{{lvl}} puntos de vida de los ladrillos, +{{percent}}% monedas cuando se destruyen","upgrades.sturdy_bricks.verbose_description":"Cada nivel de esta mejora a\xf1ade un PV a todos los ladrillos. Puedes comprobar el n\xfamero de PV usando la cualificaci\xf3n \\"Clarividente\\". Puedes aumentar el da\xf1o de las balas obteniendo la mejora \\"Bala perforante\\". Cada nivel de esta mejora a\xf1ade un 50% m\xe1s de monedas.","upgrades.superhot.name":"S\xfaper caliente","upgrades.superhot.tooltip":"El tiempo se mueve cuando se mueve la paleta.","upgrades.superhot.verbose_description":"SUPER CALIENTE SUPER CALIENTE SUPER CALIENTE SUPER CALIENTE","upgrades.telekinesis.help_plural":"Mayor efecto sobre el bal\xf3n","upgrades.telekinesis.name":"Telequinesis","upgrades.telekinesis.tooltip":"Control de la trayectoria del bal\xf3n","upgrades.telekinesis.verbose_description":"Controla la bola mientras sube.","upgrades.top_is_lava.name":"Icare","upgrades.top_is_lava.tooltip":"+{{lvl}} combo por ladrillo, perdido en el rebote del techo","upgrades.top_is_lava.verbose_description":"Cada vez que rompas un ladrillo, tu combo aumentar\xe1 en uno. Sin embargo, tu combo se reiniciar\xe1 en cuanto tu bola llegue a la parte superior de la pantalla.\\n\\nCuando tu combo supere el m\xednimo, aparecer\xe1 una barra roja en la parte superior de la pantalla para recordarte que debes evitar golpearla.","upgrades.trampoline.name":"Trampol\xedn","upgrades.trampoline.tooltip":"+{{lvl}} combo cada vez que una pelota rebota en la raqueta,-{{lvl}} combo cada vez que una pelota rebota en uno de los bordes","upgrades.trampoline.verbose_description":"Una de las pocas mejoras que no tiene una condici\xf3n de reinicio","upgrades.transparency.name":"Transparencia","upgrades.transparency.tooltip":"Cuanto m\xe1s alta est\xe9 la bola en la pantalla, m\xe1s transparente se volver\xe1. Cuanto m\xe1s transparente sea, m\xe1s monedas producir\xe1.","upgrades.transparency.verbose_description":"Los niveles m\xe1s altos hacen que la pelota se vuelva transparente m\xe1s r\xe1pidamente y aumentan la bonificaci\xf3n de puntos.","upgrades.trickledown.name":"Escorrent\xeda","upgrades.trickledown.tooltip":"Las monedas aparecen en la parte superior de la pantalla.","upgrades.trickledown.verbose_description":"Podr\xeda ayudarte a ahorrar algunas monedas. ","upgrades.unbounded.name":"Espacio libre","upgrades.unbounded.tooltip":"+{{lvl}} combo por ladrillo, m\xe1s lados para mantener la pelota en juego, peligro","upgrades.unbounded.verbose_description":"Espero que hayas encontrado la forma de mantener tu bola en la pantalla. En el nivel 2+, el techo tambi\xe9n desaparecer\xe1. Se trata de una ventaja avanzada.","upgrades.viscosity.name":"Fluido viscoso","upgrades.viscosity.tooltip":"Las piezas caen m\xe1s lentamente","upgrades.viscosity.verbose_description":"Las piezas normalmente se aceleran con la gravedad y las explosiones para alcanzar velocidades bastante altas.\\n\\nEsta habilidad las ralentiza constantemente, como si estuvieran en una especie de l\xedquido viscoso.\\n\\nEsto facilita su captura y combina bien con mejoras que influyen en el movimiento de la pieza.","upgrades.wind.help_plural":"Viento m\xe1s fuerte","upgrades.wind.name":"Viva el viento","upgrades.wind.tooltip":"La posici\xf3n de la raqueta crea viento","upgrades.wind.verbose_description":"El viento depende de la posici\xf3n de la raqueta en la pantalla, hacia la izquierda si est\xe1 a la izquierda, hacia la derecha si est\xe1 a la derecha.\\nAfecta a pelotas y piezas.","upgrades.yoyo.name":"Yo-Yo","upgrades.yoyo.tooltip":"La pelota desciende hacia la raqueta.","upgrades.yoyo.verbose_description":"Es lo contrario de la Telequinesis: controlar la pelota mientras cae hacia la raqueta.","upgrades.zen.name":"Zen","upgrades.zen.tooltip":"+{{lvl}} combo por ladrillo, hasta que haya una explosi\xf3n","upgrades.zen.verbose_description":"B\xe1sicamente es un juego no violento."}');
},{}],"l4sLF":[function(require,module,exports,__globalThis) {
module.exports = JSON.parse('{"confirmRestart.no":"\u0130ptal etmek","confirmRestart.text":"Yeni bir oyuna ba\u015Flamak \xfczeresiniz. Devam etmek istedi\u011Finizden emin misiniz?","confirmRestart.title":"Yeni bir oyuna m\u0131 ba\u015Flasam?","confirmRestart.yes":"Oyunu yeniden ba\u015Flat","editor.editing.bigger":"Seviye boyutunu art\u0131r","editor.editing.color":"Renk listesinden bir renk se\xe7in (seviye ba\u015F\u0131na en fazla 5)","editor.editing.copy":"Kopyalama seviyesi kodu","editor.editing.copy_help":"Bunu Discord\'umuzdaki #levels kanal\u0131na yap\u0131\u015Ft\u0131r\u0131n","editor.editing.credit":"Krediler ve kaynak","editor.editing.credit_prompt":"Seviyenizin kaynak URL\'sini veya a\xe7\u0131klamas\u0131n\u0131 girin.","editor.editing.delete":"Seviyeyi Sil","editor.editing.down":"T\xfcm tu\u011Flalar\u0131 a\u015Fa\u011F\u0131 do\u011Fru hareket ettirin","editor.editing.help":"Daha sonra renklendirmek istedi\u011Finiz kutucu\u011Fa t\u0131klay\u0131n.","editor.editing.left":"T\xfcm tu\u011Flalar\u0131 sola ta\u015F\u0131","editor.editing.play":"Bu seviyeyi oyna","editor.editing.rename":"Seviye Ad\u0131","editor.editing.rename_prompt":"L\xfctfen seviye i\xe7in yeni bir ad girin","editor.editing.right":"T\xfcm tu\u011Flalar\u0131 sa\u011Fa ta\u015F\u0131","editor.editing.smaller":"Seviye boyutunu azalt","editor.editing.title":"D\xfczenleme d\xfczeyi : {{name}}","editor.editing.up":"T\xfcm tu\u011Flalar\u0131 yukar\u0131 ta\u015F\u0131","editor.help":"\xd6zel seviyeler yarat\u0131n ve bunlar\u0131 oyuna dahil etmek i\xe7in payla\u015F\u0131n.","editor.import":"Bir seviyeyi i\xe7e aktar","editor.import_instruction":"Seviye listenize aktarmak i\xe7in bir seviye kodunu yap\u0131\u015Ft\u0131r\u0131n","editor.locked":"Kilidi a\xe7mak i\xe7in toplam {{min}} puan\u0131na ula\u015F\u0131n","editor.new_level":"Yeni seviye","editor.title":"Seviye Edit\xf6r\xfc","gameOver.creative":"Bu ko\u015Fu kaydedilmeyecek.","gameOver.cumulative_total":"Toplam k\xfcm\xfclatif puan\u0131n\u0131z {{startTs}} \'dan {{endTs}}\'e \xe7\u0131kt\u0131.","gameOver.lost.summary":" {{score}} jeton yakalad\u0131ktan sonra topu d\xfc\u015F\xfcrd\xfcn.","gameOver.lost.title":"Oyun bitti","gameOver.stats.balls_lost":"Kaybedilen toplar","gameOver.stats.bricks_broken":"Tu\u011Flalar k\u0131r\u0131ld\u0131","gameOver.stats.bricks_per_minute":"Dakikada k\u0131r\u0131lan tu\u011Fla say\u0131s\u0131","gameOver.stats.catch_rate":"Yakalama oran\u0131","gameOver.stats.combo_avg":"Ortalama kombo","gameOver.stats.combo_max":"Maksimum kombo","gameOver.stats.duration_per_level":"Seviye ba\u015F\u0131na s\xfcre","gameOver.stats.hit_rate":"\u0130sabet oran\u0131","gameOver.stats.intro":"","gameOver.stats.level_reached":"Seviyeye ula\u015F\u0131ld\u0131","gameOver.stats.total_score":"Toplam Puan","gameOver.stats.upgrades_applied":"Uygulanan y\xfckseltmeler","gameOver.stats_intro":"A\u015Fa\u011F\u0131da {{count}} en iyi oyunlar\u0131n\u0131zla kar\u015F\u0131la\u015Ft\u0131r\u0131ld\u0131\u011F\u0131nda oyun istatistiklerinizi bulabilirsiniz.","gameOver.unlocked_perk":"Y\xfckseltme kilidi a\xe7\u0131ld\u0131","gameOver.unlocked_perk_plural":"Az \xf6nce {{count}} avantaj\u0131n kilidini a\xe7t\u0131n\u0131z","gameOver.win.summary":"Bu oyun bitti. {{score}} jeton saklad\u0131n.","gameOver.win.title":"Bu oyunu tamamlad\u0131n","help.content":"## Hedef\\n\\n7 seviye boyunca m\xfcmk\xfcn oldu\u011Funca \xe7ok jeton topla. \\nTu\u011Flalar\u0131 k\u0131rd\u0131\u011F\u0131nda jetonlar belirir.\\nPuan\u0131n\u0131 art\u0131rmak i\xe7in k\xfcre\u011Finle topla.\\nPuan\u0131n ekran\u0131n sa\u011F \xfcst k\xf6\u015Fesinde g\xf6sterilir.\\nTopu d\xfc\u015F\xfcrme yoksa oyun biter.\\n\\nT\xfcm tu\u011Flalar\u0131 yok ettikten sonra bir y\xfckseltme se\xe7ebilirsin.\\n\\n## Y\xfckseltmeler \\n\\nSe\xe7ti\u011Fin y\xfckseltmeler ko\u015Funun sonuna kadar ge\xe7erli olur. \\nBaz\u0131lar\u0131 daha g\xfc\xe7l\xfc etki i\xe7in birden fazla kez se\xe7ilebilir.\\nBaz\u0131lar\u0131 ni\u015Fan almaya yard\u0131mc\u0131 olur veya oyunu ba\u015Fka \u015Fekillerde kolayla\u015Ft\u0131r\u0131r. \\nBaz\u0131lar\u0131 yaln\u0131zca birle\u015Ftirildi\u011Finde i\u015Fe yarar.\\n\\nHer oyunun ba\u015F\u0131nda her zaman bir y\xfckseltme al\u0131rs\u0131n. \\nSimgesi ilk seviyenin tu\u011Flalar\u0131 olarak hizmet eder. \\nAyarlardan ba\u015Flang\u0131\xe7 y\xfckseltmelerini se\xe7ebilirsin.\\n\\nBir\xe7ok y\xfckseltme kombonu etkiler. \\n\\n## Kombo\\n\\n\\"Kombon\\", bir tu\u011Fla k\u0131r\u0131ld\u0131\u011F\u0131nda ortaya \xe7\u0131kan jeton say\u0131s\u0131d\u0131r. \\nK\xfcre\u011Finizde g\xf6r\xfcnt\xfclenir, \xf6rne\u011Fin x4 her tu\u011Flan\u0131n 4 jeton \xfcretece\u011Fi anlam\u0131na gelir. \\nKomboyu art\u0131ran \xe7o\u011Fu y\xfckseltme, onu s\u0131f\u0131rlamak i\xe7in bir ko\u015Ful da ekler. \\nTop herhangi bir tu\u011Flaya \xe7arpmadan k\xfcre\u011Fe geri d\xf6nerse kombo da s\u0131f\u0131rlan\u0131r. \\nBu oldu\u011Funda bir \\"\u0131skalama\\" mesaj\u0131 g\xf6sterilir. \\n\\nHer seferinde bir tu\u011Flaya do\u011Fru ni\u015Fan almaya \xe7al\u0131\u015F\u0131n. \\n\\n## Ni\u015Fan Alma\\n\\nSadece k\xfcre\u011Fin \xfczerindeki top konumu nas\u0131l sekece\u011Fine karar verir. \\nTop k\xfcre\u011Fin tam ortas\u0131na \xe7arparsa, dikey olarak geri sekecektir. \\nBir tarafa daha fazla vurursan\u0131z, daha fazla a\xe7\u0131ya sahip olacakt\u0131r. \\nK\xfcrek h\u0131z\u0131 ve gelen a\xe7\u0131, z\u0131plad\u0131ktan sonra topun y\xf6n\xfc \xfczerinde hi\xe7bir etkiye sahip de\u011Fildir. \\n\\nNi\u015Fan almaya yard\u0131mc\u0131 olan bir\xe7ok y\xfckseltme a\xe7\u0131labilir. \\n\\n## Kilit A\xe7malar\\n\\nBreakout 71\'i ilk kez oynarken, \xe7o\u011Fu y\xfckseltme ve seviye kilitlenir. \\nY\xfckseltmeler, sadece oynayarak ve bir\xe7ok jeton yakalayarak a\xe7\u0131l\u0131r. \\n\u0130lk seviyeler y\xfcksek bir puana ula\u015Farak a\xe7\u0131l\u0131r.\\nDaha sonraki seviyeler hangi avantajlar\u0131 se\xe7ebilece\u011Finize dair bir ko\u015Ful ekler.\\n\\nHer seviyeden sonra birden fazla y\xfckseltme ald\u0131\u011F\u0131n\u0131zda y\xfcksek puanlara ula\u015Fmak \xe7ok daha kolayd\u0131r.\\n\\n## Tekrar at\u0131\u015Flar ve \xfccretsiz y\xfckseltmeler\\n\\n\u0130yi oynad\u0131\u011F\u0131n\u0131zda se\xe7ebilece\u011Finiz ekstra bir y\xfckseltme elde edersiniz: \\n\\n- Seviyeyi {{levelTimeGood}} saniyenin alt\u0131nda tamamlay\u0131n\\n- Kenarlara veya tepeye {{wallBouncedGood}} kereden az vurun\\n- Paralar\u0131n {{catchRateGood}}%\'sini yakalay\u0131n\\n- Tu\u011Flalar\u0131 {{missesGood}} kereden az \u0131skalay\u0131n\\n\\nDaha da iyi yaparsan\u0131z y\xfckseltmeleri atlaman\u0131za izin veren bir tekrar at\u0131\u015F da elde edersiniz: \\n\\n- Seviyeyi {{levelTimeBest}} saniyenin alt\u0131nda tamamlay\u0131n\\n- Kenarlara veya tepeye {{wallBouncedBest}} kereden az vurun\\n- Paralar\u0131n {{catchRateBest}}%\'sini yakalay\u0131n\\n- Tu\u011Flalar\u0131 {{missesBest}} kereden az \u0131skalay\u0131n\\n\\nAyarlardaki bir se\xe7enek bu istatistikleri g\xf6r\xfcnt\xfclemenizi sa\u011Flar","help.help":"Oyun hakk\u0131nda daha fazla bilgi edinin","help.levels":"Seviyeler","help.title":"Yard\u0131m","help.upgrades":"## Y\xfckseltmeler","history.columns.score":"Gol","history.columns.started":"Tarih","history.help":"En iyi {{count}} oyununuzu g\xf6r\xfcn.","history.locked":"Kilidi a\xe7mak i\xe7in en az on oyun oynay\u0131n","history.title":"Ko\u015Fu ge\xe7mi\u015Fi","lab.help":"\u0130stedi\u011Finiz herhangi bir yap\u0131y\u0131 deneyin","lab.instructions":"A\u015Fa\u011F\u0131dan y\xfckseltmeleri se\xe7in, ard\u0131ndan oynayaca\u011F\u0131n\u0131z seviyeyi se\xe7in.","lab.menu_entry":"Yarat\u0131c\u0131 mod","lab.reset":"Hepsini 0\'a s\u0131f\u0131rla","lab.select_level":"Oynamak i\xe7in bir seviye se\xe7in","lab.unlocks_at":"Toplam puan {{score}}oldu\u011Funda a\xe7\u0131l\u0131r","level_up.after_buttons":" {{level}}/{{max}}seviyesini yeni bitirdiniz.","level_up.before_buttons":" {{time}} saniyede {{levelSpawnedCoins}} \xfczerinden {{score}} jeton {{catchGain}} yakalad\u0131n {{timeGain}}.\\n {{levelMisses}} kez {{missesGain}} \u0131skalad\u0131n ve {{levelWallBounces}} kez duvarlara veya tavana \xe7arpt\u0131n{{wallHitsGain}}.\\n{{compliment}}","level_up.compliment_advice":"T\xfcm paralar\u0131 toplamaya \xe7al\u0131\u015F\u0131n, tu\u011Flalar\u0131 asla ka\xe7\u0131rmay\u0131n, duvarlara/tavana \xe7arpmay\u0131n veya ek y\xfckseltmeler kazanmak i\xe7in 30 saniyenin alt\u0131ndaki seviyeyi temizlemeyin.","level_up.compliment_good":"Tebrikler !","level_up.compliment_perfect":"\xc7ok etkileyici, b\xf6yle devam edin!","level_up.pick_upgrade_title":"Bir y\xfckseltme se\xe7in","level_up.plus_one_upgrade":"(+1 y\xfckseltme)","level_up.plus_one_upgrade_and_reroll":"(+1 y\xfckseltme ve +1 yeniden atma)","level_up.reroll":"Tekrar at ({{count}})","level_up.reroll_help":"Yeni se\xe7enekler sunun","level_up.upgrade_perk_to_level":"Seviye {{level}}","main_menu.basic":"","main_menu.basic_help":"","main_menu.colorful_coins":"","main_menu.colorful_coins_help":"","main_menu.comboIncreaseTexts":"","main_menu.comboIncreaseTexts_help":"","main_menu.contrast":"","main_menu.contrast_help":"","main_menu.credit_levels":"","main_menu.donate":" {{hours}} saat oynad\u0131n\u0131z","main_menu.donate_help":"Ba\u011F\u0131\u015F yapmaya ne dersiniz? Ayarlardan bu hat\u0131rlat\u0131c\u0131y\u0131 gizleyebilirsiniz.","main_menu.donation_reminder":"","main_menu.donation_reminder_help":"","main_menu.download_save_file":"","main_menu.download_save_file_help":"","main_menu.extra_bright":"","main_menu.extra_bright_help":"","main_menu.fullscreen":"","main_menu.fullscreen_help":"","main_menu.help_content":"","main_menu.help_help":"","main_menu.help_title":"","main_menu.help_upgrades":"","main_menu.high_score":"En y\xfcksek puan : {{score}}","main_menu.kid":"","main_menu.kid_help":"","main_menu.language":"","main_menu.language_help":"","main_menu.load_save_file":"","main_menu.load_save_file_help":"","main_menu.max_coins":"","main_menu.max_coins_help":"","main_menu.max_particles":"","main_menu.max_particles_help":"","main_menu.mobile":"","main_menu.mobile_help":"","main_menu.normal":"Yeni Oyun","main_menu.normal_help":"Rastgele bir ba\u015Flang\u0131\xe7 avantaj\u0131yla 7 seviye oynay\u0131n","main_menu.pointer_lock":"","main_menu.pointer_lock_help":"","main_menu.record":"","main_menu.record_download":"","main_menu.record_help":"","main_menu.red_miss":"","main_menu.red_miss_help":"","main_menu.reset":"","main_menu.reset_cancel":"","main_menu.reset_confirm":"","main_menu.reset_help":"","main_menu.reset_instruction":"","main_menu.save_file_error":"","main_menu.save_file_loaded":"","main_menu.save_file_loaded_help":"","main_menu.save_file_loaded_ok":"","main_menu.settings_help":"Oyun tarz\u0131n\u0131 ihtiya\xe7lar\u0131n\u0131za ve zevkinize g\xf6re uyarlay\u0131n","main_menu.settings_title":"Ayarlar","main_menu.show_fps":"","main_menu.show_fps_help":"","main_menu.show_stats":"","main_menu.show_stats_help":"","main_menu.sounds":"","main_menu.sounds_help":"","main_menu.starting_perks":"","main_menu.starting_perks_checked":"","main_menu.starting_perks_full_random":"","main_menu.starting_perks_help":"","main_menu.starting_perks_unchecked":"","main_menu.title":"Kopu\u015F 71","main_menu.unlocks":"Kilidi a\xe7\u0131lm\u0131\u015F i\xe7erik","main_menu.unlocks_help":"Kilidini a\xe7t\u0131\u011F\u0131n\u0131z avantajlar\u0131 ve seviyeleri deneyin","play.close_modale_window_tooltip":"Kapal\u0131","play.current_lvl":"Seviye {{level}}/{{max}}","play.menu_label":"Men\xfc","play.menu_tooltip":"Ana men\xfcy\xfc a\xe7","play.missed_ball":"Kay\u0131p","play.mobile_press_to_play":"Oynamak i\xe7in buraya bas\u0131n ve bas\u0131l\u0131 tutun","play.score_tooltip":"Puan\u0131n\u0131z\u0131, y\xfckseltmelerinizi ve daha fazlas\u0131n\u0131 g\xf6r\xfcn","play.stats.coins_catch_rate":"Madeni para yakalama oran\u0131","play.stats.levelMisses":"Hi\xe7bir \u015Feye isabet ettiremedi\u011Finiz \u015Futlar","play.stats.levelTime":"Seviye zaman\u0131","play.stats.levelWallBounces":"Duvar s\u0131\xe7ramalar\u0131","score_panel.close_to_unlock":"Sonraki seviyenin kilidini a\xe7:","score_panel.get_upgrades_to_unlock":" {{missingUpgrades}} al\u0131n ve \\"{{level}}\\" seviyesinin kilidini a\xe7mak i\xe7in {{points}} puan daha kazan\u0131n","score_panel.rerolls_count":" {{rerolls}} yeniden atma biriktirdiniz","score_panel.score_to_unlock":"\\"{{level}}\\" seviyesini a\xe7mak i\xe7in {{points}} puan daha kazan\u0131n","score_panel.title":" {{level}}/{{max}} seviyesinde{{score}} puan","score_panel.upcoming_levels":"Yakla\u015Fan seviyeler :","score_panel.upgrades_picked":"Bu oyun \xe7al\u0131\u015Fmas\u0131nda se\xe7ilen y\xfckseltmeler:","settings.autoplay":"","settings.autoplay_help":"","settings.basic":"Temel grafikler","settings.basic_help":"Daha iyi performans.","settings.colorful_coins":"Renkli madeni paralar","settings.colorful_coins_help":"Madeni paralar her zaman tu\u011Flan\u0131n renginde ortaya \xe7\u0131kar","settings.comboIncreaseTexts":"Alt\u0131nda +X g\xf6ster","settings.comboIncreaseTexts_help":"Kombo artt\u0131\u011F\u0131nda","settings.contrast":"Y\xfcksek Kontrast","settings.contrast_help":"Daha renkli ve koyu g\xf6r\xfcnt\xfc olu\u015Fturma","settings.donation_reminder":"Bana ba\u011F\u0131\u015F yapmay\u0131 hat\u0131rlat","settings.donation_reminder_help":"Oynanan s\xfcreyi ve ba\u011F\u0131\u015F ba\u011Flant\u0131s\u0131n\u0131 ana men\xfcde g\xf6r\xfcn","settings.download_save_file":"Puan ve istatistikleri indir","settings.download_save_file_help":"Bir kay\u0131t dosyas\u0131 al","settings.extra_bright":"Ekstra parlak","settings.extra_bright_help":"Madeni paralar\u0131n ve tu\u011Flalar\u0131n etraf\u0131ndaki hale boyutunu b\xfcy\xfct\xfcr.","settings.fullscreen":"Tam ekran","settings.fullscreen_help":"Oyun ba\u015Flamadan \xf6nce tam ekran olmaya \xe7al\u0131\u015Facak","settings.kid":"\xc7ocuk modu","settings.kid_help":"Gelecek oyunlara \\"daha yava\u015F top\\" ile ba\u015Flay\u0131n.","settings.language":"Dil","settings.language_help":"Oyunun dilini se\xe7in","settings.load_save_file":"Kay\u0131t dosyas\u0131n\u0131 y\xfckle","settings.load_save_file_help":"Cihaz\u0131n\u0131zda bir kay\u0131t dosyas\u0131 se\xe7in","settings.max_coins":"Ekranda maksimum {{max}} jeton var","settings.max_coins_help":"Sadece kozmetik, puan \xfczerinde etkisi yok","settings.mobile":"Mobil mod","settings.mobile_help":"K\xfcrek alt\u0131nda bo\u015Fluk b\u0131rak\u0131r.","settings.pointer_lock":"Fare i\u015Faret\xe7isi kilidi","settings.pointer_lock_help":"Fare imlecini kilitler ve gizler.","settings.precise_lighting":"","settings.precise_lighting_help":"","settings.probabilistic_lighting":"","settings.probabilistic_lighting_help":"","settings.record":"Oyun videolar\u0131n\u0131 kaydedin","settings.record_download":"Videoyu indir ({{size}} MB)","settings.record_help":"Her seviyenin videosunu edinin.","settings.red_miss":"Uyar\u0131y\u0131 ka\xe7\u0131rd\u0131m","settings.red_miss_help":"Vuru\u015F yapmadan a\u015Fa\u011F\u0131 inen toplar\u0131n etraf\u0131nda k\u0131rm\u0131z\u0131 par\xe7ac\u0131klar g\xf6ster.","settings.reset":"Oyunu S\u0131f\u0131rla","settings.reset_cancel":"HAYIR","settings.reset_confirm":"Evet","settings.reset_help":"En y\xfcksek skoru, oyun s\xfcresini ve istatistikleri sil","settings.reset_instruction":"Oyunda kaydetti\u011Finiz t\xfcm ilerlemeyi kaybedeceksiniz, emin misiniz?","settings.save_file_error":"Kay\u0131t dosyas\u0131 y\xfcklenirken hata olu\u015Ftu","settings.save_file_loaded":"Y\xfcklenen dosya kaydedildi","settings.save_file_loaded_help":"Uygulama \u015Fimdi kayd\u0131n\u0131z\u0131 uygulamak i\xe7in yeniden y\xfcklenecek","settings.save_file_loaded_ok":"TAMAM","settings.show_fps":"FPS Sayac\u0131","settings.show_fps_help":"Uygulaman\u0131n performans\u0131n\u0131 izleyin","settings.show_stats":"Ger\xe7ek zamanl\u0131 istatistikleri g\xf6ster","settings.show_stats_help":"Paralar, zaman, sekmeler, \u0131skalar","settings.smooth_lighting":"","settings.smooth_lighting_help":"","settings.sounds":"Oyun sesleri","settings.sounds_help":"Bipler, blooplar ve brrrr","settings.storage_granted":"","settings.storage_refused":"","settings.stress_test":"","settings.stress_test_help":"","starting_perks.checked":"Yeni bir oyuna ba\u015Flad\u0131\u011F\u0131n\u0131zda, bu avantajlardan biri size verilecektir. Bir avantaj\u0131 hari\xe7 tutmak i\xe7in t\u0131klay\u0131n.","starting_perks.help":"Olas\u0131 ba\u015Flang\u0131\xe7 y\xfckseltmelerini se\xe7in","starting_perks.random":"T\xfcm avantajlar kald\u0131r\u0131ld\u0131, se\xe7im rastgele olacak.","starting_perks.title":"Ba\u015Flang\u0131\xe7 avantajlar\u0131","starting_perks.unchecked":"A\u015Fa\u011F\u0131daki avantajlar ba\u015Flang\u0131\xe7 avantaj\u0131 olarak sunulmamaktad\u0131r, ancak havuza eklemek i\xe7in t\u0131klayabilirsiniz.","unlocks.greyed_out_help":"Grile\u015Ftirilmi\u015F y\xfckseltmeler toplam puan\u0131n\u0131z\u0131 art\u0131rarak a\xe7\u0131labilir. Toplam puan, oyunda her puan ald\u0131\u011F\u0131n\u0131zda artar.","unlocks.intro":"Toplam puan\u0131n\u0131z {{ts}}. A\u015Fa\u011F\u0131da oyunun sundu\u011Fu t\xfcm y\xfckseltmeler ve seviyeler bulunmaktad\u0131r. A\u015Fa\u011F\u0131daki bir y\xfckseltmeye veya seviyeye t\u0131klayarak onunla bir test oyunu ba\u015Flat\u0131n.","unlocks.just_unlocked":"Seviye kilidi a\xe7\u0131ld\u0131","unlocks.just_unlocked_plural":"Az \xf6nce {{count}} seviyenin kilidini a\xe7t\u0131n\u0131z","unlocks.level":"<h2> {{out_of}}seviyeden {{unlocked}} tanesinin kilidini a\xe7t\u0131n</h2>\\n<p>\u0130\u015Fte t\xfcm oyun seviyeleri, denemek i\xe7in birine t\u0131kla.</p> ","unlocks.level_description":" {{bricks}} tu\u011Fla, {{colors}} renk ve {{bombs}} bombadan olu\u015Fan {{size}}x{{size}} b\xfcy\xfckl\xfc\u011F\xfcnde bir seviye.","unlocks.minScore":"Kilidi a\xe7mak i\xe7in bir ko\u015Fuda ${{minScore}} \'a ula\u015F\u0131n.","unlocks.minScoreWithPerks":" {{required}} ile ancak {{forbidden}} olmadan bir ko\u015Fuda ${{minScore}} \'a ula\u015F\u0131n.","unlocks.minTotalScore":"Toplam ${{score}}biriktirin","unlocks.reached":"En iyi skorunuz {{reached}}idi.","unlocks.title_upgrades":" {{out_of}}y\xfckseltmeden {{unlocked}} tanesinin kilidini a\xe7t\u0131n\u0131z","upgrades.addiction.name":"Ba\u011F\u0131ml\u0131l\u0131k","upgrades.addiction.tooltip":"+{{lvl}} kombo / tu\u011Fla, kombo bir tu\u011Flay\u0131 k\u0131rd\u0131ktan sonra {{delay}}saniye i\xe7inde s\u0131f\u0131rlan\u0131r.","upgrades.addiction.verbose_description":"Geri say\u0131m yaln\u0131zca her seviyenin ilk tu\u011Flas\u0131 k\u0131r\u0131ld\u0131ktan sonra ba\u015Flar. T\xfcm tu\u011Flalar yok edildi\u011Finde durur.","upgrades.asceticism.name":"Z\xfchd","upgrades.asceticism.tooltip":"+{{combo}} kombo / tu\u011Fla, - {{combo}} jeton yakalamada","upgrades.asceticism.verbose_description":"Kombonuz t\u0131rman\u0131rken paralar\u0131 bir yere saklaman\u0131z gerekecek.","upgrades.ball_attract_ball.help_plural":"Daha g\xfc\xe7l\xfc \xe7ekim kuvveti","upgrades.ball_attract_ball.name":"Yer \xe7ekimi","upgrades.ball_attract_ball.tooltip":"Toplar toplar\u0131n\u0131 \xe7eker","upgrades.ball_attract_ball.verbose_description":"\\"Oyun alan\u0131n\u0131n geni\u015Fli\u011Finin 3/4\'\xfcnden\\" daha uzakta olan toplar birbirini \xe7ekmeye ba\u015Flayacakt\u0131r. \\n\\n\xc7ekim kuvveti, birbirlerinden en uzakta olduklar\u0131nda daha g\xfc\xe7l\xfcd\xfcr. \\n\\nG\xf6kku\u015Fa\u011F\u0131 par\xe7ac\u0131klar\u0131 \xe7ekim kuvvetini sembolize etmek i\xe7in u\xe7acakt\u0131r. Bu avantaj yaln\u0131zca birden fazla topunuz varsa sunulur.","upgrades.ball_attracts_coins.name":"Toplar madeni paralar\u0131 \xe7eker","upgrades.ball_attracts_coins.tooltip":"Madeni paralar en yak\u0131n topu takip eder ve daha yava\u015F d\xfc\u015Fer","upgrades.ball_attracts_coins.verbose_description":"\\"Leke\\" ve \\"hayalet paralar\\" ile birle\u015Ftirdi\u011Finizde, bu, paralarla toplar\u0131n \\"etraf\u0131n\u0131 boyamak\\" i\xe7in kullan\u0131labilir. Ayr\u0131ca, para m\u0131knat\u0131s\u0131 yerine de kullan\u0131labilir.","upgrades.ball_repulse_ball.help_plural":"Daha g\xfc\xe7l\xfc itme kuvveti","upgrades.ball_repulse_ball.name":"Ki\u015Fisel alan","upgrades.ball_repulse_ball.tooltip":"Toplar toplar\u0131 iter","upgrades.ball_repulse_ball.verbose_description":"\xc7eyrek ekran geni\u015Fli\u011Finden daha az uzakl\u0131ktaki toplar birbirini itmeye ba\u015Flayacakt\u0131r. Birbirlerine yak\u0131nlarsa itme kuvveti daha g\xfc\xe7l\xfcd\xfcr. Par\xe7ac\u0131klar bu kuvvetin uyguland\u0131\u011F\u0131n\u0131 sembolize etmek i\xe7in d\u0131\u015Far\u0131 f\u0131rlayacakt\u0131r. Bu avantaj yaln\u0131zca birden fazla topunuz varsa sunulur.","upgrades.base_combo.name":"G\xfc\xe7l\xfc temeller","upgrades.base_combo.tooltip":"Kombo 1 yerine {{coins}} \'dan ba\u015Flar.","upgrades.base_combo.verbose_description":"Kombonuz normalde seviyenin ba\u015F\u0131nda 1\'den ba\u015Flar ve hi\xe7bir \u015Feye \xe7arpmadan z\u0131plad\u0131\u011F\u0131n\u0131zda 1\'e s\u0131f\u0131rlan\u0131r. Bu avantajla, kombo 3 puan daha y\xfcksekte ba\u015Flar, bu y\xfczden her zaman tu\u011Fla ba\u015F\u0131na en az 4 jeton al\u0131rs\u0131n\u0131z. Kombonuz her s\u0131f\u0131rland\u0131\u011F\u0131nda, 1 yerine 4\'e geri d\xf6ner. Topunuz, kombosunun birden y\xfcksek oldu\u011Funu belirtmek i\xe7in biraz par\u0131ldayacakt\u0131r.","upgrades.bigger_explosions.name":"Kaboom","upgrades.bigger_explosions.tooltip":"Daha b\xfcy\xfck patlamalar","upgrades.bigger_explosions.verbose_description":"Varsay\u0131lan patlama 3x3 kareyi temizler, bununla 5x5 kare olur ve paralara gelen darbe de \xf6nemli \xf6l\xe7\xfcde daha g\xfc\xe7l\xfcd\xfcr. Ekran her patlamadan sonra yan\u0131p s\xf6ner (temel mod hari\xe7)","upgrades.bigger_puck.name":"Daha b\xfcy\xfck k\xfcrek","upgrades.bigger_puck.tooltip":"Kolayca daha fazla para yakalay\u0131n.","upgrades.bigger_puck.verbose_description":"Daha b\xfcy\xfck bir k\xfcrek, topu asla \u0131skalamaman\u0131z\u0131 ve daha fazla jeton yakalaman\u0131z\u0131 kolayla\u015Ft\u0131r\u0131r, ayr\u0131ca topun sekme a\xe7\u0131s\u0131n\u0131 hassas bir \u015Fekilde ayarlaman\u0131z\u0131 sa\u011Flar (topun a\xe7\u0131s\u0131 yaln\u0131zca k\xfcre\u011Fe \xe7arpt\u0131\u011F\u0131 yere ba\u011Fl\u0131d\u0131r).","upgrades.bricks_attract_ball.name":"Tu\u011Flalar toplar\u0131 \xe7eker","upgrades.bricks_attract_ball.tooltip":"Top \xe7arpaca\u011F\u0131 ilk {{count}} tu\u011Flaya do\u011Fru gider.","upgrades.bricks_attract_ball.verbose_description":"Etkisi daha y\xfcksek seviyelerde daha g\xfc\xe7l\xfcd\xfcr. Etki durmadan \xf6nce vurabilecek tu\u011Fla say\u0131s\u0131 da daha y\xfcksektir. Etki, top diske \xe7arpt\u0131\u011F\u0131nda yeniden silahlan\u0131r.","upgrades.bricks_attract_coins.name":"Tu\u011Flalar madeni paralar\u0131 \xe7eker","upgrades.bricks_attract_coins.tooltip":"Onlar\u0131n orada kalmalar\u0131na yard\u0131mc\u0131 olur","upgrades.bricks_attract_coins.verbose_description":"","upgrades.clairvoyant.name":"Durug\xf6r\xfc sahibi","upgrades.clairvoyant.tooltip":"Yakla\u015Fan seviyeleri, tu\u011Fla HP\'sini ve top y\xf6n\xfcn\xfc g\xf6r\xfcn","upgrades.clairvoyant.verbose_description":"Do\u011Fru y\xfckseltmeleri se\xe7menize ve sa\u011Flam tu\u011Flalarla neler olup bitti\u011Fini anlaman\u0131za yard\u0131mc\u0131 olur. Seviye 2 ve 3, \u015F\xfcpheli fayda hakk\u0131nda ek bilgi getirir (d\xf6ng\xfc modunda eri\u015Filebilir)","upgrades.coin_magnet.help_plural":"Madeni paralar \xfczerinde daha g\xfc\xe7l\xfc etki","upgrades.coin_magnet.name":"Madeni para m\u0131knat\u0131s\u0131","upgrades.coin_magnet.tooltip":"K\xfcrek paralar\u0131 \xe7ekiyor","upgrades.coin_magnet.verbose_description":"Madeni paralar\u0131 k\xfcre\u011Fe y\xf6nlendirir. Madeni para zaten k\xfcre\u011Fe yak\u0131nsa etkisi daha g\xfc\xe7l\xfcd\xfcr.","upgrades.compound_interest.name":"Bile\u015Fik faiz","upgrades.compound_interest.tooltip":"+{{lvl}} kombo her k\u0131r\u0131lan tu\u011Fla i\xe7in, jeton kaybedildi\u011Finde s\u0131f\u0131rlan\u0131r","upgrades.compound_interest.verbose_description":"Her tu\u011Flay\u0131 k\u0131rd\u0131\u011F\u0131n\u0131zda kombonuz bir artacak ve k\u0131rd\u0131\u011F\u0131n\u0131z her tu\u011Flayla birlikte daha fazla jeton ortaya \xe7\u0131kacakt\u0131r. \\nAncak, bu jetonlar\u0131n her birini k\xfcre\u011Finizle yakalad\u0131\u011F\u0131n\u0131zdan emin olun, \xe7\xfcnk\xfc kaybedilen jeton kombonuzu s\u0131f\u0131rlayacakt\u0131r.\\nKombonuz minimumun \xfczerine \xe7\u0131kt\u0131\u011F\u0131nda, oyun alan\u0131n\u0131n alt k\u0131sm\u0131nda jetonlar\u0131n oraya gitmemesi gerekti\u011Fini hat\u0131rlatan k\u0131rm\u0131z\u0131 bir \xe7izgi olacakt\u0131r.","upgrades.concave_puck.name":"\u0130\xe7b\xfckey k\xfcrek","upgrades.concave_puck.tooltip":"Dikey ni\u015Fan alma hassasiyetini art\u0131r\u0131r","upgrades.concave_puck.verbose_description":"Toplar d\xfcz bir \u015Fekilde yukar\u0131 do\u011Fru \xe7\u0131karak ba\u015Flar ve daha az a\xe7\u0131yla z\u0131plar.","upgrades.corner_shot.name":"K\xf6\u015Fe vuru\u015Fu","upgrades.corner_shot.tooltip":"K\xfcre\u011Finizin ekran\u0131n s\u0131n\u0131rlar\u0131yla \xf6rt\xfc\u015Fmesini sa\u011Flar","upgrades.corner_shot.verbose_description":"K\xf6\u015Felerde ni\u015Fan almaya yard\u0131mc\u0131 olur. Daha ileri seviyeler daha uza\u011Fa gitmenizi sa\u011Flar.","upgrades.etherealcoins.name":"Uzayda Madeni Paralar","upgrades.etherealcoins.tooltip":"Madeni paralar art\u0131k yer \xe7ekiminden etkilenmiyor","upgrades.etherealcoins.verbose_description":"Paralar birka\xe7 kez z\u0131plad\u0131ktan sonra bile h\u0131zlar\u0131n\u0131 koruyacak ve art\u0131k yer \xe7ekiminden etkilenmeyecekler.","upgrades.extra_levels.name":"5 dakika daha","upgrades.extra_levels.tooltip":"7 yerine {{count}} seviye oyna","upgrades.extra_levels.verbose_description":"Varsay\u0131lan oyun en fazla 7 seviye s\xfcrebilir, ard\u0131ndan oyun biter. \\n\\nBu avantaj\u0131n her seviyesi bir seviye daha yukar\u0131 \xe7\u0131kman\u0131z\u0131 sa\u011Flar. Son seviyeler genellikle en fazla puan\u0131 ald\u0131\u011F\u0131n\u0131z seviyelerdir, bu y\xfczden fark dramatik olabilir.","upgrades.extra_life.help_plural":"(Son) topunuz kaybolmak yerine ({{lvl}} kez) dipte sekecektir.","upgrades.extra_life.name":"Ekstra Hayat","upgrades.extra_life.tooltip":"Top, kaybedilmeden \xf6nce alt \xe7izgide bir kez sekecektir.","upgrades.extra_life.verbose_description":"Normalde bir topunuz vard\u0131r ve oyun onu b\u0131rakt\u0131\u011F\u0131n\u0131z anda biter.\\n\\nBu yetenek, ekran\u0131n alt\u0131na bir kez topu kurtaracak ve bu s\xfcre\xe7te k\u0131r\u0131lacak beyaz bir \xe7ubuk ekler. \\n\\nEkran\u0131n alt\u0131nda bir top her z\u0131plad\u0131\u011F\u0131nda bu yetene\u011Fin bir seviyesini kaybedersiniz.","upgrades.forgiving.name":"Ba\u011F\u0131\u015Flay\u0131c\u0131","upgrades.forgiving.tooltip":"Molalar\u0131 ka\xe7\u0131rmak, komboyu bir kerede azaltmak yerine kademeli olarak azalt\u0131r.","upgrades.forgiving.verbose_description":"Her seviyede ilk \u0131skalama bedava, sonra kombonun %10\'u, sonra %20\'si...","upgrades.fountain_toss.name":"\xc7e\u015Fme at\u0131\u015F\u0131","upgrades.fountain_toss.tooltip":"Birka\xe7 jetonu ka\xe7\u0131rd\u0131\u011F\u0131n\u0131zda bir miktar kombo kazan\u0131n.","upgrades.fountain_toss.verbose_description":"Bir jetonu ka\xe7\u0131rd\u0131\u011F\u0131n\u0131zda ve kombonuz {{max}}alt\u0131ndaysa, kombonuzun bir artma olas\u0131l\u0131\u011F\u0131 {{lvl}}/ kombodur.","upgrades.ghost_coins.name":"Hayalet paralar","upgrades.ghost_coins.tooltip":"Madeni paralar yava\u015F\xe7a tu\u011Flalar\u0131n aras\u0131ndan ge\xe7iyor","upgrades.ghost_coins.verbose_description":"Bu bir hata de\u011Fil, bir \xf6zellik! Madeni paralar tu\u011Flalar\u0131n i\xe7inden yava\u015F\xe7a u\xe7ar. Daha y\xfcksek seviyeler daha h\u0131zl\u0131 hareket etmelerini sa\u011Flar.","upgrades.helium.name":"Helyum","upgrades.helium.tooltip":"Yer\xe7ekimi k\xfcre\u011Fin solunda ve sa\u011F\u0131nda tersine d\xf6nd\xfc","upgrades.helium.verbose_description":"Bu, paralar\u0131 etkileyecek ve siz onlar\u0131 almaya haz\u0131r olana kadar paralar\u0131n havada as\u0131l\u0131 kalmas\u0131na neden olacakt\u0131r.","upgrades.hot_start.name":"S\u0131cak ba\u015Flang\u0131\xe7","upgrades.hot_start.tooltip":" {{start}}kombosundan ba\u015Fla, saniyede{{loss}} kombo","upgrades.hot_start.verbose_description":"Her seviyenin ba\u015F\u0131nda kombonuz +30 puanla ba\u015Flayacak, ancak daha sonra her saniye bir puan d\xfc\u015Fecek. Etki di\u011Fer avantajlarla birikiyor.","upgrades.hypnosis.name":"Hipnoz","upgrades.hypnosis.tooltip":"Bir tu\u011Flan\u0131n rengi de\u011Fi\u015Fti\u011Finde, o paray\u0131 en yak\u0131n topa \u0131\u015F\u0131nlay\u0131n ve tu\u011Flay\u0131 lekeleme yetene\u011Fini yeniden y\xfckleyin.","upgrades.hypnosis.verbose_description":"","upgrades.implosions.name":"\u0130\xe7 patlamalar","upgrades.implosions.tooltip":"Patlamalar paralar\u0131 d\u0131\u015Far\u0131 atmak yerine i\xe7eri \xe7ekiyor","upgrades.implosions.verbose_description":"Patlama kuvveti di\u011Fer \u015Fekilde uygulan\u0131r. Daha ileri seviyeler \\"daha b\xfcy\xfck patlama\\" olarak i\u015Flev g\xf6r\xfcr.","upgrades.instant_upgrade.name":"An\u0131nda y\xfckseltme","upgrades.instant_upgrade.tooltip":"\u015Eimdi +2 y\xfckseltme, oyun sonuna kadar -1 se\xe7im.","upgrades.instant_upgrade.verbose_description":"Hemen iki y\xfckseltme se\xe7in, b\xf6ylece birini \xfccretsiz, di\u011Ferini de bu avantaj\u0131 elde etmek i\xe7in kullan\u0131lan\u0131 geri \xf6deyin. Y\xfckseltmeleri se\xe7mek i\xe7in her sonraki men\xfcde se\xe7ebilece\u011Finiz daha az se\xe7enek olacak.","upgrades.left_is_lava.name":"Sol taraftan ka\xe7\u0131n\u0131n","upgrades.left_is_lava.tooltip":"+ K\u0131r\u0131lan tu\u011Fla ba\u015F\u0131na{{lvl}} kombo. Top ekran\u0131n sol taraf\u0131na \xe7arparsa kombo s\u0131f\u0131rlan\u0131r","upgrades.left_is_lava.verbose_description":"Bir tu\u011Flay\u0131 k\u0131rd\u0131\u011F\u0131n\u0131zda, kombonuz bir artacak, b\xf6ylece k\u0131rd\u0131\u011F\u0131n\u0131z sonraki t\xfcm tu\u011Flalardan bir jeton daha alacaks\u0131n\u0131z.\\n\\nAncak, kombonuz topunuz sol tarafa \xe7arpt\u0131\u011F\u0131 anda s\u0131f\u0131rlanacakt\u0131r. \\n\\nKombonuz y\xfckseldi\u011Fi anda, sol taraf k\u0131rm\u0131z\u0131ya d\xf6nerek onlara \xe7arpmaman\u0131z gerekti\u011Fini hat\u0131rlat\u0131r.\\n","upgrades.limitless.name":"S\u0131n\u0131rs\u0131z","upgrades.limitless.tooltip":"T\xfcm y\xfckseltmelerin maksimum seviyesini {{lvl}} kadar art\u0131r\u0131n","upgrades.limitless.verbose_description":"Bu yetene\u011Fi se\xe7mek, onun kendi s\u0131n\u0131r\u0131n\u0131 da bir artt\u0131r\u0131r ve tekrar se\xe7menize olanak tan\u0131r.","upgrades.metamorphosis.name":"Ba\u015Fkala\u015F\u0131m","upgrades.metamorphosis.tooltip":"Her madeni para, {{lvl}} tu\u011Flay\u0131 kendi rengiyle lekeleyebilir","upgrades.metamorphosis.verbose_description":"Bu yetenekle, madeni paralar geldikleri tu\u011Flan\u0131n renginde olacak ve dokunduklar\u0131 ilk tu\u011Flay\u0131 ayn\u0131 renge boyayacak. Madeni paralar onlar\u0131 k\u0131ran topun h\u0131z\u0131yla ortaya \xe7\u0131kar, bu da \\"boyamak\\" istedi\u011Finiz tu\u011Flalara do\u011Fru biraz ni\u015Fan alabilece\u011Finiz anlam\u0131na gelir. 1. seviyede, her madeni para \\"harcanmadan\\" ve i\xe7i bo\u015F g\xf6r\xfcnmeden \xf6nce 1 tu\u011Flay\u0131 boyayabilir.","upgrades.minefield.name":"May\u0131n tarlas\u0131","upgrades.minefield.tooltip":"Ekrandaki bomba tu\u011Flas\u0131 ba\u015F\u0131na +{{lvl}} kombo","upgrades.minefield.verbose_description":"Bir tu\u011Fla yerle\u015Ftirildi\u011Finde komboya +lvl ekler, tu\u011Fla yok edildi\u011Finde -lvl ekler ve temel komboyu tu\u011Fla say\u0131s\u0131yla lvl \xe7arp\u0131m\u0131 kadar y\xfckseltir","upgrades.multiball.name":"\xc7oklu top","upgrades.multiball.tooltip":"Her seviyeye {{count}} topla ba\u015Flay\u0131n.","upgrades.multiball.verbose_description":"Breakout 71\'de topu d\xfc\u015F\xfcrd\xfc\u011F\xfcn\xfcz anda kaybedersiniz. \\n\\nBu avantajla iki top elde edersiniz ve bu y\xfczden birini kaybetmeyi g\xf6ze alabilirsiniz. \\n\\nKaybedilen toplar bir sonraki seviyede geri gelir. \\n\\nBirden fazla topa sahip olmak baz\u0131 ek avantajlar\u0131 kullan\u0131labilir hale getirir ve tabii ki seviyeyi daha h\u0131zl\u0131 temizler.","upgrades.nbricks.name":"S\u0131k\u0131 \xf6rneklem b\xfcy\xfckl\xfc\u011F\xfc","upgrades.nbricks.tooltip":"K\xfcrek s\u0131\xe7ramas\u0131 ba\u015F\u0131na tam olarak {{lvl}} tu\u011Fla vurun +{{lvl}} kombo i\xe7in, aksi takdirde s\u0131f\u0131rlan\u0131r","upgrades.nbricks.verbose_description":"Bu tu\u011Flalar\u0131 yok etmeniz gerekmiyor ancak onlara vurman\u0131z gerekiyor. Patlamalarla yok edilen tu\u011Flalar say\u0131lmaz","upgrades.one_more_choice.name":"Ekstra se\xe7enek","upgrades.one_more_choice.tooltip":"Daha fazla seviye atlama, listede {{lvl}} daha fazla se\xe7enek sunacak","upgrades.one_more_choice.verbose_description":"Her y\xfckseltme men\xfcs\xfc bir se\xe7ene\u011Fe daha sahip olacak. Se\xe7ebilece\u011Finiz y\xfckseltme say\u0131s\u0131n\u0131 art\u0131rmaz.","upgrades.passive_income.name":"Pasif gelir","upgrades.passive_income.tooltip":"+{{lvl}} kombo / tu\u011Fla, k\xfcrek son {{time}}saniyede hareket etmedi\u011Fi s\xfcrece, bunun yerine s\u0131f\u0131rlan\u0131r","upgrades.passive_income.verbose_description":"Baz\u0131 \xf6zellikler, toplar\u0131n hi\xe7bir \u015Fey yapman\u0131za gerek kalmadan istedi\u011Finizi yapmas\u0131na yard\u0131mc\u0131 olabilir.","upgrades.picky_eater.name":"Se\xe7ici yiyen","upgrades.picky_eater.tooltip":"+{{lvl}} kombo her tu\u011Fla k\u0131r\u0131ld\u0131\u011F\u0131nda, top rengi de\u011Fi\u015Fti\u011Finde s\u0131f\u0131rlan\u0131r","upgrades.picky_eater.verbose_description":"Topunuzla ayn\u0131 renkte bir tu\u011Flay\u0131 k\u0131rd\u0131\u011F\u0131n\u0131zda, kombonuz bir artar. \\nE\u011Fer farkl\u0131 bir renkteyse, top yeni rengi al\u0131r, ancak kombo s\u0131f\u0131rlan\u0131r, tabii topun renginde tu\u011Fla kalmam\u0131\u015Fsa. \\nMinimumunuzdan daha y\xfcksek bir kombo elde etti\u011Finizde, yanl\u0131\u015F renkteki tu\u011Flalar k\u0131rm\u0131z\u0131 bir kenarl\u0131k al\u0131r. \\nBirden fazla topunuz varsa, bunlardan biri bir tu\u011Flaya \xe7arpt\u0131\u011F\u0131nda hepsi renk de\u011Fi\u015Ftirir.","upgrades.pierce.name":"Delme","upgrades.pierce.tooltip":"K\xfcrek z\u0131plamas\u0131ndan sonra top {{count}} tu\u011Flay\u0131 deldi","upgrades.pierce.verbose_description":"Top normalde bir \u015Feye dokundu\u011Fu anda z\u0131plar. Bu avantajla, 3 tu\u011Fla k\u0131r\u0131l\u0131ncaya kadar y\xf6r\xfcngesine devam eder. \\n\\nBundan sonra, 4. tu\u011Flada z\u0131plar ve sayac\u0131 s\u0131f\u0131rlamak i\xe7in k\xfcre\u011Fe dokunman\u0131z gerekir.","upgrades.pierce_color.name":"Renk delme","upgrades.pierce_color.tooltip":"+{{lvl}} topun rengindeki tu\u011Flalara hasar","upgrades.pierce_color.verbose_description":"Bir top ayn\u0131 renkteki bir tu\u011Flaya \xe7arpt\u0131\u011F\u0131nda, engellenmeden ge\xe7ecektir. \\n\\nFarkl\u0131 renkteki bir tu\u011Flaya ula\u015Ft\u0131\u011F\u0131nda, onu k\u0131racak, rengini alacak ve sekecektir.\\n\\nSa\u011Flam tu\u011Flalar\u0131n\u0131z varsa, top yine de ayn\u0131 renkteki bir tu\u011Fladan sekebilir.","upgrades.puck_repulse_ball.help_plural":"Daha g\xfc\xe7l\xfc itme kuvveti","upgrades.puck_repulse_ball.name":"Yumu\u015Fak ini\u015F","upgrades.puck_repulse_ball.tooltip":"K\xfcrek toplar\u0131 iter","upgrades.puck_repulse_ball.verbose_description":"Bir top k\xfcre\u011Fe yakla\u015Ft\u0131\u011F\u0131nda yava\u015Flamaya ba\u015Flayacak ve hatta k\xfcre\u011Fe de\u011Fmeden bile z\u0131plamaya ba\u015Flayacakt\u0131r.","upgrades.rainbow.name":"G\xf6kku\u015Fa\u011F\u0131","upgrades.rainbow.tooltip":"Paralar g\xf6kku\u015Fa\u011F\u0131 renklerinde ortaya \xe7\u0131kar.","upgrades.rainbow.verbose_description":"Her seviye renkli jetonlar\u0131n oran\u0131n\u0131 art\u0131r\u0131r. Renk seviye zaman\u0131na ba\u011Fl\u0131d\u0131r.","upgrades.reach.name":"Yukar\u0131dan a\u015Fa\u011F\u0131ya","upgrades.reach.tooltip":"En alt s\u0131radaki N tu\u011Flas\u0131na dokunmak komboyu s\u0131f\u0131rlar. Aksi takdirde, +N kombo","upgrades.reach.verbose_description":"E\u011Fer sadece bir s\u0131ra tu\u011Fla varsa veya en alttaki tu\u011Fla s\u0131ras\u0131 oyunun t\xfcm geni\u015Fli\u011Fini kapl\u0131yorsa, bu avantaj hi\xe7bir i\u015Fe yaramaz. Aksi takdirde, bu en alttaki s\u0131ray\u0131 k\u0131rmak komboyu s\u0131f\u0131rlarken, ba\u015Fka bir \u015Feyi k\u0131rmak komboyu o en alttaki s\u0131rada bulunan tu\u011Fla say\u0131s\u0131 kadar art\u0131r\u0131r. \\n\\nEn alttaki s\u0131ra k\u0131rm\u0131z\u0131yla vurgulanacakt\u0131r.","upgrades.respawn.name":"Yeniden canlanma","upgrades.respawn.tooltip":" {{delay}}saniye sonra tu\u011Flalar\u0131n %{{percent}}\'\u0131 yeniden ortaya \xe7\u0131kar.","upgrades.respawn.verbose_description":"Baz\u0131 par\xe7ac\u0131k efektleri tu\u011Flalar\u0131n nerede belirece\u011Fini size bildirecektir.","upgrades.right_is_lava.name":"Sa\u011F taraftan ka\xe7\u0131n\u0131n","upgrades.right_is_lava.tooltip":"Tu\u011Fla ba\u015F\u0131na +{{lvl}} kombo. Top ekran\u0131n sa\u011F taraf\u0131na \xe7arparsa kombo s\u0131f\u0131rlan\u0131r","upgrades.right_is_lava.verbose_description":"Bir tu\u011Flay\u0131 k\u0131rd\u0131\u011F\u0131n\u0131zda, kombonuz bir artacak, b\xf6ylece k\u0131rd\u0131\u011F\u0131n\u0131z sonraki t\xfcm tu\u011Flalardan bir jeton daha alacaks\u0131n\u0131z.\\n\\nAncak, topunuz sa\u011F tarafa \xe7arpt\u0131\u011F\u0131 anda kombonuz s\u0131f\u0131rlanacakt\u0131r.\\n\\nKombonuz y\xfckseldi\u011Fi anda, onlara \xe7arpmaktan ka\xe7\u0131nman\u0131z gerekti\u011Fini hat\u0131rlatmak i\xe7in sa\u011F taraf k\u0131rm\u0131z\u0131 olur.","upgrades.sacrifice.help_l1":"Bir can\u0131 kaybetmek t\xfcm tu\u011Flalar\u0131 temizler","upgrades.sacrifice.help_over":"Komboya {{lvl}}can eklendi\u011Finde t\xfcm tu\u011Flalar temizlenir","upgrades.sacrifice.name":"Kurban etmek","upgrades.sacrifice.verbose_description":"Bu, komboyu olduk\xe7a y\xfckse\u011Fe \xe7\u0131karabilir.","upgrades.sapper.help_plural":"\u0130lk k\u0131r\u0131lan {{lvl}} tu\u011Fla bombaya d\xf6n\xfc\u015F\xfcr.","upgrades.sapper.name":"Kazmac\u0131","upgrades.sapper.tooltip":"\u0130lk k\u0131r\u0131lan tu\u011Fla bombaya d\xf6n\xfc\u015F\xfcr.","upgrades.sapper.verbose_description":"Sadece ortadan kaybolmak yerine, k\u0131rd\u0131\u011F\u0131n\u0131z ilk tu\u011Fla bir bomba tu\u011Flas\u0131yla de\u011Fi\u015Ftirilecektir. K\xfcrek \xfczerinde topu sektirmek, efekti yeniden etkinle\u015Ftirir. Bu yetene\u011Fi seviyelendirmek, daha fazla bomba yerle\u015Ftirmenize olanak tan\u0131r.","upgrades.shocks.name":"\u015Eoklar","upgrades.shocks.tooltip":"Patlay\u0131c\u0131 top \xe7arp\u0131\u015Fmalar\u0131","upgrades.shocks.verbose_description":"\u0130ki top \xe7arp\u0131\u015Ft\u0131\u011F\u0131nda h\u0131zlar\u0131 de\u011Fi\u015Fir, bir patlama meydana gelir ve onlar\u0131 ay\u0131rmak i\xe7in ek h\u0131z kazan\u0131rlar.","upgrades.shunt.name":"\u015Eant","upgrades.shunt.tooltip":"Kombonuzun {{percent}}%\'sini seviyeler aras\u0131nda tutun","upgrades.shunt.verbose_description":"E\u011Fer s\u0131cak ba\u015Flatma \xf6zelli\u011Finiz de varsa, s\u0131cak ba\u015Flatma \xf6zelli\u011Fi mevcut kombinasyona eklenir","upgrades.side_flip.name":"Sa\u011F elini kullanan","upgrades.side_flip.tooltip":"Sa\u011Fdan k\u0131r\u0131lan tu\u011Fla ba\u015F\u0131na +{{lvl}} kombo, aksi takdirde -{{loss}} ","upgrades.side_flip.verbose_description":"Bir kombo kazanmak i\xe7in tu\u011Flan\u0131n sa\u011F taraf\u0131na vurun, ancak sol taraf\u0131na vurmaktan ka\xe7\u0131n\u0131n \xe7\xfcnk\xfc bu 2 komboyu kald\u0131r\u0131r. \xdcstten ve alttan vurman\u0131n bir etkisi yoktur.","upgrades.side_kick.name":"Solak","upgrades.side_kick.tooltip":"Soldan k\u0131r\u0131lan tu\u011Fla ba\u015F\u0131na +{{lvl}} kombo, aksi takdirde -{{loss}} ","upgrades.side_kick.verbose_description":"Tu\u011Flan\u0131n sol taraf\u0131na vurarak bir kombo elde edin, ancak sa\u011F taraf\u0131na vurmaktan ka\xe7\u0131n\u0131n \xe7\xfcnk\xfc bu 2 komboyu kald\u0131r\u0131r. \xdcstten ve alttan vurman\u0131n bir etkisi yoktur.","upgrades.skip_last.help_plural":"Son {{lvl}} tu\u011Fla patlayacak.","upgrades.skip_last.name":"Kolay Temizlik","upgrades.skip_last.tooltip":"Son tu\u011Fla patlayacak.","upgrades.skip_last.verbose_description":"Bir sonraki seviyeye ge\xe7mek i\xe7in t\xfcm tu\u011Flalar\u0131 k\u0131rman\u0131z gerekir. Ancak son tu\u011Flalar\u0131 elde etmek zor olabilir. \\n\\nBir seviyeyi erken bitirmek, y\xfckseltme s\u0131ras\u0131nda ekstra se\xe7enekler sunar. Tu\u011Flalar\u0131 asla ka\xe7\u0131rmamak da \xe7ok faydal\u0131d\u0131r. \\n\\nYani son tu\u011Flalar\u0131 k\u0131rmakta zorlan\u0131yorsan\u0131z, bu yetene\u011Fi birka\xe7 kez elde etmek yard\u0131mc\u0131 olabilir.","upgrades.slow_down.name":"Daha yava\u015F top","upgrades.slow_down.tooltip":"Top daha yava\u015F hareket ediyor","upgrades.slow_down.verbose_description":"Top nispeten yava\u015F ba\u015Flar, ancak oyununuzun her seviyesinde biraz daha h\u0131zl\u0131 ba\u015Flayacakt\u0131r. \\n\\nAyr\u0131ca bir seviyede \xe7ok zaman ge\xe7irirseniz h\u0131zlanacakt\u0131r. \\n\\nBu avantaj onu daha y\xf6netilebilir hale getirir. \\n\\nMen\xfcde \xe7ocuk modunu etkinle\u015Ftirerek her seferinde ba\u015Flang\u0131\xe7ta alabilirsiniz.","upgrades.smaller_puck.help_plural":"Daha k\xfc\xe7\xfck k\xfcrek ve daha y\xfcksek taban kombinasyonu","upgrades.smaller_puck.name":"Daha k\xfc\xe7\xfck k\xfcrek","upgrades.smaller_puck.tooltip":"Ayr\u0131ca +5 temel kombo verir","upgrades.smaller_puck.verbose_description":"Bu, k\xfcre\u011Fi daha k\xfc\xe7\xfck yapar, bu da teoride baz\u0131 k\xf6\u015Fe vuru\u015Flar\u0131n\u0131 kolayla\u015Ft\u0131r\u0131r, ancak ger\xe7ekte sadece zorlu\u011Fu art\u0131r\u0131r.\\n\\nBu y\xfczden, bunu se\xe7tikten sonra k\u0131raca\u011F\u0131n\u0131z t\xfcm tu\u011Flalar i\xe7in tu\u011Fla ba\u015F\u0131na +5 jetonluk g\xfczel bir bonus da al\u0131rs\u0131n\u0131z.","upgrades.soft_reset.name":"Yumu\u015Fak s\u0131f\u0131rlama","upgrades.soft_reset.tooltip":"Kombo s\u0131f\u0131rlamalar\u0131 % {{percent}}tutar","upgrades.soft_reset.verbose_description":"Bir kombo s\u0131f\u0131rlaman\u0131n etkisini s\u0131n\u0131rlay\u0131n.","upgrades.streak_shots.name":"Vuru\u015F serisi","upgrades.streak_shots.tooltip":"K\xfcrek \xe7ekmeden \xf6nce \xe7ok say\u0131da tu\u011Fla k\u0131rarsan\u0131z daha fazla para kazan\u0131rs\u0131n\u0131z.","upgrades.streak_shots.verbose_description":"Her tu\u011Flay\u0131 k\u0131rd\u0131\u011F\u0131n\u0131zda, kombonuz bir artar. \\n\\nAncak, top k\xfcre\u011Finize de\u011Fdi\u011Fi anda kombo varsay\u0131lan de\u011Ferine s\u0131f\u0131rlan\u0131r.\\n\\nKombonuz temel de\u011Ferin \xfczerine \xe7\u0131kt\u0131\u011F\u0131nda, k\xfcre\u011Finizin topla dokundu\u011Funuzda kombonuzu yok edece\u011Fini size hat\u0131rlatmak i\xe7in k\u0131rm\u0131z\u0131 bir kenar\u0131 olacakt\u0131r.","upgrades.sturdy_bricks.name":"Sa\u011Flam tu\u011Flalar","upgrades.sturdy_bricks.tooltip":"+{{lvl}} tu\u011Fla HP, k\u0131r\u0131ld\u0131\u011F\u0131nda ortaya \xe7\u0131kan +{{percent}}% para","upgrades.sturdy_bricks.verbose_description":"Bu yetene\u011Fin her seviyesi t\xfcm tu\u011Flalara bir HP ekler. HP say\u0131s\u0131n\u0131 \\"clairvoyant\\" yetene\u011Fiyle g\xf6rebilirsiniz. \\"Piercing\\" yetene\u011Fini alarak top hasar\u0131n\u0131 art\u0131rabilirsiniz. Yetene\u011Fin her seviyesi +50% jeton spawn\'\u0131 ekler.","upgrades.superhot.name":"S\xdcPER SICAK","upgrades.superhot.tooltip":"K\xfcrek hareket ettik\xe7e zaman da hareket eder.","upgrades.superhot.verbose_description":"S\xdcPER SICAK S\xdcPER SICAK S\xdcPER SICAK S\xdcPER SICAK","upgrades.telekinesis.help_plural":"Top \xfczerinde daha g\xfc\xe7l\xfc etki","upgrades.telekinesis.name":"Telekinezi","upgrades.telekinesis.tooltip":"K\xfcrek topun y\xf6r\xfcngesini kontrol eder","upgrades.telekinesis.verbose_description":"Top yukar\u0131 do\u011Fru giderken onu kontrol ediyorsun.","upgrades.top_is_lava.name":"S\u0131n\u0131r g\xf6ky\xfcz\xfcd\xfcr","upgrades.top_is_lava.tooltip":"Tu\u011Fla ba\u015F\u0131na +{{lvl}} kombo, tepeye vuruldu\u011Funda s\u0131f\u0131rlan\u0131r","upgrades.top_is_lava.verbose_description":"Bir tu\u011Flay\u0131 k\u0131rd\u0131\u011F\u0131n\u0131zda, kombonuz bir artar. Ancak, topunuz ekran\u0131n tepesine \xe7arpt\u0131\u011F\u0131 anda kombonuz s\u0131f\u0131rlan\u0131r. \\n\\nKombonuz minimumun \xfczerinde oldu\u011Funda, ona \xe7arpmaman\u0131z gerekti\u011Fini hat\u0131rlatmak i\xe7in \xfcstte k\u0131rm\u0131z\u0131 bir \xe7ubuk belirir.","upgrades.trampoline.name":"Trambolin","upgrades.trampoline.tooltip":"+ k\xfcrek s\u0131\xe7ramas\u0131 ba\u015F\u0131na{{lvl}} kombo,- herhangi bir s\u0131n\u0131rda s\u0131\xe7rama ba\u015F\u0131na{{lvl}} kombo","upgrades.trampoline.verbose_description":"S\u0131f\u0131rlama ko\u015Fulu eklemeyen nadir kombo y\xfckseltmelerinden biri","upgrades.transparency.name":"\u015Eeffafl\u0131k","upgrades.transparency.tooltip":"Top ekranda ne kadar y\xfcksekteyse o kadar \u015Feffaf olur. Ne kadar \u015Feffafsa o kadar \xe7ok jeton \xfcretir.","upgrades.transparency.verbose_description":"Daha y\xfcksek seviyeler topun daha \xe7abuk \u015Feffaf olmas\u0131n\u0131 sa\u011Flar ve puan bonusunu art\u0131r\u0131r.","upgrades.trickledown.name":"S\u0131zma ekonomisi","upgrades.trickledown.tooltip":"Paralar ekran\u0131n \xfcst k\u0131sm\u0131nda g\xf6r\xfcn\xfcr.","upgrades.trickledown.verbose_description":"Kenara biraz para ay\u0131rman\u0131za yard\u0131mc\u0131 olabilir.","upgrades.unbounded.name":"Dolgu","upgrades.unbounded.tooltip":"Seviyenin sa\u011F\u0131na ve soluna bo\u015Fluk ekler, ancak k\xfcre\u011Finiz o kadar uza\u011Fa gidemez.","upgrades.unbounded.verbose_description":"Bir di\u011Fer geli\u015Ftirme ise k\xfcre\u011Finizin eri\u015Fim mesafesini uzatman\u0131za yard\u0131mc\u0131 olabilir.","upgrades.viscosity.name":"Viskozite","upgrades.viscosity.tooltip":"Daha yava\u015F para d\xfc\u015F\xfc\u015F\xfc","upgrades.viscosity.verbose_description":"Madeni paralar normalde yer \xe7ekimi ve patlamalarla olduk\xe7a y\xfcksek h\u0131zlara ula\u015F\u0131r. \\n\\nBu yetenek, sanki bir t\xfcr viskoz s\u0131v\u0131n\u0131n i\xe7indeymi\u015F gibi s\xfcrekli olarak yava\u015Flamalar\u0131n\u0131 sa\u011Flar. \\n\\nBu, onlar\u0131 yakalamay\u0131 kolayla\u015Ft\u0131r\u0131r ve madeni paran\u0131n hareketini etkileyen yeteneklerle g\xfczel bir \u015Fekilde birle\u015Fir.","upgrades.wind.help_plural":"Daha g\xfc\xe7l\xfc r\xfczgar kuvveti","upgrades.wind.name":"R\xfczg\xe2r","upgrades.wind.tooltip":"K\xfcrek pozisyonu r\xfczgar yarat\u0131r","upgrades.wind.verbose_description":"R\xfczgar k\xfcre\u011Fin pozisyonuna ba\u011Fl\u0131d\u0131r: sol sola eser, sa\u011F sa\u011Fa eser. Hem toplar\u0131 hem de paralar\u0131 etkiler.","upgrades.yoyo.name":"Yo-yo","upgrades.yoyo.tooltip":"Top k\xfcre\u011Fe do\u011Fru d\xfc\u015Fer","upgrades.yoyo.verbose_description":"Telekinezinin tam tersi, topun a\u015Fa\u011F\u0131 d\xfc\u015Ferken kontrol edilmesi.","upgrades.zen.name":"Zen","upgrades.zen.tooltip":"Tu\u011Fla ba\u015F\u0131na +{{lvl}} kombo, patlama oldu\u011Funda s\u0131f\u0131rlan\u0131r","upgrades.zen.verbose_description":"Sonu\xe7ta bu \u015Fiddet i\xe7ermeyen bir oyun."}');
},{}],"1l6Zs":[function(require,module,exports,__globalThis) {
module.exports = JSON.parse('{"confirmRestart.no":"Abbrechen","confirmRestart.text":"Sie sind dabei, ein neues Spiel zu beginnen. Sind Sie sicher, dass Sie weitermachen wollen?","confirmRestart.title":"Ein neues Spiel beginnen?","confirmRestart.yes":"Spiel neu starten","editor.editing.bigger":"Levelgr\xf6\xdfe erh\xf6hen","editor.editing.color":"W\xe4hlen Sie eine Farbe aus der Farbliste (max. 5 pro Level)","editor.editing.copy":"Levelcode kopieren","editor.editing.copy_help":"F\xfcgen Sie es in den Kanal #levels in unserem Discord ein","editor.editing.credit":"Credits und Quelle","editor.editing.credit_prompt":"Geben Sie die Quell-URL oder Erkl\xe4rung Ihres Levels ein.","editor.editing.delete":"Ebene l\xf6schen","editor.editing.down":"Bewegen Sie alle Steine nach unten","editor.editing.help":"Klicken Sie dann auf eine Kachel, um sie einzuf\xe4rben.","editor.editing.left":"Bewege alle Steine nach links","editor.editing.play":"Spiele dieses Level","editor.editing.rename":"Ebenenname","editor.editing.rename_prompt":"Bitte geben Sie einen neuen Namen f\xfcr das Level ein","editor.editing.right":"Bewege alle Steine nach rechts","editor.editing.smaller":"Verringern der Levelgr\xf6\xdfe","editor.editing.title":"Bearbeitungsebene: {{name}}","editor.editing.up":"Bewegen Sie alle Steine nach oben","editor.help":"Erstellen Sie benutzerdefinierte Level und geben Sie sie frei, um sie in das Spiel aufzunehmen.","editor.import":"Importieren einer Ebene","editor.import_instruction":"F\xfcgen Sie einen Levelcode ein, um ihn in Ihre Levelliste zu importieren","editor.locked":"Erreichen Sie eine Gesamtpunktzahl von {{min}} , um freizuschalten","editor.new_level":"Neues Level","editor.title":"Level-Editor","gameOver.creative":"Dieser Lauf wird nicht aufgezeichnet.","gameOver.cumulative_total":"Ihre kumulative Gesamtpunktzahl ist von {{startTs}} auf {{endTs}}gestiegen.","gameOver.lost.summary":"Du hast den Ball fallen lassen, nachdem du {{score}} M\xfcnzen gefangen hast.","gameOver.lost.title":"Spiel vorbei","gameOver.stats.balls_lost":"Verlorene B\xe4lle","gameOver.stats.bricks_broken":"Ziegelsteine gebrochen","gameOver.stats.bricks_per_minute":"Ziegelsteinbruch pro Minute","gameOver.stats.catch_rate":"Fangquote","gameOver.stats.combo_avg":"Durchschnittliche Combo","gameOver.stats.combo_max":"Max-Kombo","gameOver.stats.duration_per_level":"Dauer pro Stufe","gameOver.stats.hit_rate":"Trefferquote","gameOver.stats.intro":"","gameOver.stats.level_reached":"Erreichte Stufe","gameOver.stats.total_score":"Gesamtpunktzahl","gameOver.stats.upgrades_applied":"Angewandte Upgrades","gameOver.stats_intro":"Hier finden Sie Ihre Spielstatistik im Vergleich zu Ihren {{count}} besten Spielen.","gameOver.unlocked_perk":"Upgrade freigeschaltet","gameOver.unlocked_perk_plural":"Du hast soeben {{count}} Verg\xfcnstigungen freigeschaltet","gameOver.win.summary":"Das Spiel ist vorbei. Du hast {{score}} M\xfcnzen versteckt.","gameOver.win.title":"Du hast dieses Spiel abgeschlossen","help.content":"## Ziel\\n\\nSammle in 7 Levels so viele M\xfcnzen wie m\xf6glich ein.\\nDie M\xfcnzen erscheinen, wenn du Ziegel zerbrichst.\\nFangen Sie sie mit Ihrem Paddel auf, um Ihre Punktzahl zu erh\xf6hen.\\nIhr Punktestand wird in der oberen rechten Ecke des Bildschirms angezeigt.\\nLassen Sie den Ball nicht fallen, sonst ist das Spiel vorbei.\\n\\nWenn du alle Ziegel zerst\xf6rt hast, kannst du dir ein Upgrade aussuchen.\\n\\n## Upgrades\\n\\nDie Upgrades, die du w\xe4hlst, gelten bis zum Ende des Laufs.\\nEinige k\xf6nnen mehrmals ausgew\xe4hlt werden, um die Wirkung zu verst\xe4rken.\\nEinige helfen beim Zielen oder machen das Spiel auf andere Weise einfacher.\\nEinige sind nur in Kombination n\xfctzlich.\\n\\nZu Beginn eines jeden Spiels erh\xe4ltst du immer ein Upgrade.\\nIhr Symbol dient als Baustein des ersten Levels.\\nDu kannst die Start-Upgrades in den Einstellungen ausw\xe4hlen.\\n\\nViele Upgrades wirken sich auf deine Kombo aus.\\n\\n## Combo\\n\\nDeine \\"Combo\\" ist die Anzahl der M\xfcnzen, die beim Zerbrechen eines Steins entstehen.\\nSie wird auf deinem Paddel angezeigt, zum Beispiel x4 bedeutet, dass jeder Stein 4 M\xfcnzen hervorbringt.\\nDie meisten Upgrades, die den Combo erh\xf6hen, f\xfcgen auch eine Bedingung hinzu, um ihn zur\xfcckzusetzen.\\nDie Kombo wird auch zur\xfcckgesetzt, wenn der Ball zum Schl\xe4ger zur\xfcckkehrt, ohne einen Stein zu treffen.\\nIn diesem Fall wird eine \\"Miss\\"-Meldung angezeigt.\\n\\nVersuchen Sie, jedes Mal auf einen Stein zu zielen.\\n\\n## Anvisieren\\n\\nNur die Position des Balls auf dem Schl\xe4ger entscheidet dar\xfcber, wie der Ball abprallt.\\nWenn der Ball das Paddel genau in der Mitte trifft, prallt er senkrecht nach oben ab.\\nWenn du ihn mehr auf einer Seite triffst, hat er einen gr\xf6\xdferen Winkel.\\nDie Paddelgeschwindigkeit und der Auftreffwinkel haben keinen Einfluss auf die Richtung des Balls nach dem Aufprall.\\n\\nViele Upgrades, die beim Zielen helfen, k\xf6nnen freigeschaltet werden.\\n\\n## Freischaltungen\\n\\nWenn du Breakout 71 zum ersten Mal spielst, sind die meisten Upgrades und Levels gesperrt.\\nUpgrades werden freigeschaltet, indem du einfach spielst und viele M\xfcnzen f\xe4ngst.\\nDie ersten Level werden durch das Erreichen einer hohen Punktzahl freigeschaltet.\\nSp\xe4tere Levels f\xfcgen eine Bedingung hinzu, welche Verg\xfcnstigungen Sie ausw\xe4hlen k\xf6nnen.\\n\\nEine hohe Punktzahl zu erreichen ist viel einfacher, wenn du nach jedem Level mehrere Upgrades erh\xe4ltst.\\n\\n## Re-Rolls und kostenlose Upgrades\\n\\nWenn du gut spielst, bekommst du ein zus\xe4tzliches Upgrade, das du ausw\xe4hlen kannst:\\n\\n- Schaffe das Level in weniger als {{levelTimeGood}} Sekunden\\n- Treffen Sie weniger als {{wallBouncedGood}} Mal die Seiten oder die Spitze\\n- Fangen Sie {{catchRateGood}}% der M\xfcnzen\\n- Verfehle die Steine weniger als {{missesGood}} Mal\\n\\nDu bekommst auch einen Re-Roll, mit dem du Upgrades \xfcberspringen kannst, wenn du noch besser abschneidest:\\n\\n- Schaffe ein Level in weniger als {{levelTimeBest}} Sekunden\\n- Treffen Sie weniger als {{wallBouncedBest}} Mal die Seiten oder die Spitze\\n- Fangen Sie {{catchRateBest}}% der M\xfcnzen\\n- Verfehle die Steine weniger als {{missesBest}} Mal\\n\\nMit einer Option in den Einstellungen k\xf6nnen Sie diese Statistiken anzeigen lassen","help.help":"Erfahren Sie mehr \xfcber das Spiel","help.levels":"Ebenen","help.title":"Hilfe","help.upgrades":"## Upgrades","history.columns.score":"Ergebnis","history.columns.started":"Datum","history.help":"Sehen Sie Ihre {{count}} besten Spiele.","history.locked":"Mindestens zehn Spiele spielen, um freizuschalten","history.title":"L\xe4uft Geschichte","lab.help":"Versuchen Sie jede beliebige Konstruktion","lab.instructions":"W\xe4hlen Sie unten die Upgrades aus und w\xe4hlen Sie dann ein Level, das Sie spielen m\xf6chten.","lab.menu_entry":"Kreativ-Modus","lab.reset":"Alle auf 0 zur\xfccksetzen","lab.select_level":"W\xe4hlen Sie einen Level zum Spielen","lab.unlocks_at":"Wird freigeschaltet bei Gesamtpunktzahl {{score}}","level_up.after_buttons":"Du hast gerade Level {{level}}/{{max}}beendet.","level_up.before_buttons":"Du hast {{score}} M\xfcnzen {{catchGain}} aus {{levelSpawnedCoins}} in {{time}} Sekunden {{timeGain}}gefangen.\\n\\nDu hast {{levelMisses}} Mal danebengeschossen {{missesGain}} und {{levelWallBounces}} Mal die W\xe4nde oder die Decke getroffen{{wallHitsGain}}.\\n\\n{{compliment}}","level_up.compliment_advice":"Versuche, alle M\xfcnzen zu fangen, verpasse nie die Steine, sto\xdfe nie an die W\xe4nde/Decke oder schaffe das Level unter 30 Sekunden, um zus\xe4tzliche Upgrades zu erhalten.","level_up.compliment_good":"Gut gemacht!","level_up.compliment_perfect":"Beeindruckend, machen Sie weiter so!","level_up.pick_upgrade_title":"W\xe4hlen Sie ein Upgrade","level_up.plus_one_upgrade":"(+1 Aufwertung)","level_up.plus_one_upgrade_and_reroll":"(+1 Aufwertung und +1 Neuwurf)","level_up.reroll":"Neu w\xfcrfeln ({{count}})","level_up.reroll_help":"Neue Wahlm\xf6glichkeiten bieten","level_up.upgrade_perk_to_level":" lvl {{level}}","main_menu.basic":"","main_menu.basic_help":"","main_menu.colorful_coins":"","main_menu.colorful_coins_help":"","main_menu.comboIncreaseTexts":"","main_menu.comboIncreaseTexts_help":"","main_menu.contrast":"","main_menu.contrast_help":"","main_menu.credit_levels":"","main_menu.donate":"Sie haben seit {{hours}} Stunden gespielt","main_menu.donate_help":"Wie w\xe4re es mit einer Spende? Sie k\xf6nnen diese Erinnerung in den Einstellungen ausblenden.","main_menu.donation_reminder":"","main_menu.donation_reminder_help":"","main_menu.download_save_file":"","main_menu.download_save_file_help":"","main_menu.extra_bright":"","main_menu.extra_bright_help":"","main_menu.fullscreen":"","main_menu.fullscreen_help":"","main_menu.help_content":"","main_menu.help_help":"","main_menu.help_title":"","main_menu.help_upgrades":"","main_menu.high_score":"Hohe Punktzahl : {{score}}","main_menu.kid":"","main_menu.kid_help":"","main_menu.language":"","main_menu.language_help":"","main_menu.load_save_file":"","main_menu.load_save_file_help":"","main_menu.max_coins":"","main_menu.max_coins_help":"","main_menu.max_particles":"","main_menu.max_particles_help":"","main_menu.mobile":"","main_menu.mobile_help":"","main_menu.normal":"Neues Spiel","main_menu.normal_help":"Spiele 7 Levels mit einem zuf\xe4lligen Startvorteil","main_menu.pointer_lock":"","main_menu.pointer_lock_help":"","main_menu.record":"","main_menu.record_download":"","main_menu.record_help":"","main_menu.red_miss":"","main_menu.red_miss_help":"","main_menu.reset":"","main_menu.reset_cancel":"","main_menu.reset_confirm":"","main_menu.reset_help":"","main_menu.reset_instruction":"","main_menu.save_file_error":"","main_menu.save_file_loaded":"","main_menu.save_file_loaded_help":"","main_menu.save_file_loaded_ok":"","main_menu.settings_help":"Passen Sie das Spiel an Ihre Bed\xfcrfnisse und Ihren Geschmack an","main_menu.settings_title":"Einstellungen","main_menu.show_fps":"","main_menu.show_fps_help":"","main_menu.show_stats":"","main_menu.show_stats_help":"","main_menu.sounds":"","main_menu.sounds_help":"","main_menu.starting_perks":"","main_menu.starting_perks_checked":"","main_menu.starting_perks_full_random":"","main_menu.starting_perks_help":"","main_menu.starting_perks_unchecked":"","main_menu.title":"Breakout 71","main_menu.unlocks":"Freigegebene Inhalte","main_menu.unlocks_help":"Freigegebene Verg\xfcnstigungen und Stufen ausprobieren","play.close_modale_window_tooltip":"Schlie\xdfen Sie","play.current_lvl":"Stufe {{level}}/{{max}}","play.menu_label":"Menu","play.menu_tooltip":"Hauptmen\xfc \xf6ffnen","play.missed_ball":"Miss","play.mobile_press_to_play":"Zum Abspielen hier dr\xfccken und halten","play.score_tooltip":"Sehen Sie Ihren Punktestand, Upgrades und mehr","play.stats.coins_catch_rate":"Fangrate der M\xfcnzen","play.stats.levelMisses":"Verfehlte Sch\xfcsse, bei denen man nichts trifft","play.stats.levelTime":"Level Zeit","play.stats.levelWallBounces":"Mauervorspr\xfcnge","score_panel.close_to_unlock":"N\xe4chste Stufe freischalten:","score_panel.get_upgrades_to_unlock":"Holen Sie {{missingUpgrades}} und erzielen Sie {{points}} mehr Punkte, um Level \\"{{level}}\\" freizuschalten. \\"","score_panel.rerolls_count":"Sie haben {{rerolls}} Wiederholungsw\xfcrfe angesammelt","score_panel.score_to_unlock":"Erziele {{points}} mehr Punkte, um Level \\"{{level}}\\" freizuschalten. \\"","score_panel.title":"{{score}} Punkte auf Stufe {{level}}/{{max}} ","score_panel.upcoming_levels":"Kommende Stufen :","score_panel.upgrades_picked":"Die in diesem Spiel gew\xe4hlten Upgrades laufen:","settings.autoplay":"","settings.autoplay_help":"","settings.basic":"Grundlegende Grafiken","settings.basic_help":"Bessere Leistung.","settings.colorful_coins":"Bunte M\xfcnzen","settings.colorful_coins_help":"M\xfcnzen spawnen immer in der Farbe des Steins","settings.comboIncreaseTexts":"+X in Gold anzeigen","settings.comboIncreaseTexts_help":"Wenn die Combo zunimmt","settings.contrast":"Hoher Kontrast","settings.contrast_help":"Buntes und dunkles Rendering","settings.donation_reminder":"Erinnern Sie mich an eine Spende","settings.donation_reminder_help":"Siehe Spielzeit und Spendenlink im Hauptmen\xfc","settings.download_save_file":"Spielstand und Statistiken herunterladen","settings.download_save_file_help":"Abrufen einer Speicherdatei","settings.extra_bright":"Extra hell","settings.extra_bright_help":"Erh\xf6ht die Gr\xf6\xdfe des Halos um M\xfcnzen und Ziegel.","settings.fullscreen":"Vollbild","settings.fullscreen_help":"Das Spiel versucht, vor dem Start in den Vollbildmodus zu wechseln","settings.kid":"Kinder-Modus","settings.kid_help":"Beginnen Sie k\xfcnftige Spiele mit einem \\"langsameren Ball\\".","settings.language":"Sprache","settings.language_help":"W\xe4hlen Sie die Sprache des Spiels","settings.load_save_file":"Speicherdatei laden","settings.load_save_file_help":"W\xe4hlen Sie eine Speicherdatei auf Ihrem Ger\xe4t","settings.max_coins":" {{max}} M\xfcnzen auf dem Bildschirm maximal","settings.max_coins_help":"Nur kosmetisch, keine Auswirkung auf das Ergebnis","settings.mobile":"Mobiler Modus","settings.mobile_help":"L\xe4sst Platz unter dem Paddel.","settings.pointer_lock":"Mauszeigersperre","settings.pointer_lock_help":"Sperrt und versteckt den Mauszeiger.","settings.precise_lighting":"","settings.precise_lighting_help":"","settings.probabilistic_lighting":"","settings.probabilistic_lighting_help":"","settings.record":"Spielvideos aufnehmen","settings.record_download":"Video herunterladen ({{size}} MB)","settings.record_help":"Holen Sie sich ein Video von jedem Level.","settings.red_miss":"Miss Warnung","settings.red_miss_help":"Zeigen Sie rote Partikel um B\xe4lle, die ohne Treffer zu Boden gehen.","settings.reset":"Spiel zur\xfccksetzen","settings.reset_cancel":"Nein","settings.reset_confirm":"Ja","settings.reset_help":"L\xf6schen von Highscore, Spielzeit und Statistiken","settings.reset_instruction":"Sie verlieren alle Fortschritte, die Sie im Spiel gemacht haben, sind Sie sicher?","settings.save_file_error":"Fehler beim Laden einer Speicherdatei","settings.save_file_loaded":"Geladene Datei speichern","settings.save_file_loaded_help":"Die App wird nun neu geladen, um die Speicherung zu \xfcbernehmen.","settings.save_file_loaded_ok":"Ok","settings.show_fps":"FPS-Z\xe4hler","settings.show_fps_help":"\xdcberwachen Sie die Leistung der Anwendung","settings.show_stats":"Echtzeit-Statistiken anzeigen","settings.show_stats_help":"M\xfcnzen, Zeit, Spr\xfcnge, Fehlsch\xfcsse","settings.smooth_lighting":"","settings.smooth_lighting_help":"","settings.sounds":"Spiel-Sounds","settings.sounds_help":"Piepsen, Bloops und Brrrr","settings.storage_granted":"","settings.storage_refused":"","settings.stress_test":"","settings.stress_test_help":"","starting_perks.checked":"Wenn Sie ein neues Spiel beginnen, wird Ihnen eine dieser Verg\xfcnstigungen angeboten. Klicken Sie auf eine Verg\xfcnstigung, um sie auszuschlie\xdfen.","starting_perks.help":"W\xe4hlen Sie m\xf6gliche Start-Upgrades","starting_perks.random":"Alle Vorteile wurden gestrichen, die Auswahl erfolgt nach dem Zufallsprinzip.","starting_perks.title":"Startvorteile","starting_perks.unchecked":"Die folgenden Verg\xfcnstigungen werden nicht als Startverg\xfcnstigungen angeboten, aber Sie k\xf6nnen sie durch Anklicken zum Pool hinzuf\xfcgen.","unlocks.greyed_out_help":"Die ausgegrauten Upgrades k\xf6nnen freigeschaltet werden, indem Sie Ihre Gesamtpunktzahl erh\xf6hen. Die Gesamtpunktzahl erh\xf6ht sich jedes Mal, wenn Sie im Spiel punkten.","unlocks.intro":"Deine Gesamtpunktzahl ist {{ts}}. Nachfolgend finden Sie alle Upgrades und Levels, die das Spiel zu bieten hat. Klicken Sie auf ein Upgrade oder eine Stufe, um ein Testspiel damit zu starten.","unlocks.just_unlocked":"Level freigeschaltet","unlocks.just_unlocked_plural":"Du hast soeben {{count}} Stufen freigeschaltet","unlocks.level":"<h2>Du hast {{unlocked}} Stufen von {{out_of}}freigeschaltet </h2>\\n<p>Hier sind alle Spielstufen, klicke eine an, um sie auszuprobieren.</p> ","unlocks.level_description":"Ein {{size}}x{{size}} Level mit {{bricks}} Steinen, {{colors}} Farben und {{bombs}} Bomben.","unlocks.minScore":"Erreiche ${{minScore}} in einem Lauf, um freizuschalten.","unlocks.minScoreWithPerks":"Erreiche ${{minScore}} in einem Durchgang mit {{required}} , aber ohne {{forbidden}} zu entsperren.","unlocks.minTotalScore":"Kumulieren Sie insgesamt ${{score}}","unlocks.reached":"Ihr bestes Ergebnis war {{reached}}.","unlocks.title_upgrades":"Du hast {{unlocked}} Upgrades von {{out_of}}freigeschaltet.","upgrades.addiction.name":"Sucht","upgrades.addiction.tooltip":"+{{lvl}} Combo / Stein, Combo wird {{delay}}s nach Zerbrechen eines Steins zur\xfcckgesetzt.","upgrades.addiction.verbose_description":"Der Countdown beginnt erst nach dem Zerbrechen des ersten Steins eines jeden Levels. Er stoppt, sobald alle Ziegel zerst\xf6rt sind.","upgrades.asceticism.name":"Askese","upgrades.asceticism.tooltip":"+{{combo}} Combo / Ziegel, - {{combo}} bei M\xfcnzfang","upgrades.asceticism.verbose_description":"Sie m\xfcssen die M\xfcnzen irgendwo aufbewahren, w\xe4hrend Ihre Combo aufsteigt.","upgrades.ball_attract_ball.help_plural":"St\xe4rkere Anziehungskraft","upgrades.ball_attract_ball.name":"Schwerkraft","upgrades.ball_attract_ball.tooltip":"B\xe4lle ziehen B\xe4lle an","upgrades.ball_attract_ball.verbose_description":"B\xe4lle, die mehr als \\"3/4 der Spielfeldbreite\\" entfernt sind, beginnen sich gegenseitig anzuziehen.\\n\\nDie Anziehungskraft ist st\xe4rker, wenn sie am weitesten voneinander entfernt sind.\\n\\nUm die Anziehungskraft zu symbolisieren, fliegen Regenbogenpartikel. Dieser Vorteil wird nur angeboten, wenn du bereits mehr als einen Ball hast.","upgrades.ball_attracts_coins.name":"B\xe4lle ziehen M\xfcnzen an","upgrades.ball_attracts_coins.tooltip":"Die M\xfcnzen folgen der n\xe4chstgelegenen Kugel und fallen langsamer herunter.","upgrades.ball_attracts_coins.verbose_description":"Dies k\xf6nnte verwendet werden, um die Kugeln mit M\xfcnzen \\"anzumalen\\", wenn man es mit \\"Flecken\\" und \\"Geisterm\xfcnzen\\" kombiniert. Es funktioniert auch als Ersatz f\xfcr einen M\xfcnzmagneten.","upgrades.ball_repulse_ball.help_plural":"St\xe4rkere Absto\xdfungskraft","upgrades.ball_repulse_ball.name":"Pers\xf6nlicher Raum","upgrades.ball_repulse_ball.tooltip":"B\xe4lle sto\xdfen B\xe4lle ab","upgrades.ball_repulse_ball.verbose_description":"Kugeln, die weniger als ein Viertel der Bildschirmbreite entfernt sind, sto\xdfen sich gegenseitig ab. Die Absto\xdfungskraft ist st\xe4rker, wenn sie sich nahe beieinander befinden. Um diese Kraft zu symbolisieren, werden Partikel herausgeschleudert. Dieser Vorteil wird nur angeboten, wenn Sie bereits mehr als einen Ball haben.","upgrades.base_combo.name":"Starke Grundlagen","upgrades.base_combo.tooltip":"Combo beginnt bei {{coins}} statt bei 1.","upgrades.base_combo.verbose_description":"Deine Combo beginnt normalerweise bei 1 am Anfang des Levels und wird auf 1 zur\xfcckgesetzt, wenn du herumspringst, ohne etwas zu treffen. Mit diesem Vorteil beginnt die Kombo 3 Punkte h\xf6her, sodass du immer mindestens 4 M\xfcnzen pro Stein erh\xe4ltst. Immer, wenn deine Kombo zur\xfcckgesetzt wird, steht sie wieder bei 4 und nicht bei 1. Dein Ball wird ein wenig glitzern, um anzuzeigen, dass sein Combo h\xf6her als 1 ist.","upgrades.bigger_explosions.name":"Kaboom","upgrades.bigger_explosions.tooltip":"Gr\xf6\xdfere Explosionen","upgrades.bigger_explosions.verbose_description":"Die Standardexplosion r\xe4umt ein 3x3-Quadrat, mit dieser wird es zu einem 5x5-Quadrat, und der Schlag auf die M\xfcnzen ist auch wesentlich st\xe4rker. Der Bildschirm blinkt nach jeder Explosion (au\xdfer im Basismodus)","upgrades.bigger_puck.name":"Gr\xf6\xdferes Paddel","upgrades.bigger_puck.tooltip":"Einfach mehr M\xfcnzen fangen.","upgrades.bigger_puck.verbose_description":"Ein gr\xf6\xdferes Paddel macht es einfacher, den Ball nie zu verfehlen und mehr M\xfcnzen zu fangen. Au\xdferdem kann man die Abpraller genau ausrichten (der Winkel des Balls h\xe4ngt nur davon ab, wo er das Paddel trifft).","upgrades.bricks_attract_ball.name":"Ziegelsteine ziehen B\xe4lle an","upgrades.bricks_attract_ball.tooltip":"Der Ball fliegt zu den ersten {{count}} Steinen, die er trifft.","upgrades.bricks_attract_ball.verbose_description":"Die Wirkung ist bei h\xf6heren Stufen st\xe4rker. Die Anzahl der Steine, die getroffen werden k\xf6nnen, bevor der Effekt aufh\xf6rt, ist ebenfalls h\xf6her. Der Effekt setzt wieder ein, wenn der Ball den Puck trifft.","upgrades.bricks_attract_coins.name":"Ziegelsteine ziehen M\xfcnzen an","upgrades.bricks_attract_coins.tooltip":"Hilft ihnen, dort oben zu bleiben","upgrades.bricks_attract_coins.verbose_description":"","upgrades.clairvoyant.name":"Hellsichtig","upgrades.clairvoyant.tooltip":"Sehen Sie die n\xe4chsten Levels, die HP der Steine und die Ballrichtung","upgrades.clairvoyant.verbose_description":"Hilft dir, die richtigen Upgrades auszuw\xe4hlen und zu verstehen, was es mit den robusten Steinen auf sich hat. Level 2 und 3 bringen zus\xe4tzliches Wissen von zweifelhaftem Nutzen (erreichbar im Loop-Modus)","upgrades.coin_magnet.help_plural":"St\xe4rkere Wirkung auf die M\xfcnzen","upgrades.coin_magnet.name":"Magnet f\xfcr M\xfcnzen","upgrades.coin_magnet.tooltip":"Paddel zieht M\xfcnzen an","upgrades.coin_magnet.verbose_description":"Lenkt die M\xfcnzen auf das Paddel. Der Effekt ist st\xe4rker, wenn die M\xfcnze bereits in der N\xe4he ist.","upgrades.compound_interest.name":"Zinseszins","upgrades.compound_interest.tooltip":"+{{lvl}} Combo pro zerbrochenem Stein, R\xfccksetzung bei verlorener M\xfcnze","upgrades.compound_interest.verbose_description":"Deine Combo w\xe4chst jedes Mal um eins, wenn du einen Stein zerbrichst, und bringt mit jedem Stein, den du zerbrichst, mehr und mehr M\xfcnzen hervor.\\nAchten Sie jedoch darauf, jede dieser M\xfcnzen mit Ihrem Paddel aufzufangen, da jede verlorene M\xfcnze Ihre Combo zur\xfccksetzt.\\nSobald deine Kombo \xfcber dem Minimum liegt, wird der Boden des Spielfelds mit einer roten Linie markiert, um dich daran zu erinnern, dass die M\xfcnzen nicht dorthin geh\xf6ren.","upgrades.concave_puck.name":"Konkaves Paddel","upgrades.concave_puck.tooltip":"Verbessert die vertikale Zielgenauigkeit","upgrades.concave_puck.verbose_description":"Die B\xe4lle gehen zu Beginn des Levels gerade nach oben und prallen in einem geringeren Winkel ab.","upgrades.corner_shot.name":"Eckball","upgrades.corner_shot.tooltip":"L\xe4sst Ihr Paddel mit den R\xe4ndern des Bildschirms \xfcberlappen","upgrades.corner_shot.verbose_description":"Hilft beim Zielen in den Kurven. Weitere Stufen lassen Sie weiter hinausgehen.","upgrades.etherealcoins.name":"M\xfcnzen, im Weltraum","upgrades.etherealcoins.tooltip":"M\xfcnzen werden nicht mehr von der Schwerkraft beeinflusst","upgrades.etherealcoins.verbose_description":"Die M\xfcnzen behalten ihre Geschwindigkeit auch nach mehreren Aufprallvorg\xe4ngen bei und werden nicht mehr durch die Schwerkraft beeinflusst.","upgrades.extra_levels.name":"5 min mehr","upgrades.extra_levels.tooltip":"Spielen Sie {{count}} Stufen statt 7","upgrades.extra_levels.verbose_description":"Das Standardspiel kann maximal 7 Stufen dauern, danach ist das Spiel vorbei.\\n\\nMit jeder Stufe dieses Vorteils k\xf6nnen Sie eine Stufe h\xf6her gehen. Die letzten Level sind oft diejenigen, in denen man die meisten Punkte macht, so dass der Unterschied dramatisch sein kann.","upgrades.extra_life.help_plural":"Dein (letzter) Ball wird auf dem Boden aufspringen, anstatt verloren zu gehen ({{lvl}} mal).","upgrades.extra_life.name":"Extraleben","upgrades.extra_life.tooltip":"Der Ball prallt einmal auf der unteren Linie auf, bevor er verloren ist.","upgrades.extra_life.verbose_description":"Normalerweise hat man nur einen Ball, und das Spiel ist vorbei, sobald man ihn fallen l\xe4sst.\\n\\nDieser Vorteil f\xfcgt eine wei\xdfe Leiste am unteren Rand des Bildschirms hinzu, die einen Ball einmal speichert und dabei zerbricht.\\n\\nJedes Mal, wenn ein Ball am unteren Rand des Bildschirms aufprallt, verlierst du eine Stufe dieses Vorteils.","upgrades.forgiving.name":"Verzeihen","upgrades.forgiving.tooltip":"Durch fehlende Pausen wird die Kombo schrittweise reduziert, anstatt auf einmal.","upgrades.forgiving.verbose_description":"Der erste Fehlschuss pro Level ist kostenlos, dann 10% der Combo, dann 20% ...","upgrades.fountain_toss.name":"Springbrunnen-Wurf","upgrades.fountain_toss.tooltip":"Gewinnen Sie etwas Combo, wenn Sie einige M\xfcnzen verpassen.","upgrades.fountain_toss.verbose_description":"Wenn du eine M\xfcnze verpasst und deine Combo unter {{max}}war, hat deine Combo eine Wahrscheinlichkeit von {{lvl}}/Combo um eins zu erh\xf6hen.","upgrades.ghost_coins.name":"Geisterm\xfcnzen","upgrades.ghost_coins.tooltip":"M\xfcnzen gehen langsam durch Ziegelsteine","upgrades.ghost_coins.verbose_description":"Das ist kein Bug, sondern ein Feature! Die M\xfcnzen fliegen nur langsam durch die Ziegel. H\xf6here Stufen lassen sie schneller fliegen.","upgrades.helium.name":"Helium","upgrades.helium.tooltip":"Umgekehrte Schwerkraft links und rechts des Paddels","upgrades.helium.verbose_description":"Dies wirkt sich auf die M\xfcnzen aus und l\xe4sst sie nach oben treiben, bis Sie bereit sind, sie aufzuheben.","upgrades.hot_start.name":"Hei\xdfer Start","upgrades.hot_start.tooltip":"Start bei Kombo {{start}}, -{{loss}} Kombo pro Sekunde","upgrades.hot_start.verbose_description":"Zu Beginn eines jeden Levels beginnt deine Kombo mit +30 Punkten, aber dann wird sie jede Sekunde um einen Punkt verringert. Der Effekt ist mit anderen Perks stapelbar.","upgrades.hypnosis.name":"Hypnose","upgrades.hypnosis.tooltip":"Immer wenn ein Ziegelstein seine Farbe \xe4ndert, teleportierst du diese M\xfcnze zur n\xe4chsten Kugel und l\xe4dst ihre F\xe4higkeit, einen Ziegelstein zu f\xe4rben, wieder auf.","upgrades.hypnosis.verbose_description":"","upgrades.implosions.name":"Implosionen","upgrades.implosions.tooltip":"Explosionen saugen M\xfcnzen an, anstatt sie wegzublasen","upgrades.implosions.verbose_description":"Die Explosionskraft wird in die andere Richtung angewendet. Weitere Stufen wirken als \\"gr\xf6\xdfere Explosion\\".","upgrades.instant_upgrade.name":"Sofortiges Upgrade","upgrades.instant_upgrade.tooltip":"+2 Aufwertung jetzt, -1 Wahl bis Spielende.","upgrades.instant_upgrade.verbose_description":"W\xe4hlen Sie sofort zwei Upgrades aus, so dass Sie ein kostenloses Upgrade erhalten und eines, mit dem Sie das Upgrade, mit dem Sie diese Verg\xfcnstigung erhalten haben, zur\xfcckzahlen. Bei jedem weiteren Men\xfc zur Auswahl von Upgrades gibt es weniger Optionen zur Auswahl.","upgrades.left_is_lava.name":"Linke Seite meiden","upgrades.left_is_lava.tooltip":"+{{lvl}} Combo pro zerbrochenem Stein. Combo wird zur\xfcckgesetzt, wenn der Ball die linke Seite des Bildschirms trifft.","upgrades.left_is_lava.verbose_description":"Jedes Mal, wenn du einen Ziegelstein zerbrichst, erh\xf6ht sich deine Kombo um eins, so dass du von allen weiteren Ziegelsteinen, die du zerbrichst, eine M\xfcnze mehr bekommst.\\n\\nAllerdings wird deine Combo zur\xfcckgesetzt, sobald dein Ball die linke Seite trifft.\\n\\nSobald deine Combo ansteigt, wird die linke Seite rot, um dich daran zu erinnern, dass du es vermeiden solltest, sie zu treffen.\\n","upgrades.limitless.name":"Grenzenlos","upgrades.limitless.tooltip":"Erh\xf6he die maximale Stufe aller Aufwertungen um {{lvl}} ","upgrades.limitless.verbose_description":"Durch die Wahl dieses Vorteils wird auch sein eigenes Limit um eins erh\xf6ht, so dass man es erneut w\xe4hlen kann.","upgrades.metamorphosis.name":"Metamorphose","upgrades.metamorphosis.tooltip":"Jede M\xfcnze kann {{lvl}} Steine mit ihrer Farbe f\xe4rben","upgrades.metamorphosis.verbose_description":"Mit diesem Vorteil haben die M\xfcnzen die Farbe des Ziegels, aus dem sie stammen, und f\xe4rben den ersten Ziegel, den sie ber\xfchren, in derselben Farbe. Die M\xfcnzen spawnen mit der Geschwindigkeit des Balls, der sie zerbrochen hat, was bedeutet, dass du ein bisschen in die Richtung der Ziegelsteine zielen kannst, die du \\"anmalen\\" willst. Auf Stufe 1 kann jede M\xfcnze 1 Ziegelstein einf\xe4rben, bevor sie \\"verbraucht\\" wird und hohl erscheint.","upgrades.minefield.name":"Minenfeld","upgrades.minefield.tooltip":"+{{lvl}} Kombo pro Bombenstein auf dem Bildschirm","upgrades.minefield.verbose_description":"F\xfcgt +lvl zur Combo hinzu, wenn ein Ziegelstein platziert wird, -lvl, wenn er zerst\xf6rt wird, und erh\xf6ht die Basiskombo um die Anzahl der Ziegelsteine mal lvl","upgrades.multiball.name":"Multi-Ball","upgrades.multiball.tooltip":"Beginne jedes Level mit {{count}} B\xe4llen.","upgrades.multiball.verbose_description":"Sobald du den Ball in Breakout 71 fallen l\xe4sst, hast du verloren.\\n\\nMit diesem Vorteil erhalten Sie zwei B\xe4lle und k\xf6nnen es sich daher leisten, einen zu verlieren.\\n\\nDie verlorenen B\xe4lle kommen im n\xe4chsten Level zur\xfcck.\\n\\nWenn du mehr als einen Ball hast, stehen dir weitere Verg\xfcnstigungen zur Verf\xfcgung, und du kannst das Level nat\xfcrlich schneller abschlie\xdfen.","upgrades.nbricks.name":"Strenger Stichprobenumfang","upgrades.nbricks.tooltip":"Triff genau {{lvl}} Steine pro Paddle Bounce f\xfcr +{{lvl}} Combo, sonst wird er zur\xfcckgesetzt","upgrades.nbricks.verbose_description":"Ihr m\xfcsst die Steine nicht unbedingt zerst\xf6ren, aber ihr m\xfcsst sie treffen. Durch Explosionen zerst\xf6rte Ziegelsteine z\xe4hlen nicht.","upgrades.one_more_choice.name":"Extra Auswahl","upgrades.one_more_choice.tooltip":"Weitere Stufenaufstiege bieten {{lvl}} weitere Option(en) in der Liste","upgrades.one_more_choice.verbose_description":"Jedes Upgrade-Men\xfc wird eine weitere Option enthalten. Erh\xf6ht nicht die Anzahl der Upgrades, die Sie ausw\xe4hlen k\xf6nnen.","upgrades.passive_income.name":"Passives Einkommen","upgrades.passive_income.tooltip":"+{{lvl}} Combo / Brick, es sei denn, das Paddel hat sich in den letzten {{time}}s bewegt, dann wird es stattdessen zur\xfcckgesetzt","upgrades.passive_income.verbose_description":"Einige Verg\xfcnstigungen k\xf6nnen den B\xe4llen helfen, das zu tun, was du willst, ohne dass du etwas tun musst.","upgrades.picky_eater.name":"W\xe4hlerischer Esser","upgrades.picky_eater.tooltip":"+{{lvl}} Combo pro zerbrochenem Stein, wird bei Farbwechsel des Balls zur\xfcckgesetzt","upgrades.picky_eater.verbose_description":"Jedes Mal, wenn du einen Stein der gleichen Farbe wie deine Kugel zerst\xf6rst, erh\xf6ht sich deine Kombination um eins.\\nWenn es eine andere Farbe ist, nimmt der Ball diese neue Farbe an, aber die Kombination wird zur\xfcckgesetzt, es sei denn, es sind keine Steine in der Farbe des Balls \xfcbrig.\\nSobald du eine h\xf6here Kombination als das Minimum erreicht hast, werden die Steine der falschen Farbe rot umrandet.\\nWenn du mehr als eine Kugel hast, wechseln sie alle die Farbe, sobald eine von ihnen einen Stein trifft.","upgrades.pierce.name":"Piercing","upgrades.pierce.tooltip":"Der Ball durchdringt {{count}} Steine nach einem Paddle Bounce","upgrades.pierce.verbose_description":"Der Ball prallt normalerweise ab, sobald er etwas ber\xfchrt. Mit diesem Vorteil setzt er seine Flugbahn f\xfcr bis zu 3 Ziegelsteine gebrochen fort.\\n\\nDanach prallt er am 4. Ziegelstein ab, und du musst das Paddel ber\xfchren, um den Z\xe4hler zur\xfcckzusetzen.","upgrades.pierce_color.name":"Farbe durchstechen","upgrades.pierce_color.tooltip":"+{{lvl}} Schaden an Steinen der Farbe der Kugel","upgrades.pierce_color.verbose_description":"Wenn ein Ball auf einen gleichfarbigen Stein trifft, geht er ungehindert durch.\\n\\nSobald er einen andersfarbigen Stein erreicht, zerbricht er ihn, nimmt seine Farbe an und springt auf.\\n\\nWenn du robuste Steine hast, kann es sein, dass der Ball trotzdem an einem gleichfarbigen Stein abprallt.","upgrades.puck_repulse_ball.help_plural":"St\xe4rkere Absto\xdfungskraft","upgrades.puck_repulse_ball.name":"Weiche Landung","upgrades.puck_repulse_ball.tooltip":"Paddel st\xf6\xdft B\xe4lle ab","upgrades.puck_repulse_ball.verbose_description":"Wenn ein Ball in die N\xe4he des Schl\xe4gers kommt, wird er langsamer und springt m\xf6glicherweise sogar, ohne den Schl\xe4ger zu ber\xfchren.","upgrades.rainbow.name":"Regenbogen","upgrades.rainbow.tooltip":"M\xfcnzen spawnen in Regenbogenfarben.","upgrades.rainbow.verbose_description":"Mit jedem Level steigt der Anteil der farbigen M\xfcnzen. Die Farbe h\xe4ngt von der Levelzeit ab.","upgrades.reach.name":"Von oben nach unten","upgrades.reach.tooltip":" Das Ber\xfchren der N Steine der untersten Reihe setzt die Kombo zur\xfcck. Andernfalls: +N Combo","upgrades.reach.verbose_description":"Wenn es nur eine Reihe von Steinen gibt, oder wenn die unterste Reihe von Steinen die gesamte Breite des Spiels abdeckt, dann bewirkt dieser Vorteil nichts. Andernfalls wird die Combo zur\xfcckgesetzt, wenn diese unterste Reihe zerst\xf6rt wird, w\xe4hrend alles andere die Combo um die Anzahl der Steine in dieser untersten Reihe erh\xf6ht.\\n\\nDie unterste Reihe wird in rot hervorgehoben.","upgrades.respawn.name":"Neu spawnen","upgrades.respawn.tooltip":"{{percent}}% der Steine spawnen nach {{delay}}s erneut.","upgrades.respawn.verbose_description":"Einige Partikeleffekte lassen Sie wissen, wo Ziegelsteine erscheinen werden.","upgrades.right_is_lava.name":"Vermeiden Sie die rechte Seite","upgrades.right_is_lava.tooltip":"+{{lvl}} Kombo pro Stein. Combo wird zur\xfcckgesetzt, wenn der Ball die rechte Seite des Bildschirms trifft.","upgrades.right_is_lava.verbose_description":"Jedes Mal, wenn du einen Ziegelstein zerbrichst, erh\xf6ht sich deine Kombo um eins, so dass du von allen weiteren Ziegelsteinen, die du zerbrichst, eine M\xfcnze mehr bekommst.\\n\\nAllerdings wird deine Kombo zur\xfcckgesetzt, sobald dein Ball die rechte Seite trifft.\\n\\nSobald deine Combo ansteigt, wird die rechte Seite rot, um dich daran zu erinnern, dass du es vermeiden solltest, sie zu treffen.\\n","upgrades.sacrifice.help_l1":"Der Verlust eines Lebens l\xf6scht alle Steine","upgrades.sacrifice.help_over":"Der Verlust eines Lebens {{lvl}}x die Combo l\xf6scht dann alle Steine","upgrades.sacrifice.name":"Opfern Sie","upgrades.sacrifice.verbose_description":"Damit k\xf6nnte die Kombination ziemlich hoch werden.","upgrades.sapper.help_plural":"Die ersten {{lvl}} Steine, die zerbrochen werden, werden zu Bomben.","upgrades.sapper.name":"Sapper","upgrades.sapper.tooltip":"Der erste zerbrochene Ziegelstein wird zu einer Bombe.","upgrades.sapper.verbose_description":"Anstatt einfach zu verschwinden, wird der erste Stein, den du zerbrichst, durch einen Bombenstein ersetzt. Wenn du den Ball auf dem Paddel abprallen l\xe4sst, wird der Effekt wieder aktiviert. Wenn Sie diese F\xe4higkeit aufwerten, k\xf6nnen Sie mehr Bomben platzieren.","upgrades.shocks.name":"Schocks","upgrades.shocks.tooltip":"Kollisionen mit explosiven Kugeln","upgrades.shocks.verbose_description":"Wenn zwei Kugeln zusammensto\xdfen, tauschen sie ihre Geschwindigkeit aus, l\xf6sen eine Explosion aus und gewinnen an Geschwindigkeit, um sie zu trennen.","upgrades.shunt.name":"Shunt","upgrades.shunt.tooltip":"Behalte {{percent}}% deines Combos zwischen den Levels","upgrades.shunt.verbose_description":"Wenn Sie auch Hei\xdfstart haben, wird der Hei\xdfstart einfach zur aktuellen Kombination hinzugef\xfcgt.","upgrades.side_flip.name":"Rechtsh\xe4ndig","upgrades.side_flip.tooltip":"+{{lvl}} Combo pro von rechts gebrochenem Stein, sonst -{{loss}} ","upgrades.side_flip.verbose_description":"Triff den Ziegelstein auf der rechten Seite, um einen Combo zu erhalten, aber vermeide es, ihn auf der linken Seite zu treffen, da dies 2 Combo entfernen w\xfcrde. Schl\xe4ge von oben und unten haben keinen Effekt.","upgrades.side_kick.name":"Linksh\xe4ndig","upgrades.side_kick.tooltip":"+{{lvl}} Combo pro von links gebrochenem Stein, sonst -{{loss}} ","upgrades.side_kick.verbose_description":"Triff den Ziegelstein auf der linken Seite, um einen Combo zu erhalten, aber vermeide es, ihn auf der rechten Seite zu treffen, da dies 2 Combo entfernen w\xfcrde. Schl\xe4ge von oben und unten haben keinen Effekt.","upgrades.skip_last.help_plural":"Die letzten {{lvl}} Steine werden explodieren.","upgrades.skip_last.name":"Einfaches Aufr\xe4umen","upgrades.skip_last.tooltip":"Der letzte Stein wird explodieren.","upgrades.skip_last.verbose_description":"Du musst alle Steine zerbrechen, um die n\xe4chste Ebene zu erreichen. Es kann jedoch schwierig sein, die letzten Steine zu bekommen.\\n\\nWenn du ein Level fr\xfch beendest, hast du zus\xe4tzliche M\xf6glichkeiten, um aufzur\xfcsten. Es ist auch sehr vorteilhaft, nie die Steine zu verpassen.\\n\\nWenn es dir also schwerf\xe4llt, die letzten Steine zu zerbrechen, kann es helfen, wenn du diesen Vorteil ein paar Mal bekommst.","upgrades.slow_down.name":"Langsamer Ball","upgrades.slow_down.tooltip":"Der Ball bewegt sich langsamer","upgrades.slow_down.verbose_description":"Der Ball f\xe4ngt relativ langsam an, aber mit jeder Spielstufe wird er ein bisschen schneller.\\n\\nEr wird auch schneller, wenn du viel Zeit in einem Level verbringst.\\n\\nDieser Vorteil macht ihn \xfcberschaubarer.\\n\\nDu kannst ihn jedes Mal beim Start erhalten, indem du den Kindermodus im Men\xfc aktivierst.","upgrades.smaller_puck.help_plural":"Noch kleineres Paddel und h\xf6here Basis-Kombination","upgrades.smaller_puck.name":"Kleineres Paddel","upgrades.smaller_puck.tooltip":"Gibt auch +5 Basis-Kombo","upgrades.smaller_puck.verbose_description":"Dadurch wird das Paddel kleiner, was theoretisch einige Ecksch\xfcsse einfacher macht, aber eigentlich nur den Schwierigkeitsgrad erh\xf6ht.\\n\\nDeshalb gibt es auch einen netten Bonus von +5 M\xfcnzen pro Ziegelstein f\xfcr alle Ziegelsteine, die du nach der Auswahl dieser Option zerst\xf6rst.","upgrades.soft_reset.name":"Weicher Reset","upgrades.soft_reset.tooltip":"Combo-R\xfcckstellungen halten {{percent}}%","upgrades.soft_reset.verbose_description":"Begrenzen Sie die Auswirkungen eines Combo-Resets.","upgrades.streak_shots.name":"Gl\xfccksstr\xe4hne","upgrades.streak_shots.tooltip":"Mehr M\xfcnzen, wenn du viele Steine zerbrichst, bevor du auf das Paddel springst.","upgrades.streak_shots.verbose_description":"Jedes Mal, wenn du einen Stein zerbrichst, erh\xf6ht sich dein Combo um eins.\\n\\nSobald der Ball jedoch Ihr Paddel ber\xfchrt, wird die Kombination auf ihren Standardwert zur\xfcckgesetzt.\\n\\nSobald deine Kombo den Basiswert \xfcbersteigt, wird dein Paddel rot umrandet, um dich daran zu erinnern, dass es deine Kombo zerst\xf6rt, wenn du es mit dem Ball ber\xfchrst.","upgrades.sturdy_bricks.name":"Stabile Ziegel","upgrades.sturdy_bricks.tooltip":"+{{lvl}} Ziegel HP, +{{percent}}% M\xfcnzen, die beim Zerbrechen erzeugt werden","upgrades.sturdy_bricks.verbose_description":"Jede Stufe dieses Vorteils f\xfcgt allen Steinen einen HP hinzu. Du kannst die HP-Zahl mit der Perk \\"Hellseher\\" sehen. Du kannst den Schaden der Kugeln erh\xf6hen, indem du den \\"Piercing\\"-Perk bekommst. Jede Stufe des Vorteils erh\xf6ht den Spawn von M\xfcnzen um 50 %.","upgrades.superhot.name":"SUPER HEISS","upgrades.superhot.tooltip":"Die Zeit bewegt sich, wenn sich das Paddel bewegt.","upgrades.superhot.verbose_description":"SUPERHEISS SUPERHEISS SUPERHEISS SUPERHEISS","upgrades.telekinesis.help_plural":"St\xe4rkere Wirkung auf den Ball","upgrades.telekinesis.name":"Telekinese","upgrades.telekinesis.tooltip":"Das Paddel steuert die Flugbahn des Balls","upgrades.telekinesis.verbose_description":"Du kontrollierst den Ball, w\xe4hrend er nach oben fliegt.","upgrades.top_is_lava.name":"Der Himmel ist die Grenze","upgrades.top_is_lava.tooltip":"+{{lvl}} Combo pro Stein, wird zur\xfcckgesetzt, wenn die Spitze getroffen wird","upgrades.top_is_lava.verbose_description":"Jedes Mal, wenn du einen Stein zerbrichst, erh\xf6ht sich deine Kombo um eins. Allerdings wird deine Kombo zur\xfcckgesetzt, sobald dein Ball den oberen Rand des Bildschirms trifft.\\n\\nWenn deine Kombo \xfcber dem Minimum liegt, erscheint oben ein roter Balken, der dich daran erinnert, dass du es vermeiden solltest, ihn zu treffen.","upgrades.trampoline.name":"Trampolin","upgrades.trampoline.tooltip":"+{{lvl}} Combo pro Paddelabprall, -{{lvl}} Combo pro Abprall an einer beliebigen Grenze","upgrades.trampoline.verbose_description":"Eine der seltenen Combo-Upgrades, die keine R\xfccksetzbedingung hinzuf\xfcgen","upgrades.transparency.name":"Transparenz","upgrades.transparency.tooltip":"Je h\xf6her der Ball auf dem Bildschirm ist, desto transparenter wird er. Je transparenter sie ist, desto mehr M\xfcnzen produziert sie.","upgrades.transparency.verbose_description":"Je h\xf6her die Stufe, desto eher wird der Ball transparent und desto h\xf6her ist der Punktebonus.","upgrades.trickledown.name":"Trickle down economics","upgrades.trickledown.tooltip":"Die M\xfcnzen erscheinen am oberen Rand des Bildschirms.","upgrades.trickledown.verbose_description":"Es k\xf6nnte Ihnen helfen, ein paar M\xfcnzen zur Seite zu legen.","upgrades.unbounded.name":"Polsterung","upgrades.unbounded.tooltip":"F\xfcgt links und rechts des Levels Platz hinzu, aber dein Paddel kann nicht so weit gehen.","upgrades.unbounded.verbose_description":"Ein weiteres Upgrade k\xf6nnte Ihnen helfen, die Reichweite Ihres Paddels zu vergr\xf6\xdfern.","upgrades.viscosity.name":"Viskosit\xe4t","upgrades.viscosity.tooltip":"Langsamerer M\xfcnzfall","upgrades.viscosity.verbose_description":"M\xfcnzen beschleunigen normalerweise durch Schwerkraft und Explosionen auf ziemlich hohe Geschwindigkeiten.\\n\\nMit dieser F\xe4higkeit werden sie st\xe4ndig langsamer, als ob sie sich in einer Art z\xe4hfl\xfcssiger Fl\xfcssigkeit bef\xe4nden.\\n\\nDas macht es einfacher, sie zu fangen, und l\xe4sst sich gut mit Perks kombinieren, die die Bewegung der M\xfcnze beeinflussen.","upgrades.wind.help_plural":"St\xe4rkere Windkraft","upgrades.wind.name":"WIND","upgrades.wind.tooltip":"Paddelstellung erzeugt Wind","upgrades.wind.verbose_description":"Der Wind h\xe4ngt von der Paddelposition ab: links bl\xe4st links, rechts bl\xe4st rechts. Wirkt sich sowohl auf B\xe4lle als auch auf M\xfcnzen aus.","upgrades.yoyo.name":"Yo-Yo","upgrades.yoyo.tooltip":"Ball f\xe4llt in Richtung Paddel","upgrades.yoyo.verbose_description":"Es ist das Gegenteil von Telekinese, den Ball zu kontrollieren, w\xe4hrend er wieder nach unten f\xe4llt.","upgrades.zen.name":"Zen","upgrades.zen.tooltip":"+{{lvl}} Combo pro Ziegel, wird bei einer Explosion zur\xfcckgesetzt","upgrades.zen.verbose_description":"Schlie\xdflich handelt es sich um ein gewaltfreies Spiel."}');
},{}],"5blfu":[function(require,module,exports,__globalThis) {
// Settings
var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js");
parcelHelpers.defineInteropFlag(exports);
parcelHelpers.export(exports, "getSettingValue", ()=>getSettingValue);
parcelHelpers.export(exports, "setSettingValue", ()=>setSettingValue);
parcelHelpers.export(exports, "commitSettingsChangesToLocalStorage", ()=>commitSettingsChangesToLocalStorage);
parcelHelpers.export(exports, "getTotalScore", ()=>getTotalScore);
parcelHelpers.export(exports, "getCurrentMaxCoins", ()=>getCurrentMaxCoins);
parcelHelpers.export(exports, "getCurrentMaxParticles", ()=>getCurrentMaxParticles);
parcelHelpers.export(exports, "cycleMaxCoins", ()=>cycleMaxCoins);
parcelHelpers.export(exports, "askForPersistentStorage", ()=>askForPersistentStorage);
var _toast = require("./toast");
var _i18N = require("./i18n/i18n");
let cachedSettings = {};
try {
for(let key in localStorage)try {
cachedSettings[key] = JSON.parse(localStorage.getItem(key) || "null");
} catch (e) {
console.warn(e);
}
} catch (e) {
console.warn(e);
}
function getSettingValue(key, defaultValue) {
return cachedSettings[key] ?? defaultValue;
}
// We avoid using localstorage synchronously for perf reasons
let needsSaving = new Set();
function setSettingValue(key, value) {
needsSaving.add(key);
cachedSettings[key] = value;
}
function commitSettingsChangesToLocalStorage() {
try {
for (let key of needsSaving)localStorage.setItem(key, JSON.stringify(cachedSettings[key]));
needsSaving.clear();
} catch (e) {
console.warn(e);
}
}
setInterval(()=>commitSettingsChangesToLocalStorage(), 500);
function getTotalScore() {
return getSettingValue("breakout_71_total_score", 0);
}
function getCurrentMaxCoins() {
return Math.pow(2, getSettingValue("max_coins", 2)) * 200;
}
function getCurrentMaxParticles() {
return getCurrentMaxCoins();
}
function cycleMaxCoins() {
setSettingValue("max_coins", (getSettingValue("max_coins", 2) + 1) % 7);
}
let asked = false;
function askForPersistentStorage() {
if (asked) return;
asked = true;
if (navigator.storage && navigator.storage.persist) navigator.storage.persist().then((persistent)=>{
if (persistent) (0, _toast.toast)((0, _i18N.t)('settings.storage_granted'));
else (0, _toast.toast)((0, _i18N.t)('settings.storage_refused'));
});
}
},{"@parcel/transformer-js/src/esmodule-helpers.js":"gkKU3","./toast":"nAuvo","./i18n/i18n":"eNPRm"}],"gkKU3":[function(require,module,exports,__globalThis) {
exports.interopDefault = function(a) {
return a && a.__esModule ? a : {
default: a
};
};
exports.defineInteropFlag = function(a) {
Object.defineProperty(a, '__esModule', {
value: true
});
};
exports.exportAll = function(source, dest) {
Object.keys(source).forEach(function(key) {
if (key === 'default' || key === '__esModule' || Object.prototype.hasOwnProperty.call(dest, key)) return;
Object.defineProperty(dest, key, {
enumerable: true,
get: function() {
return source[key];
}
});
});
return dest;
};
exports.export = function(dest, destName, get) {
Object.defineProperty(dest, destName, {
enumerable: true,
get: get
});
};
},{}],"nAuvo":[function(require,module,exports,__globalThis) {
var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js");
parcelHelpers.defineInteropFlag(exports);
parcelHelpers.export(exports, "toast", ()=>toast);
let div = document.createElement("div");
div.classList = "hidden toast";
document.body.appendChild(div);
let timeout;
function toast(html) {
div.classList = "toast visible";
div.innerHTML = html;
if (timeout) clearTimeout(timeout);
timeout = setTimeout(()=>{
timeout = undefined;
div.classList = "hidden toast";
}, 1500);
}
},{"@parcel/transformer-js/src/esmodule-helpers.js":"gkKU3"}],"6pQh7":[function(require,module,exports,__globalThis) {
var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js");
parcelHelpers.defineInteropFlag(exports);
parcelHelpers.export(exports, "clamp", ()=>clamp);
parcelHelpers.export(exports, "comboKeepingRate", ()=>comboKeepingRate);
parcelHelpers.export(exports, "hoursSpentPlaying", ()=>hoursSpentPlaying);
parcelHelpers.export(exports, "miniMarkDown", ()=>miniMarkDown);
parcelHelpers.export(exports, "firstWhere", ()=>firstWhere);
parcelHelpers.export(exports, "wallBouncedBest", ()=>wallBouncedBest);
parcelHelpers.export(exports, "wallBouncedGood", ()=>wallBouncedGood);
parcelHelpers.export(exports, "levelTimeBest", ()=>levelTimeBest);
parcelHelpers.export(exports, "levelTimeGood", ()=>levelTimeGood);
parcelHelpers.export(exports, "catchRateBest", ()=>catchRateBest);
parcelHelpers.export(exports, "catchRateGood", ()=>catchRateGood);
parcelHelpers.export(exports, "missesBest", ()=>missesBest);
parcelHelpers.export(exports, "missesGood", ()=>missesGood);
var _settings = require("./settings");
function clamp(value, min, max) {
return Math.max(min, Math.min(value, max));
}
function comboKeepingRate(level) {
return clamp(1 - 1 / (1 + level) * 1.5, 0, 1);
}
function hoursSpentPlaying() {
try {
const timePlayed = (0, _settings.getSettingValue)("breakout_71_total_play_time", 0);
return Math.floor(timePlayed / 1000 / 60 / 60);
} catch (e) {
return 0;
}
}
function miniMarkDown(md) {
let html = [];
let lastNode = null;
md.split("\n").forEach((line)=>{
const titlePrefix = line.match(/^#+ /)?.[0];
if (titlePrefix) {
if (lastNode) html.push(lastNode);
lastNode = {
tagName: "h" + (titlePrefix.length - 1),
text: line.slice(titlePrefix.length)
};
} else if (line.startsWith("- ")) {
if (lastNode?.tagName !== "ul") {
if (lastNode) html.push(lastNode);
lastNode = {
tagName: "ul",
text: ""
};
}
lastNode.text += "<li>" + line.slice(2) + "</li>";
} else if (!line.trim()) {
if (lastNode) html.push(lastNode);
lastNode = null;
} else {
if (lastNode?.tagName !== "p") {
if (lastNode) html.push(lastNode);
lastNode = {
tagName: "p",
text: ""
};
}
lastNode.text += line + " ";
}
});
if (lastNode) html.push(lastNode);
return html.map((h)=>"<" + h.tagName + ">" + h.text.replace(/\bhttps?:\/\/[^\s<>]+/gi, (a)=>`<a href="${a}">${a}</a>`) + "</" + h.tagName + ">").join("\n");
}
function firstWhere(arr, mapper) {
for(let i = 0; i < arr.length; i++){
const result = mapper(arr[i], i);
if (typeof result !== "undefined") return result;
}
}
const wallBouncedBest = 3, wallBouncedGood = 10, levelTimeBest = 30, levelTimeGood = 60, catchRateBest = 95, catchRateGood = 90, missesBest = 3, missesGood = 6;
},{"./settings":"5blfu","@parcel/transformer-js/src/esmodule-helpers.js":"gkKU3"}],"7OIPf":[function(require,module,exports,__globalThis) {
var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js");
parcelHelpers.defineInteropFlag(exports);
parcelHelpers.export(exports, "getLevelBackground", ()=>getLevelBackground);
parcelHelpers.export(exports, "hashCode", ()=>hashCode);
var _backgroundsJson = require("./data/backgrounds.json");
var _backgroundsJsonDefault = parcelHelpers.interopDefault(_backgroundsJson);
const backgrounds = (0, _backgroundsJsonDefault.default);
function getLevelBackground(level) {
return backgrounds[hashCode(level.name) % backgrounds.length];
}
function hashCode(string) {
let hash = 0;
for(let i = 0; i < string.length; i++){
let code = string.charCodeAt(i);
hash = (hash << 5) - hash + code;
hash = hash & hash; // Convert to 32bit integer
}
return Math.abs(hash);
}
},{"./data/backgrounds.json":"31wW4","@parcel/transformer-js/src/esmodule-helpers.js":"gkKU3"}],"31wW4":[function(require,module,exports,__globalThis) {
module.exports = JSON.parse("[\"<svg xmlns='http://www.w3.org/2000/svg' width='20' height='20'><path d='M3.25 10h13.5M10 3.25v13.5' stroke-width='1' stroke='white' fill='none'/></svg>\",\"<svg xmlns='http://www.w3.org/2000/svg' width='40' height='40'><path d='M11 6a5 5 0 01-5 5 5 5 0 01-5-5 5 5 0 015-5 5 5 0 015 5' stroke='none' fill='white'/></svg>\",\"<svg xmlns='http://www.w3.org/2000/svg' width='20' height='20'><path d='M10-10L20 0v10L10 0zM20 0L10-10V0l10 10zm0 10L10 0v10l10 10zm0 10L10 10v10l10 10zM0 20l10-10v10L0 30zm0-10L10 0v10L0 20zM0 0l10-10V0L0 10z' stroke-width='1' stroke='white' fill='none'/></svg>\",\"<svg xmlns='http://www.w3.org/2000/svg' width='40' height='40'><path d='M15.986 4.186 4.1 16.072v.58L16.566 4.186Zm7.62 0 12.38 12.38v-.58l-11.8-11.8Zm12.38 19.248L23.52 35.9h.58l11.886-11.886ZM4.1 23.52v.58l11.8 11.8h.58z' stroke-width='1' stroke='white' fill='none'/></svg>\",\"<svg xmlns='http://www.w3.org/2000/svg' width='25' height='25'><path d='M9.19 0v3.93A9.187 9.187 0 003.93 9.19H0m0 6.618h3.93a9.188 9.188 0 005.26 5.26V25m6.619 0v-3.93a9.188 9.188 0 005.261-5.261H25m0-6.618h-3.93A9.188 9.188 0 0015.81 3.93V0' stroke-width='1' stroke='white' fill='none'/></svg>\",\"<svg xmlns='http://www.w3.org/2000/svg' width='29' height='33.487'><path d='M29 20.928v14.813M14.5 12.56v16.745M29-2.559v6.744l-14.5 8.374L0 4.189v-6.745m29 6.742l14.5 8.37m0 16.745L29 20.928l-14.5 8.376L0 20.931l-14.5 8.376m0-16.744L0 4.189m0 31.487V20.931' stroke-width='1' stroke='white' fill='none'/></svg>\",\"<svg xmlns='http://www.w3.org/2000/svg' width='29' height='50.115'><path d='M14.498 16.858L0 8.488.002-8.257l14.5-8.374L29-8.26l-.002 16.745zm0 50.06L0 58.548l.002-16.745 14.5-8.373L29 41.8l-.002 16.744zM28.996 41.8l-14.498-8.37.002-16.744L29 8.312l14.498 8.37-.002 16.745zm-29 0l-14.498-8.37.002-16.744L0 8.312l14.498 8.37-.002 16.745z' stroke-width='1' stroke='white' fill='none'/></svg>\",\"<svg xmlns='http://www.w3.org/2000/svg' width='62' height='68'><rect x='0' y='0' width='62' height='68' fill='black'/><path d='M41.845 51.072h3.465v-7.035h-7.076v13.999H52.18V37.21H31.117m0 27.79V37.21M20.389 51.07h-3.466v-7.034H24v13.999H10.055V37.21h21.062m10.728-20.283h3.465v7.035h-7.076V9.964H52.18V30.79H31.117m0-27.789v27.79M20.389 16.927h-3.466v7.035H24V9.964H10.055V30.79h21.062M3 3h56v62H3.126z' stroke-width='1' stroke='white' fill='none'/></svg>\",\"<svg xmlns='http://www.w3.org/2000/svg' width='26.55' height='25'><rect x='0' y='0' width='26.55' height='25' fill='black'/><path d='M0 10.86v3.22c2.7.08 4.9 2.31 4.9 5.03V25h3.2v-5.9c0-4.48-3.63-8.16-8.1-8.24ZM18.17 25h3.21v-5.9a5.05 5.05 0 0 1 5.03-5.02h.14v-3.21h-.14a8.27 8.27 0 0 0-8.24 8.24zm3.21-25h-3.21v1.64a5.05 5.05 0 0 1-5.03 5.02A5.05 5.05 0 0 1 8.1 1.64V0H4.89v1.64c0 4.53 3.7 8.24 8.25 8.24 4.53 0 8.24-3.7 8.24-8.24z' stroke='none' fill='white'/></svg>\",\"<svg xmlns='http://www.w3.org/2000/svg' width='40' height='79.392'><path d='m.135 40.054-14.277-25.722M0 40.054l14.278-25.722M0 40.054v-40m0 40-20-20 20-20 20 20Zm-.135-.716L14.142 65.06M0 39.338-14.278 65.06M0 39.338v40m0-40 20 20-20 20-20-20Zm40.136.716L25.858 14.332M40 40.054l14.278-25.722M40 40.054v-40m-20 20 20-20 20 20-20 20Zm19.865 19.284L54.142 65.06M40 39.338 25.722 65.06M40 39.338v40m20-20-20 20-20-20 20-20Z' stroke-width='1' stroke='white' fill='none'/></svg>\",\"<svg xmlns='http://www.w3.org/2000/svg' width='50' height='29.442'><path d='M35.569-17.373 22.959 4.468l-12.61-21.841Zm0 29.442-12.61 21.84-12.61-21.84Zm25-14.721-12.61 21.841-12.61-21.841zm0 29.441-12.61 21.842-12.61-21.842Zm-33.478 0L39.7 4.95l12.61 21.84zM10.569-2.652l-12.61 21.841-12.61-21.841Zm0 29.441-12.61 21.842-12.61-21.842Zm-33.478 0L-10.3 4.95l12.61 21.84zm25-14.72L14.7-9.773l12.61 21.842zm0 29.441L14.7 19.67l12.61 21.841z' stroke-width='1' stroke='white' fill='none'/></svg>\",\"<svg xmlns='http://www.w3.org/2000/svg' width='40' height='59.428'><path d='M0 70.975V47.881m20-1.692L8.535 52.808v13.239L20 72.667l11.465-6.62V52.808zm0-32.95l11.465-6.62V-6.619L20-13.24 8.535-6.619V6.619L20 13.24m8.535 4.927v13.238L40 38.024l11.465-6.62V18.166L40 11.546zM20 36.333L0 47.88m0 0v23.094m0 0l20 11.548 20-11.548V47.88m0 0L20 36.333m0 0l20 11.549M0 11.547l-11.465 6.619v13.239L0 38.025l11.465-6.62v-13.24L0 11.548v-23.094l20-11.547 20 11.547v23.094M20 36.333V13.24' stroke-width='1' stroke='white' fill='none'/></svg>\",\"<svg xmlns='http://www.w3.org/2000/svg' width='70' height='8'><path d='M-.02 22c8.373 0 11.938-4.695 16.32-9.662C20.785 7.258 25.728 2 35 2c9.272 0 14.215 5.258 18.7 10.338C58.082 17.305 61.647 22 70.02 22M-.02 14.002C8.353 14 11.918 9.306 16.3 4.339 20.785-.742 25.728-6 35-6 44.272-6 49.215-.742 53.7 4.339c4.382 4.967 7.947 9.661 16.32 9.664M70 6.004c-8.373-.001-11.918-4.698-16.3-9.665C49.215-8.742 44.272-14 35-14c-9.272 0-14.215 5.258-18.7 10.339C11.918 1.306 8.353 6-.02 6.002' stroke-width='1' stroke='white' fill='none'/></svg>\",\"<svg xmlns='http://www.w3.org/2000/svg' width='45' height='51.96'><path d='M52.48 44.47a15 15 0 01-14.96 0 15 15 0 00-7.48 12.96M7.48 44.42a15 15 0 01-14.96 0M15 57.44c0-5.35-2.9-10.35-7.52-13.02a15 15 0 017.48-12.97M7.48 18.5a14.97 14.97 0 01-14.98-.03m15.02-.03A15 15 0 0115 5.47a15 15 0 00-4.4-10.62m23.8.05A15 15 0 0030 5.53a15 15 0 017.48 12.96 14.9 14.9 0 0015.02-.03m-22.5 13a15.13 15.13 0 017.52 13.01m-7.56-39a15 15 0 01-14.96 0M7.48 18.5a15 15 0 017.48 12.96 15 15 0 0015.04 0 15 15 0 017.48-12.96' stroke-width='1' stroke='white' fill='none'/></svg>\",\"<svg xmlns='http://www.w3.org/2000/svg' width='72' height='43.875'><path d='m14.296 7.185 7.236 7.234L36.002-.048l14.47 14.47 7.236-7.233L36-14.518Zm-7.275 7.251 7.258 7.26 7.259-7.26-7.258-7.259zm-28.798 14.76 7.237 7.237L-.023 21.916 14.452 36.39l7.26-7.258L0 7.42Zm50.746 7.193-7.258-7.258-7.26 7.258 7.26 7.26zm57.568.046 7.24-7.238L72 7.42 50.282 29.137l7.259 7.259L72.02 21.918Zm-28.993-.042-7.26-7.258-7.258 7.258 7.26 7.26zm.233 14.742L36 29.358 14.223 51.135l7.258 7.258L36 43.875l14.518 14.517ZM50.453 14.45l7.259 7.26 7.258-7.26-7.258-7.257z' stroke-width='1' stroke='white' fill='none'/></svg>\",\"<svg xmlns='http://www.w3.org/2000/svg' width='40' height='40'><path d='M45.69 13.342c-1.677.945-3.557 1.6-5.48 1.588-1.922-.012-3.795-.691-5.462-1.653-1.668-.962-3.156-2.202-4.637-3.435-1.48-1.232-2.97-2.47-4.641-3.427-1.67-.957-3.547-1.628-5.47-1.628-1.923 0-3.8.67-5.47 1.628-1.67.956-3.161 2.195-4.641 3.427-1.48 1.233-2.97 2.473-4.637 3.435-1.667.962-3.54 1.641-5.463 1.653-1.922.012-3.802-.643-5.478-1.588v13.316c1.676-.945 3.556-1.6 5.478-1.588 1.923.012 3.796.691 5.463 1.653 1.668.962 3.156 2.202 4.637 3.435 1.48 1.232 2.97 2.47 4.641 3.427 1.67.957 3.547 1.628 5.47 1.628 1.923 0 3.8-.67 5.47-1.628 1.67-.956 3.161-2.195 4.641-3.427 1.48-1.233 2.97-2.473 4.637-3.435 1.667-.962 3.54-1.641 5.463-1.653 1.922-.012 3.802.643 5.478 1.588z' stroke-width='1' stroke='white' fill='none'/></svg>\",\"<svg xmlns='http://www.w3.org/2000/svg' width='20' height='40'><path d='M0 0v5.436c.385-.146.767.123 1.163.82.948 1.674 2.214 2.996 3.46 4.294C6.977 13.002 9.2 15.318 9.2 19.995c0 4.679-2.223 6.994-4.577 9.447-1.246 1.299-2.512 2.621-3.46 4.295-.396.698-.777.966-1.163.82V40h1.198v-.005c0-4.678 2.224-6.992 4.579-9.445 1.245-1.298 2.51-2.62 3.459-4.295.654-1.154 1.273-1.154 1.926 0 .95 1.673 2.214 2.997 3.46 4.295 2.353 2.452 4.578 4.767 4.578 9.445V40h.8v-5.442c-.252-.095-.504-.365-.762-.82-.95-1.675-2.214-2.998-3.46-4.296-2.353-2.452-4.576-4.768-4.576-9.447-.001-4.678 2.221-6.993 4.575-9.445 1.246-1.298 2.512-2.62 3.46-4.294.259-.456.511-.725.763-.82V0h-.8c0 4.676-2.224 6.991-4.577 9.442-1.246 1.298-2.512 2.621-3.46 4.296-.653 1.153-1.273 1.153-1.926 0-.948-1.675-2.214-2.998-3.46-4.296C3.424 6.991 1.2 4.676 1.2 0Z' stroke='none' fill='white'/></svg>\",\"<svg xmlns='http://www.w3.org/2000/svg' width='50' height='33.333'><path d='M25 .806v2.79h.8V.806Zm0 4.465v2.791h.8v-2.79Zm-2.043 3.902-2.32 1.55.444.665 2.32-1.55-.443-.665zm4.885 0-.444.665 2.32 1.55.445-.665zM-.4 10.61v2.79h.8v-2.79zm50 0v2.79h.8v-2.79zm-30.356 1.042-2.32 1.55.443.666 2.322-1.55-.444-.666zm12.311 0-.444.665 2.32 1.55.445-.664zm3.783 2.566-.444.666 2.321 1.55.444-.666zm-19.852.025-2.32 1.55.444.665 2.32-1.55zm-15.886.77v2.79h.8v-2.79Zm50 0v2.79h.8v-2.79Zm-50 4.465v2.79h.8v-2.79h-.8Zm50 0v2.79h.8v-2.79h-.8zM2.442 23.379l-.444.665 2.32 1.55.445-.665zm45.115 0-2.32 1.55.443.666 2.322-1.55-.444-.666zM6.155 25.86l-.444.665 2.32 1.55.445-.665zm37.69 0-2.322 1.55.444.665 2.321-1.55-.444-.666zM9.937 28.424l-.444.665 2.32 1.55.445-.665-2.321-1.55zm30.11.003-2.321 1.55.444.666 2.321-1.55zM25 29.737v2.79h.8v-2.79z' stroke='none' fill='white'/></svg>\",\"<svg xmlns='http://www.w3.org/2000/svg' width='69.282' height='40'><path d='M34.641-20v80m34.64-40L0-20m69.282 80L0 20m69.282 0L0 60m69.282-80L0 20m69.282-40v80M0-20v80M34.64 40l11.547-20m11.547 20l11.547 20M34.641 40h23.094m11.547-20L57.735 40M46.188 20L34.641 40l11.547 20h23.094L80.83 40 69.282 20H46.188zM34.641 40l11.547-20m11.547 20l11.547 20M34.641 40h23.094m11.547-20L57.735 40M46.188 20L34.641 40l11.547 20h23.094L80.83 40 69.282 20H46.188zM34.641 0l11.547-20M57.735 0l11.547 20M34.642 0h23.093m11.547-20L57.735 0M46.188-20L34.641 0l11.547 20h23.094L80.83 0 69.282-20H46.188zM34.641 40L23.094 20M11.547 40L0 60m34.64-20H11.548M0 20l11.547 20m11.547-20l11.547 20-11.547 20H0l-11.547-20L0 20h23.094zM34.641 0L23.094-20M11.547 0L0 20M34.64 0H11.548M0-20L11.547 0m11.547-20L34.641 0 23.094 20H0L-11.547 0 0-20h23.094z' stroke-width='1' stroke='white' fill='none'/></svg>\",\"<svg xmlns='http://www.w3.org/2000/svg' width='29' height='50.115'><path d='M14.5 6.628L8.886 3.372v-6.515L14.502-6.4l5.612 3.257-.001 6.514zm0 50.06l-5.613-3.256v-6.515l5.614-3.258 5.612 3.257-.001 6.515zm14.497-25.117l-5.612-3.257v-6.515L29 18.541l5.612 3.257-.001 6.515zm-29 0l-5.612-3.257v-6.515L0 18.541l5.612 3.257v6.515zM14.5 11.82L4.36 5.967l.002-11.706 10.14-5.855L24.638-5.74l-.001 11.707zm0 50.06L4.36 56.028l.002-11.706 10.14-5.855 10.137 5.852-.001 11.707zm14.498-25.118L18.858 30.91l.002-11.707L29 13.349l10.137 5.853-.001 11.706zm-29 0l-10.139-5.852.002-11.707L0 13.349l10.138 5.853-.002 11.706zm14.501-19.905L0 8.488.002-8.257l14.5-8.374L29-8.26l-.002 16.745zm0 50.06L0 58.548l.002-16.745 14.5-8.373L29 41.8l-.002 16.744zM28.996 41.8l-14.498-8.37.002-16.744L29 8.312l14.498 8.37-.002 16.745zm-29 0l-14.498-8.37.002-16.744L0 8.312l14.498 8.37-.002 16.745z' stroke-width='1' stroke='white' fill='none'/></svg>\",\"<svg xmlns='http://www.w3.org/2000/svg' width='60' height='60'><path d='M6.13-.002.005 6.125v1.059L6.59 13.77l.013-.014 16.243 16.24L6.617 46.23.535 40.15l10.147-10.153L.004 19.318v1.037l9.644 9.641-9.646 9.65v1.03L12.73 53.402l-6.082 6.082-6.127-6.127.014-.015-.533-.531v1.06l6.127 6.127h1.055l6.586-6.584-.012-.012 16.246-16.246L46.236 53.39l-6.082 6.082-10.15-10.15-10.68 10.677h1.033l9.647-9.644 9.646 9.644h1.034l12.722-12.723 6.082 6.082-6.125 6.125-.013-.011-.528.527h1.057l6.123-6.123V52.81l-6.58-6.58-.016.015L37.16 29.996 53.393 13.77l6.082 6.082-10.15 10.144 10.677 10.678v-1.031l-9.647-9.647 9.647-9.64v-1.038L47.279 6.596 53.361.514l6.13 6.127-.016.013.527.53V6.123L53.879-.002h-1.057l-6.586 6.586.014.012-16.244 16.246L13.77 6.607l6.082-6.08 10.153 10.15L40.684-.001H39.65l-9.646 9.647-9.647-9.647h-1.03L6.601 12.723.52 6.64 6.646.514l.012.013.528-.529H6.13zm7.114 7.113 16.76 16.76 16.762-16.76 6.127 6.127-16.764 16.758 16.764 16.762-6.127 6.127-16.76-16.76-16.762 16.76-6.127-6.127 16.758-16.762L7.117 13.238l6.127-6.127z' stroke='none' fill='white'/></svg>\",\"<svg xmlns='http://www.w3.org/2000/svg' width='80' height='97.989'><path d='m40 15.681 20.818-48.593-6.307-14.72-14.51 33.87-14.512-33.87-6.307 14.72zm0 .803-8.204 19.15L40 54.782l8.205-19.15zm14.511 33.872-6.306-14.723L40 54.783l-8.204-19.15-6.307 14.723L40 84.227zm0-29.445-6.306 14.722 6.306 14.723 6.307-14.723zM25.49 50.356l6.307-14.723-6.307-14.722-6.307 14.722zm0-29.445L19.182 6.19l-6.307 14.724 6.307 14.72zm29.022 0 6.307 14.722 6.308-14.72-6.308-14.724zm-14.51 92.76 20.817-48.594-6.307-14.721-14.51 33.871L25.49 50.356l-6.307 14.721zM25.488 50.355l-6.307-14.723-6.307 14.722 6.307 14.722zm29.022 0 6.307 14.721 6.308-14.722-6.308-14.722zm12.615-29.443-6.308 14.72 6.308 14.722 6.307-14.722zm-54.25 29.443 6.307-14.722-6.307-14.72-6.308 14.72zm0-29.442L6.567 6.189.26 20.91l6.307 14.722zm54.25 0 6.308 14.72 6.307-14.722L73.433 6.19zm0 29.442-6.307 14.722L67.126 79.8l6.307-14.722zM12.876 79.8l6.307-14.722-6.307-14.722-6.308 14.722zm0-29.444L6.567 35.633.26 50.356l6.307 14.721zm54.25 0 6.308 14.722 6.307-14.721-6.307-14.723zm0 29.444 6.308 14.723L79.741 79.8l-6.307-14.722zm-54.25 0L6.567 65.077.26 79.8l6.307 14.723z' stroke-width='1' stroke='white' fill='none'/></svg>\",\"<svg xmlns='http://www.w3.org/2000/svg' width='30' height='30'><path d='M9 20.502h0A7.5 7.5 0 0 1 1.5 28 7.5 7.5 0 0 0-6 35.5h0a7.5 7.5 0 0 1-7.5 7.499 7.476 7.476 0 0 1-5.304-2.196A7.482 7.482 0 0 1-21 35.5h0a7.5 7.5 0 0 1 7.5-7.5A7.5 7.5 0 0 0-6 20.502h0a7.5 7.5 0 1 1 15 0zm15 0h0A7.5 7.5 0 0 1 16.5 28a7.476 7.476 0 0 1-5.304-2.196A7.482 7.482 0 0 1 9 20.502h0c0-2.072-.84-3.947-2.197-5.303A7.477 7.477 0 0 0 1.5 13.002a7.476 7.476 0 0 1-5.304-2.196A7.482 7.482 0 0 1-6 5.503h0a7.5 7.5 0 1 1 15 0h0c0 2.07.84 3.945 2.196 5.303a7.476 7.476 0 0 0 5.304 2.196c2.07 0 3.945.84 5.303 2.197A7.471 7.471 0 0 1 24 20.502zm15 0h0A7.5 7.5 0 0 1 31.5 28a7.5 7.5 0 0 0-7.5 7.5h0a7.5 7.5 0 0 1-7.5 7.499 7.476 7.476 0 0 1-5.304-2.196A7.482 7.482 0 0 1 9 35.5h0a7.5 7.5 0 0 1 7.5-7.5 7.5 7.5 0 0 0 7.5-7.498h0a7.5 7.5 0 1 1 15 0zm0-30h0A7.5 7.5 0 0 1 31.5-2 7.5 7.5 0 0 0 24 5.5h0a7.5 7.5 0 0 1-7.5 7.499 7.476 7.476 0 0 1-5.304-2.196A7.482 7.482 0 0 1 9 5.5h0A7.5 7.5 0 0 1 16.5-2 7.5 7.5 0 0 0 24-9.498h0a7.5 7.5 0 1 1 15 0zm-22.5 37.5a7.5 7.5 0 0 0-7.5 7.5c0-2.072-.84-3.947-2.197-5.303A7.477 7.477 0 0 0 1.5 28.002 7.5 7.5 0 0 0 9 20.503c0 2.07.84 3.945 2.196 5.303a7.476 7.476 0 0 0 5.304 2.196zm15-15a7.5 7.5 0 0 0-7.5 7.5c0-2.072-.84-3.947-2.197-5.303a7.477 7.477 0 0 0-5.303-2.197A7.5 7.5 0 0 0 24 5.503c0 2.07.84 3.945 2.196 5.303a7.476 7.476 0 0 0 5.304 2.196z' stroke-width='1' stroke='white' fill='none'/></svg>\",\"<svg xmlns='http://www.w3.org/2000/svg' width='40' height='69.282'><path d='M13.333-3.849v23.094M6.667-15.396l20 11.547M13.333-19.245l20 11.547M20 0v23.094m20-34.641l-6.667 3.849-6.666 3.849L20 0M0-11.547l6.667 3.849 6.666 3.849L20 0m0-23.094l20 11.547v23.094L20 23.094l-6.667-3.849-6.666-3.849L0 11.547v-23.094l6.667-3.849 6.666-3.849zM40-3.769L20 7.698m20-3.849l-16.253 9.384L20 15.396M6.667-7.698v23.094m6.666 50.037v23.094M6.667 53.886l20 11.547M13.333 50.037l20 11.547M20 69.282v23.094m20-34.641l-6.667 3.849-6.666 3.849L20 69.282M0 57.735l6.667 3.849 6.666 3.849L20 69.282m0-23.094l20 11.547v23.094L20 92.376l-6.667-3.849-6.666-3.849L0 80.829V57.735l6.667-3.849 6.666-3.849zm20 19.325L20 76.98m20-3.849L20 84.678M6.667 61.584v23.094m26.666-53.886v23.094m-6.666-34.641l20 11.547M33.333 15.396l20 11.547M40 34.641v23.094m20-34.641l-6.667 3.849-6.666 3.849L40 34.641M20 23.094l6.667 3.849 6.666 3.849L40 34.641m0-23.094l20 11.547v23.094L40 57.735l-6.667-3.849-6.666-3.849L20 46.188V23.094l6.667-3.849 6.666-3.849zm20 19.325L40 42.339m20-3.849L40 50.037M26.667 26.943v23.094M-6.667 30.792v23.094m-6.666-34.641l20 11.547M-6.667 15.396l20 11.547M0 34.641v23.094m20-34.641l-6.667 3.849-6.666 3.849L0 34.641m-20-11.547l6.667 3.849 6.666 3.849L0 34.641m0-23.094l20 11.547v23.094L0 57.735l-6.667-3.849-6.666-3.849L-20 46.188V23.094l6.667-3.849 6.666-3.849zm20 19.325L0 42.339m20-3.849L0 50.037m-13.333-23.094v23.094' stroke-width='1' stroke='white' fill='none'/></svg>\",\"<svg xmlns='http://www.w3.org/2000/svg' width='40' height='40'><path d='M46.231 19.999a5.937 7.48 0 01-5.937 7.48A5.937 7.48 0 0134.357 20a5.937 7.48 0 015.937-7.48 5.937 7.48 0 015.937 7.48zm-40.421 0a5.937 7.48 0 01-5.937 7.48A5.937 7.48 0 01-6.064 20a5.937 7.48 0 015.937-7.48 5.937 7.48 0 015.937 7.48zm20.21 20.285a5.937 7.48 0 01-5.937 7.48 5.937 7.48 0 01-5.936-7.48 5.937 7.48 0 015.936-7.48 5.937 7.48 0 015.937 7.48zm0-40.57a5.937 7.48 0 01-5.937 7.48 5.937 7.48 0 01-5.936-7.48 5.937 7.48 0 015.936-7.48 5.937 7.48 0 015.937 7.48zM-5.732 46.942c1.676-.944 3.556-1.6 5.478-1.587 1.924.011 3.796.69 5.463 1.653 1.668.962 3.156 2.202 4.637 3.434 1.48 1.233 2.97 2.471 4.641 3.428 1.67.957 3.547 1.627 5.47 1.627 1.924 0 3.8-.67 5.47-1.627s3.161-2.195 4.642-3.428c1.48-1.232 2.968-2.472 4.636-3.434 1.667-.963 3.54-1.642 5.463-1.653 1.922-.012 3.802.643 5.479 1.587V33.628c-1.677.944-3.557 1.6-5.479 1.587-1.923-.011-3.796-.69-5.463-1.653-1.668-.962-3.156-2.202-4.636-3.434-1.48-1.233-2.971-2.471-4.642-3.428-1.67-.957-3.546-1.627-5.47-1.627-1.923 0-3.8.67-5.47 1.627s-3.161 2.195-4.641 3.428c-1.48 1.232-2.97 2.472-4.637 3.434-1.667.963-3.54 1.641-5.463 1.653-1.922.012-3.802-.643-5.478-1.587zM45.647-6.943c-1.677.944-3.557 1.6-5.479 1.587-1.923-.011-3.796-.69-5.463-1.653-1.668-.962-3.156-2.202-4.636-3.434-1.48-1.233-2.971-2.471-4.642-3.428-1.67-.957-3.546-1.627-5.47-1.627-1.923 0-3.8.67-5.47 1.627s-3.161 2.195-4.641 3.428c-1.48 1.232-2.97 2.472-4.637 3.434-1.667.963-3.54 1.642-5.463 1.653-1.922.012-3.802-.643-5.478-1.587V6.372c1.676-.944 3.556-1.6 5.478-1.587 1.924.012 3.796.69 5.463 1.653C6.877 7.4 8.365 8.64 9.846 9.872c1.48 1.233 2.97 2.471 4.641 3.428 1.67.957 3.547 1.627 5.47 1.627 1.924 0 3.8-.67 5.47-1.627s3.161-2.195 4.642-3.428c1.48-1.232 2.968-2.472 4.636-3.434 1.667-.963 3.54-1.642 5.463-1.653 1.922-.012 3.802.643 5.479 1.587z' stroke-width='1' stroke='white' fill='none'/></svg>\"]");
},{}],"6rQoT":[function(require,module,exports,__globalThis) {
var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js");
parcelHelpers.defineInteropFlag(exports);
parcelHelpers.export(exports, "levelIconHTML", ()=>levelIconHTML);
let levelIconHTMLCanvas = document.createElement("canvas");
const levelIconHTMLCanvasCtx = levelIconHTMLCanvas.getContext("2d", {
antialias: false,
alpha: true
});
function levelIconHTML(bricks, levelSize, color) {
const size = 46;
const c = levelIconHTMLCanvas;
const ctx = levelIconHTMLCanvasCtx;
if (!ctx) return "";
c.width = size;
c.height = size;
ctx.clearRect(0, 0, size, size);
const pxSize = size / levelSize;
for(let x = 0; x < levelSize; x++)for(let y = 0; y < levelSize; y++){
const c = bricks[y * levelSize + x];
if (c) {
ctx.fillStyle = c;
ctx.fillRect(Math.floor(pxSize * x), Math.floor(pxSize * y), Math.ceil(pxSize), Math.ceil(pxSize));
}
}
return `<img alt="" width="${size}" height="${size}" src="${c.toDataURL()}"/>`;
}
},{"@parcel/transformer-js/src/esmodule-helpers.js":"gkKU3"}],"dQKPV":[function(require,module,exports,__globalThis) {
var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js");
parcelHelpers.defineInteropFlag(exports);
parcelHelpers.export(exports, "playPendingSounds", ()=>playPendingSounds);
parcelHelpers.export(exports, "sounds", ()=>sounds);
parcelHelpers.export(exports, "getAudioContext", ()=>getAudioContext);
parcelHelpers.export(exports, "getAudioRecordingTrack", ()=>getAudioRecordingTrack);
var _options = require("./options");
let lastPlay = Date.now();
function playPendingSounds(gameState) {
if (lastPlay > Date.now() - 60) return;
lastPlay = Date.now();
for(let key in gameState.aboutToPlaySound){
const soundName = key;
const ex = gameState.aboutToPlaySound[soundName];
if (ex.vol) {
sounds[soundName](// In stress test, dim the sounds but play them
Math.min(1, ex.vol), pixelsToPan(gameState, ex.x), gameState.combo);
ex.vol = 0;
}
}
}
const sounds = {
wallBeep: (volume, pan)=>{
if (!(0, _options.isOptionOn)("sound")) return;
createSingleBounceSound(800, pan, volume);
},
plouf: (volume, pan)=>{
if (!(0, _options.isOptionOn)("sound")) return;
createSingleBounceSound(500, pan, volume * 0.5);
// createWaterDropSound(800, pan, volume*0.2, 0.2,'triangle')
},
comboIncreaseMaybe: (volume, pan, combo)=>{
if (!(0, _options.isOptionOn)("sound")) return;
let delta = 0;
if (!isNaN(lastComboPlayed)) {
if (lastComboPlayed < combo) delta = 1;
if (lastComboPlayed > combo) delta = -1;
}
playShepard(delta, pan, volume);
lastComboPlayed = combo;
},
comboDecrease (volume, pan, combo) {
if (!(0, _options.isOptionOn)("sound")) return;
playShepard(-1, pan, volume);
},
coinBounce: (volume, pan, combo)=>{
if (!(0, _options.isOptionOn)("sound")) return;
createSingleBounceSound(1200, pan, volume, 0.1, "triangle");
},
// void: (volume: number, pan: number) => {
// if (!isOptionOn("sound")) return;
// createSingleBounceSound(1200, pan, volume, 0.5, "sawtooth");
// createSingleBounceSound(600, pan, volume, 0.3, "sawtooth");
// },
// freeze: (volume: number, pan: number) => {
// if (!isOptionOn("sound")) return;
// createSingleBounceSound(220, pan, volume, 0.5, "square");
// createSingleBounceSound(440, pan, volume, 0.5, "square");
// },
explode: (volume, pan, combo)=>{
if (!(0, _options.isOptionOn)("sound")) return;
createExplosionSound(pan);
},
lifeLost (volume, pan, combo) {
if (!(0, _options.isOptionOn)("sound")) return;
createShatteredGlassSound(pan);
},
coinCatch (volume, pan, combo) {
if (!(0, _options.isOptionOn)("sound")) return;
createSingleBounceSound(900, pan, volume, 0.1, "triangle");
},
colorChange (volume, pan, combo) {
createSingleBounceSound(400, pan, volume, 0.5, "sine");
createSingleBounceSound(800, pan, volume * 0.5, 0.2, "square");
}
};
// How to play the code on the leftconst context = new window.AudioContext();
let audioContext, audioRecordingTrack;
function getAudioContext() {
if (!audioContext) {
if (!(0, _options.isOptionOn)("sound")) return null;
audioContext = new (window.AudioContext || window.webkitAudioContext)();
audioRecordingTrack = audioContext.createMediaStreamDestination();
}
return audioContext;
}
function getAudioRecordingTrack() {
getAudioContext();
return audioRecordingTrack;
}
function createSingleBounceSound(baseFreq = 800, pan = 0.5, volume = 1, duration = 0.1, type = "sine") {
const context = getAudioContext();
if (!context) return;
const oscillator = createOscillator(context, baseFreq, type);
// Create a gain node to control the volume
const gainNode = context.createGain();
oscillator.connect(gainNode);
// Create a stereo panner node for left-right panning
const panner = context.createStereoPanner();
panner.pan.setValueAtTime(pan * 2 - 1, context.currentTime);
gainNode.connect(panner);
panner.connect(context.destination);
panner.connect(audioRecordingTrack);
// Set up the gain envelope to simulate the impact and quick decay
gainNode.gain.setValueAtTime(0.8 * volume, context.currentTime); // Initial impact
gainNode.gain.exponentialRampToValueAtTime(0.001, context.currentTime + duration); // Quick decay
// Start the oscillator
oscillator.start(context.currentTime);
// Stop the oscillator after the decay
oscillator.stop(context.currentTime + duration);
}
let noiseBuffer;
function getNoiseBuffer(context) {
if (!noiseBuffer) {
const bufferSize = context.sampleRate * 2; // 2 seconds
noiseBuffer = context.createBuffer(1, bufferSize, context.sampleRate);
const output = noiseBuffer.getChannelData(0);
// Fill the buffer with random noise
for(let i = 0; i < bufferSize; i++)output[i] = Math.random() * 2 - 1;
}
return noiseBuffer;
}
function createExplosionSound(pan = 0.5) {
const context = getAudioContext();
if (!context) return;
// Create an audio buffer
// Create a noise source
const noiseSource = context.createBufferSource();
noiseSource.buffer = getNoiseBuffer(context);
// Create a gain node to control the volume
const gainNode = context.createGain();
noiseSource.connect(gainNode);
// Create a filter to shape the explosion sound
const filter = context.createBiquadFilter();
filter.type = "lowpass";
filter.frequency.setValueAtTime(1000, context.currentTime); // Set the initial frequency
gainNode.connect(filter);
// Create a stereo panner node for left-right panning
const panner = context.createStereoPanner();
panner.pan.setValueAtTime(pan * 2 - 1, context.currentTime); // pan 0 to 1 maps to -1 to 1
// Connect filter to panner and then to the destination (speakers)
filter.connect(panner);
panner.connect(context.destination);
panner.connect(audioRecordingTrack);
// Ramp down the gain to simulate the explosion's fade-out
gainNode.gain.setValueAtTime(1, context.currentTime);
gainNode.gain.exponentialRampToValueAtTime(0.01, context.currentTime + 1);
// Lower the filter frequency over time to create the "explosive" effect
filter.frequency.exponentialRampToValueAtTime(60, context.currentTime + 1);
// Start the noise source
noiseSource.start(context.currentTime);
// Stop the noise source after the sound has played
noiseSource.stop(context.currentTime + 1);
}
function pixelsToPan(gameState, pan) {
return Math.max(0, Math.min(1, (pan - gameState.offsetXRoundedDown) / gameState.gameZoneWidthRoundedUp));
}
let lastComboPlayed = NaN, shepard = 6;
function playShepard(delta, pan, volume) {
const shepardMax = 11, factor = 1.05945594920268, baseNote = 392;
shepard += delta;
if (shepard > shepardMax) shepard = 0;
if (shepard < 0) shepard = shepardMax;
const play = (note)=>{
const freq = baseNote * Math.pow(factor, note);
const diff = Math.abs(note - shepardMax * 0.5);
const maxDistanceToIdeal = 1.5 * shepardMax;
const vol = Math.max(0, volume * (1 - diff / maxDistanceToIdeal));
createSingleBounceSound(freq, pan, vol);
return freq.toFixed(2) + " at " + Math.floor(vol * 100) + "% diff " + diff;
};
play(1 + shepardMax + shepard);
play(shepard);
play(-1 - shepardMax + shepard);
}
function createShatteredGlassSound(pan) {
const context = getAudioContext();
if (!context) return;
const oscillators = [
createOscillator(context, 3000, "square"),
createOscillator(context, 4500, "square"),
createOscillator(context, 6000, "square")
];
const gainNode = context.createGain();
const noiseSource = context.createBufferSource();
noiseSource.buffer = getNoiseBuffer(context);
oscillators.forEach((oscillator)=>oscillator.connect(gainNode));
noiseSource.connect(gainNode);
gainNode.gain.setValueAtTime(0.2, context.currentTime);
oscillators.forEach((oscillator)=>oscillator.start());
noiseSource.start();
oscillators.forEach((oscillator)=>oscillator.stop(context.currentTime + 0.2));
noiseSource.stop(context.currentTime + 0.2);
gainNode.gain.exponentialRampToValueAtTime(0.001, context.currentTime + 0.2);
// Create a stereo panner node for left-right panning
const panner = context.createStereoPanner();
panner.pan.setValueAtTime(pan * 2 - 1, context.currentTime);
gainNode.connect(panner);
panner.connect(context.destination);
panner.connect(audioRecordingTrack);
gainNode.connect(panner);
}
// Helper function to create an oscillator with a specific frequency
function createOscillator(context, frequency, type) {
const oscillator = context.createOscillator();
oscillator.type = type;
oscillator.frequency.setValueAtTime(frequency, context.currentTime);
return oscillator;
}
},{"./options":"d5NoS","@parcel/transformer-js/src/esmodule-helpers.js":"gkKU3"}],"d5NoS":[function(require,module,exports,__globalThis) {
var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js");
parcelHelpers.defineInteropFlag(exports);
parcelHelpers.export(exports, "options", ()=>options);
parcelHelpers.export(exports, "isOptionOn", ()=>isOptionOn);
parcelHelpers.export(exports, "toggleOption", ()=>toggleOption);
var _i18N = require("./i18n/i18n");
var _settings = require("./settings");
var _pureFunctions = require("./pure_functions");
const options = {
sound: {
default: true,
name: (0, _i18N.t)("settings.sounds"),
help: (0, _i18N.t)("settings.sounds_help")
},
"mobile-mode": {
default: window.innerHeight > window.innerWidth,
name: (0, _i18N.t)("settings.mobile"),
help: (0, _i18N.t)("settings.mobile_help")
},
basic: {
default: false,
name: (0, _i18N.t)("settings.basic"),
help: (0, _i18N.t)("settings.basic_help")
},
colorful_coins: {
default: false,
name: (0, _i18N.t)("settings.colorful_coins"),
help: (0, _i18N.t)("settings.colorful_coins_help")
},
extra_bright: {
default: true,
name: (0, _i18N.t)("settings.extra_bright"),
help: (0, _i18N.t)("settings.extra_bright_help")
},
smooth_lighting: {
default: true,
name: (0, _i18N.t)("settings.smooth_lighting"),
help: (0, _i18N.t)("settings.smooth_lighting_help")
},
precise_lighting: {
default: true,
name: (0, _i18N.t)("settings.precise_lighting"),
help: (0, _i18N.t)("settings.precise_lighting_help")
},
probabilistic_lighting: {
default: false,
name: (0, _i18N.t)("settings.probabilistic_lighting"),
help: (0, _i18N.t)("settings.probabilistic_lighting_help")
},
contrast: {
default: false,
name: (0, _i18N.t)("settings.contrast"),
help: (0, _i18N.t)("settings.contrast_help")
},
show_fps: {
default: false,
name: (0, _i18N.t)("settings.show_fps"),
help: (0, _i18N.t)("settings.show_fps_help")
},
show_stats: {
default: false,
name: (0, _i18N.t)("settings.show_stats"),
help: (0, _i18N.t)("settings.show_stats_help")
},
pointerLock: {
default: false,
name: (0, _i18N.t)("settings.pointer_lock"),
help: (0, _i18N.t)("settings.pointer_lock_help")
},
easy: {
default: false,
name: (0, _i18N.t)("settings.kid"),
help: (0, _i18N.t)("settings.kid_help")
},
// Could not get the sharing to work without loading androidx and all the modern android things so for now I'll just disable sharing in the android app
record: {
default: false,
name: (0, _i18N.t)("settings.record"),
help: (0, _i18N.t)("settings.record_help")
},
fullscreen: {
default: false,
name: (0, _i18N.t)("settings.fullscreen"),
help: (0, _i18N.t)("settings.fullscreen_help")
},
donation_reminder: {
default: (0, _pureFunctions.hoursSpentPlaying)() > 5,
name: (0, _i18N.t)("settings.donation_reminder"),
help: (0, _i18N.t)("settings.donation_reminder_help")
},
red_miss: {
default: true,
name: (0, _i18N.t)("settings.red_miss"),
help: (0, _i18N.t)("settings.red_miss_help")
},
comboIncreaseTexts: {
default: true,
name: (0, _i18N.t)("settings.comboIncreaseTexts"),
help: (0, _i18N.t)("settings.comboIncreaseTexts_help")
}
};
function isOptionOn(key) {
return (0, _settings.getSettingValue)("breakout-settings-enable-" + key, options[key]?.default);
}
function toggleOption(key) {
(0, _settings.setSettingValue)("breakout-settings-enable-" + key, !isOptionOn(key));
}
},{"./i18n/i18n":"eNPRm","./settings":"5blfu","./pure_functions":"6pQh7","@parcel/transformer-js/src/esmodule-helpers.js":"gkKU3"}],"cEeac":[function(require,module,exports,__globalThis) {
var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js");
parcelHelpers.defineInteropFlag(exports);
parcelHelpers.export(exports, "describeLevel", ()=>describeLevel);
parcelHelpers.export(exports, "getMajorityValue", ()=>getMajorityValue);
parcelHelpers.export(exports, "sample", ()=>sample);
parcelHelpers.export(exports, "sumOfValues", ()=>sumOfValues);
parcelHelpers.export(exports, "makeEmptyPerksMap", ()=>makeEmptyPerksMap);
parcelHelpers.export(exports, "brickCenterX", ()=>brickCenterX);
parcelHelpers.export(exports, "brickCenterY", ()=>brickCenterY);
parcelHelpers.export(exports, "getRowColIndex", ()=>getRowColIndex);
parcelHelpers.export(exports, "getClosestBall", ()=>getClosestBall);
parcelHelpers.export(exports, "getPossibleUpgrades", ()=>getPossibleUpgrades);
parcelHelpers.export(exports, "max_levels", ()=>max_levels);
parcelHelpers.export(exports, "pickedUpgradesHTMl", ()=>pickedUpgradesHTMl);
parcelHelpers.export(exports, "levelsListHTMl", ()=>levelsListHTMl);
parcelHelpers.export(exports, "currentLevelInfo", ()=>currentLevelInfo);
parcelHelpers.export(exports, "isPickyEatingPossible", ()=>isPickyEatingPossible);
parcelHelpers.export(exports, "reachRedRowIndex", ()=>reachRedRowIndex);
parcelHelpers.export(exports, "telekinesisEffectRate", ()=>telekinesisEffectRate);
parcelHelpers.export(exports, "yoyoEffectRate", ()=>yoyoEffectRate);
parcelHelpers.export(exports, "findLast", ()=>findLast);
parcelHelpers.export(exports, "distance2", ()=>distance2);
parcelHelpers.export(exports, "distanceBetween", ()=>distanceBetween);
parcelHelpers.export(exports, "defaultSounds", ()=>defaultSounds);
parcelHelpers.export(exports, "shouldPierceByColor", ()=>shouldPierceByColor);
parcelHelpers.export(exports, "isMovingWhilePassiveIncome", ()=>isMovingWhilePassiveIncome);
parcelHelpers.export(exports, "getHighScore", ()=>getHighScore);
parcelHelpers.export(exports, "highScoreText", ()=>highScoreText);
parcelHelpers.export(exports, "getLevelUnlockCondition", ()=>getLevelUnlockCondition);
parcelHelpers.export(exports, "getBestScoreMatching", ()=>getBestScoreMatching);
parcelHelpers.export(exports, "reasonLevelIsLocked", ()=>reasonLevelIsLocked);
parcelHelpers.export(exports, "ballTransparency", ()=>ballTransparency);
parcelHelpers.export(exports, "getCoinRenderColor", ()=>getCoinRenderColor);
parcelHelpers.export(exports, "getCornerOffset", ()=>getCornerOffset);
parcelHelpers.export(exports, "isInWebView", ()=>isInWebView);
var _loadGameData = require("./loadGameData");
var _i18N = require("./i18n/i18n");
var _pureFunctions = require("./pure_functions");
var _upgrades = require("./upgrades");
var _getLevelBackground = require("./getLevelBackground");
var _settings = require("./settings");
var _options = require("./options");
function describeLevel(level) {
let bricks = 0, colors = new Set(), bombs = 0;
level.bricks.forEach((color)=>{
if (!color) return;
if (color === "black") {
bombs++;
return;
} else {
colors.add(color);
bricks++;
}
});
return (0, _i18N.t)("unlocks.level_description", {
size: level.size,
bricks,
colors: colors.size,
bombs
});
}
function getMajorityValue(arr) {
const count = {};
arr.forEach((v)=>count[v] = (count[v] || 0) + 1);
// Object.values inline polyfill
const max = Math.max(...Object.keys(count).map((k)=>count[k]));
return sample(Object.keys(count).filter((k)=>count[k] == max));
}
function sample(arr) {
return arr[Math.floor(arr.length * Math.random())];
}
function sumOfValues(obj) {
if (!obj) return 0;
return Object.values(obj)?.reduce((a, b)=>a + b, 0) || 0;
}
const makeEmptyPerksMap = (upgrades)=>{
const p = {};
upgrades.forEach((u)=>p[u.id] = 0);
return p;
};
function brickCenterX(gameState, index) {
return gameState.offsetX + (index % gameState.gridSize + 0.5) * gameState.brickWidth;
}
function brickCenterY(gameState, index) {
return (Math.floor(index / gameState.gridSize) + 0.5) * gameState.brickWidth;
}
function getRowColIndex(gameState, row, col) {
if (row < 0 || col < 0 || row >= gameState.gridSize || col >= gameState.gridSize) return -1;
return row * gameState.gridSize + col;
}
function getClosestBall(gameState, x, y) {
let closestBall = null;
let dist = 0;
gameState.balls.forEach((ball)=>{
const d2 = (ball.x - x) * (ball.x - x) + (ball.y - y) * (ball.y - y);
if (d2 < dist || !closestBall) {
closestBall = ball;
dist = d2;
}
});
return closestBall;
}
function getPossibleUpgrades(gameState) {
return (0, _loadGameData.upgrades).filter((u)=>(0, _settings.getTotalScore)() >= u.threshold).filter((u)=>!u?.requires || gameState.perks[u?.requires]);
}
function max_levels(gameState) {
if (gameState.creative) return 1;
return 7 + gameState.perks.extra_levels;
}
function pickedUpgradesHTMl(gameState) {
const upgradesList = getPossibleUpgrades(gameState).filter((u)=>gameState.perks[u.id]).map((u)=>{
const newMax = Math.max(0, u.max + gameState.perks.limitless);
let bars = [];
for(let i = 0; i < Math.max(u.max, newMax, gameState.perks[u.id]); i++){
if (i < gameState.perks[u.id]) bars.push('<span class="used"></span>');
else if (i < newMax) bars.push('<span class="free"></span>');
else bars.push('<span class="banned"></span>');
}
const state = gameState.perks[u.id] && 1 || !newMax && 2 || 3;
return {
state,
html: `
<div class="upgrade ${[
"??",
"used",
"banned",
"free"
][state]}">
${u.icon}
<p>
<strong>${u.name}</strong>
${u.help(Math.max(1, gameState.perks[u.id]))}
</p>
${bars.reverse().join("")}
</div>
`
};
}).sort((a, b)=>a.state - b.state).map((a)=>a.html);
return ` <p>${(0, _i18N.t)("score_panel.upgrades_picked")}</p>` + upgradesList.join("");
}
function levelsListHTMl(gameState, level) {
if (!gameState.perks.clairvoyant) return "";
if (gameState.creative) return "";
let list = "";
for(let i = 0; i < max_levels(gameState); i++)list += `<span style="opacity: ${i >= level ? 1 : 0.2}" title="${gameState.runLevels[i].name}">${(0, _loadGameData.icons)[gameState.runLevels[i].name]}</span>`;
return `<p>${(0, _i18N.t)("score_panel.upcoming_levels")}</p><p>${list}</p>`;
}
function currentLevelInfo(gameState) {
return gameState.level;
}
function isPickyEatingPossible(gameState) {
return gameState.bricks.indexOf(gameState.ballsColor) !== -1;
}
function reachRedRowIndex(gameState) {
if (!gameState.perks.reach) return -1;
const { size } = gameState.level;
let minY = -1, maxY = -1, maxYCount = -1;
for(let y = 0; y < size; y++)for(let x = 0; x < size; x++)if (gameState.bricks[x + y * size]) {
if (minY == -1) minY = y;
if (maxY < y) {
maxY = y;
maxYCount = 0;
}
if (maxY == y) maxYCount++;
}
if (maxY < 1) return -1;
if (maxY == minY) return -1;
if (maxYCount === size) return -1;
return maxY;
}
function telekinesisEffectRate(gameState, ball) {
return gameState.perks.telekinesis && ball.vy < 0 && (0, _pureFunctions.clamp)(ball.y / gameState.gameZoneHeight * 1.1 + 0.1, 0, 1) || 0;
}
function yoyoEffectRate(gameState, ball) {
return gameState.perks.yoyo && ball.vy > 0 && (0, _pureFunctions.clamp)(1 - ball.y / gameState.gameZoneHeight * 1.1 + 0.1, 0, 1) || 0;
}
function findLast(arr, predicate) {
let i = arr.length;
while(--i)if (predicate(arr[i], i, arr)) return arr[i];
}
function distance2(a, b) {
return Math.pow(a.x - b.x, 2) + Math.pow(a.y - b.y, 2);
}
function distanceBetween(a, b) {
return Math.sqrt(distance2(a, b));
}
function defaultSounds() {
return {
aboutToPlaySound: {
wallBeep: {
vol: 0,
x: 0
},
comboIncreaseMaybe: {
vol: 0,
x: 0
},
comboDecrease: {
vol: 0,
x: 0
},
coinBounce: {
vol: 0,
x: 0
},
explode: {
vol: 0,
x: 0
},
lifeLost: {
vol: 0,
x: 0
},
coinCatch: {
vol: 0,
x: 0
},
plouf: {
vol: 0,
x: 0
},
colorChange: {
vol: 0,
x: 0
}
}
};
}
function shouldPierceByColor(gameState, vhit, hhit, chit) {
if (!gameState.perks.pierce_color) return false;
if (typeof vhit !== "undefined" && gameState.bricks[vhit] !== gameState.ballsColor) return false;
if (typeof hhit !== "undefined" && gameState.bricks[hhit] !== gameState.ballsColor) return false;
if (typeof chit !== "undefined" && gameState.bricks[chit] !== gameState.ballsColor) return false;
return true;
}
function isMovingWhilePassiveIncome(gameState) {
return !!(gameState.lastPuckMove && gameState.perks.passive_income && gameState.lastPuckMove > gameState.levelTime - 250 * gameState.perks.passive_income);
}
function getHighScore() {
try {
return parseInt(localStorage.getItem("breakout-3-hs-short") || "0");
} catch (e) {}
return 0;
}
function highScoreText() {
if (getHighScore()) return (0, _i18N.t)("main_menu.high_score", {
score: getHighScore()
});
return "";
}
let excluded;
function isExcluded(id) {
if (!excluded) {
excluded = new Set([
"extra_levels",
"extra_life",
"one_more_choice",
"instant_upgrade",
"shunt",
"slow_down"
]);
// Avoid excluding a perk that's needed for the required one
(0, _upgrades.rawUpgrades).forEach((u)=>{
if (u.requires) excluded.add(u.requires);
});
}
return excluded.has(id);
}
function getLevelUnlockCondition(levelIndex) {
let required = [], forbidden = [], minScore = Math.max(-1000 + 100 * levelIndex, 0);
if (levelIndex > 20) {
const possibletargets = (0, _upgrades.rawUpgrades).slice(0, Math.floor(levelIndex / 2)).map((u)=>u).filter((u)=>!isExcluded(u.id)).sort((a, b)=>(0, _getLevelBackground.hashCode)(levelIndex + a.id) - (0, _getLevelBackground.hashCode)(levelIndex + b.id));
const length = Math.min(3, Math.ceil(levelIndex / 30));
required = possibletargets.slice(0, length);
forbidden = possibletargets.slice(length, length + length);
}
return {
required,
forbidden,
minScore
};
}
function getBestScoreMatching(history, required = [], forbidden = []) {
return Math.max(0, ...history.filter((r)=>!required.find((u)=>!r?.perks?.[u.id]) && !forbidden.find((u)=>r?.perks?.[u.id])).map((r)=>r.score));
}
function reasonLevelIsLocked(levelIndex, history, mentionBestScore) {
const { required, forbidden, minScore } = getLevelUnlockCondition(levelIndex);
const reached = getBestScoreMatching(history, required, forbidden);
let reachedText = reached && mentionBestScore ? (0, _i18N.t)("unlocks.reached", {
reached
}) : "";
if (reached >= minScore) return null;
else if (!required.length && !forbidden.length) return {
reached,
minScore,
text: (0, _i18N.t)("unlocks.minScore", {
minScore
}) + reachedText
};
else return {
reached,
minScore,
text: (0, _i18N.t)("unlocks.minScoreWithPerks", {
minScore,
required: required.map((u)=>u.name).join(", "),
forbidden: forbidden.map((u)=>u.name).join(", ")
}) + reachedText
};
}
function ballTransparency(ball, gameState) {
if (!gameState.perks.transparency) return 0;
return (0, _pureFunctions.clamp)(gameState.perks.transparency * (1 - ball.y / gameState.gameZoneHeight * 1.2), 0, 1);
}
function getCoinRenderColor(gameState, coin) {
if (gameState.perks.metamorphosis || (0, _options.isOptionOn)("colorful_coins") || gameState.perks.hypnosis || gameState.perks.rainbow) return coin.color;
return "#ffd300";
}
function getCornerOffset(gameState) {
return (gameState.levelTime ? gameState.perks.corner_shot * gameState.brickWidth : 0) - gameState.perks.unbounded * gameState.brickWidth;
}
const isInWebView = !!window.location.href.includes("isInWebView=true");
},{"./loadGameData":"l1B4x","./i18n/i18n":"eNPRm","./pure_functions":"6pQh7","./upgrades":"1u3Dx","./getLevelBackground":"7OIPf","./settings":"5blfu","./options":"d5NoS","@parcel/transformer-js/src/esmodule-helpers.js":"gkKU3"}],"2n0gK":[function(require,module,exports,__globalThis) {
var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js");
parcelHelpers.defineInteropFlag(exports);
if ("serviceWorker" in navigator && window.location.href.endsWith("/index.html?isPWA=true")) {
// @ts-ignore
const url = new URL(require("b04459cc43e56e8c"));
navigator.serviceWorker.register(url);
}
},{"b04459cc43e56e8c":"e1UyG","@parcel/transformer-js/src/esmodule-helpers.js":"gkKU3"}],"e1UyG":[function(require,module,exports,__globalThis) {
module.exports = require("c74501e5727c0abc").getBundleURL('8P7OJ') + "sw-b71.41cdff1b.js";
},{"c74501e5727c0abc":"lgJ39"}],"lgJ39":[function(require,module,exports,__globalThis) {
"use strict";
var bundleURL = {};
function getBundleURLCached(id) {
var value = bundleURL[id];
if (!value) {
value = getBundleURL();
bundleURL[id] = value;
}
return value;
}
function getBundleURL() {
try {
throw new Error();
} catch (err) {
var matches = ('' + err.stack).match(/(https?|file|ftp|(chrome|moz|safari-web)-extension):\/\/[^)\n]+/g);
if (matches) // The first two stack frames will be this function and getBundleURLCached.
// Use the 3rd one, which will be a runtime in the original bundle.
return getBaseURL(matches[2]);
}
return '/';
}
function getBaseURL(url) {
return ('' + url).replace(/^((?:https?|file|ftp|(chrome|moz|safari-web)-extension):\/\/.+)\/[^/]+$/, '$1') + '/';
}
// TODO: Replace uses with `new URL(url).origin` when ie11 is no longer supported.
function getOrigin(url) {
var matches = ('' + url).match(/(https?|file|ftp|(chrome|moz|safari-web)-extension):\/\/[^/]+/);
if (!matches) throw new Error('Origin not found');
return matches[0];
}
exports.getBundleURL = getBundleURLCached;
exports.getBaseURL = getBaseURL;
exports.getOrigin = getOrigin;
},{}],"9ZeQl":[function(require,module,exports,__globalThis) {
var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js");
parcelHelpers.defineInteropFlag(exports);
parcelHelpers.export(exports, "setMousePos", ()=>setMousePos);
parcelHelpers.export(exports, "resetBalls", ()=>resetBalls);
parcelHelpers.export(exports, "putBallsAtPuck", ()=>putBallsAtPuck);
parcelHelpers.export(exports, "normalizeGameState", ()=>normalizeGameState);
parcelHelpers.export(exports, "baseCombo", ()=>baseCombo);
parcelHelpers.export(exports, "resetCombo", ()=>resetCombo);
parcelHelpers.export(exports, "increaseCombo", ()=>increaseCombo);
parcelHelpers.export(exports, "decreaseCombo", ()=>decreaseCombo);
parcelHelpers.export(exports, "spawnExplosion", ()=>spawnExplosion);
parcelHelpers.export(exports, "spawnImplosion", ()=>spawnImplosion);
parcelHelpers.export(exports, "explosionAt", ()=>explosionAt);
parcelHelpers.export(exports, "explodeBrick", ()=>explodeBrick);
parcelHelpers.export(exports, "dontOfferTooSoon", ()=>dontOfferTooSoon);
parcelHelpers.export(exports, "pickRandomUpgrades", ()=>pickRandomUpgrades);
parcelHelpers.export(exports, "schedulGameSound", ()=>schedulGameSound);
parcelHelpers.export(exports, "addToScore", ()=>addToScore);
parcelHelpers.export(exports, "setLevel", ()=>setLevel);
parcelHelpers.export(exports, "rainbowColor", ()=>rainbowColor);
parcelHelpers.export(exports, "repulse", ()=>repulse);
parcelHelpers.export(exports, "attract", ()=>attract);
parcelHelpers.export(exports, "coinBrickHitCheck", ()=>coinBrickHitCheck);
parcelHelpers.export(exports, "bordersHitCheck", ()=>bordersHitCheck);
parcelHelpers.export(exports, "gameStateTick", ()=>gameStateTick);
parcelHelpers.export(exports, "ballTick", ()=>ballTick);
parcelHelpers.export(exports, "append", ()=>append);
parcelHelpers.export(exports, "destroy", ()=>destroy);
parcelHelpers.export(exports, "liveCount", ()=>liveCount);
parcelHelpers.export(exports, "empty", ()=>empty);
parcelHelpers.export(exports, "forEachLiveOne", ()=>forEachLiveOne);
var _gameUtils = require("./game_utils");
var _i18N = require("./i18n/i18n");
var _loadGameData = require("./loadGameData");
var _settings = require("./settings");
var _render = require("./render");
var _gameOver = require("./gameOver");
var _game = require("./game");
var _recording = require("./recording");
var _options = require("./options");
var _pureFunctions = require("./pure_functions");
var _addToTotalScore = require("./addToTotalScore");
var _getLevelBackground = require("./getLevelBackground");
function setMousePos(gameState, x) {
if (gameState.startParams.computer_controlled) return;
gameState.puckPosition = x;
// Sets the puck position, and updates the ball position if they are supposed to follow it
gameState.needsRender = true;
}
function getBallDefaultVx(gameState) {
return (gameState.perks.concave_puck ? 0 : 1) * (Math.random() > 0.5 ? gameState.baseSpeed : -gameState.baseSpeed);
}
function computerControl(gameState) {
let targetX = gameState.puckPosition;
const ball = (0, _gameUtils.getClosestBall)(gameState, gameState.puckPosition, gameState.gameZoneHeight);
if (!ball) return;
const puckOffset = ((0, _getLevelBackground.hashCode)(gameState.runStatistics.puck_bounces + "goeirjgoriejg") % 100 - 50) / 100 * gameState.puckWidth;
if (ball.y > gameState.gameZoneHeight / 2 && ball.vy > 0) targetX = ball.x + puckOffset;
else {
let coinsTotalX = 0, coinsCount = 0;
forEachLiveOne(gameState.coins, (c)=>{
if (c.vy > 0 && c.y > gameState.gameZoneHeight / 2) {
coinsTotalX += c.x;
coinsCount++;
}
});
if (coinsCount) targetX = coinsTotalX / coinsCount;
else targetX = gameState.canvasWidth / 2;
}
gameState.puckPosition += (0, _pureFunctions.clamp)((targetX - gameState.puckPosition) / 10, -10, 10);
if (gameState.levelTime > 30000) (0, _game.startComputerControlledGame)(gameState.startParams.stress);
}
function resetBalls(gameState) {
// Always compute speed first
normalizeGameState(gameState);
const count = 1 + (gameState.perks?.multiball || 0);
const perBall = gameState.puckWidth / (count + 1);
gameState.balls = [];
gameState.ballsColor = "#FFFFFF";
if (gameState.perks.picky_eater || gameState.perks.pierce_color) gameState.ballsColor = (0, _gameUtils.getMajorityValue)(gameState.bricks.filter((i)=>i)) || "#FFFFFF";
for(let i = 0; i < count; i++){
const x = gameState.puckPosition - gameState.puckWidth / 2 + perBall * (i + 1);
const vx = getBallDefaultVx(gameState);
gameState.balls.push({
x,
previousX: x,
y: gameState.gameZoneHeight - 1.5 * gameState.ballSize,
previousY: gameState.gameZoneHeight - 1.5 * gameState.ballSize,
vx,
previousVX: vx,
vy: -gameState.baseSpeed,
previousVY: -gameState.baseSpeed,
piercePoints: gameState.perks.pierce * 3,
hitSinceBounce: 0,
brokenSinceBounce: 0,
sapperUses: 0
});
}
gameState.ballStickToPuck = true;
}
function putBallsAtPuck(gameState) {
// This reset could be abused to cheat quite easily
const count = gameState.balls.length;
const perBall = gameState.puckWidth / (count + 1);
// const vx = getBallDefaultVx(gameState);
gameState.balls.forEach((ball, i)=>{
const x = gameState.puckPosition - gameState.puckWidth / 2 + perBall * (i + 1);
ball.x = x;
ball.previousX = x;
ball.y = gameState.gameZoneHeight - 1.5 * gameState.ballSize;
ball.previousY = ball.y;
ball.hitSinceBounce = 0;
ball.brokenSinceBounce = 0;
ball.piercePoints = gameState.perks.pierce * 3;
});
}
function normalizeGameState(gameState) {
// This function resets most parameters on the state to correct values, and should be used even when the game is paused
gameState.baseSpeed = Math.max(3, gameState.gameZoneWidth / 12 / 10 + gameState.currentLevel / 3 + gameState.levelTime / 30000 - gameState.perks.slow_down * 2);
gameState.puckWidth = Math.max(gameState.ballSize, gameState.gameZoneWidth / 12 * Math.min(12, 3 - gameState.perks.smaller_puck + gameState.perks.bigger_puck));
const corner = (0, _gameUtils.getCornerOffset)(gameState);
let minX = gameState.offsetXRoundedDown + gameState.puckWidth / 2 - corner;
let maxX = gameState.offsetXRoundedDown + gameState.gameZoneWidthRoundedUp - gameState.puckWidth / 2 + corner;
gameState.puckPosition = (0, _pureFunctions.clamp)(gameState.puckPosition, minX, maxX);
if (gameState.ballStickToPuck) putBallsAtPuck(gameState);
if (Math.abs(gameState.lastPuckPosition - gameState.puckPosition) > 1 && gameState.running) gameState.lastPuckMove = gameState.levelTime;
gameState.lastPuckPosition = gameState.puckPosition;
}
function baseCombo(gameState) {
const mineFieldBonus = gameState.perks.minefield && gameState.bricks.filter((b)=>b === "black").length * gameState.perks.minefield;
return 1 + gameState.perks.base_combo * 3 + gameState.perks.smaller_puck * 5 + mineFieldBonus;
}
function resetCombo(gameState, x, y) {
const prev = gameState.combo;
gameState.combo = baseCombo(gameState);
if (prev > gameState.combo && gameState.perks.soft_reset) gameState.combo += Math.floor((prev - gameState.combo) * (0, _pureFunctions.comboKeepingRate)(gameState.perks.soft_reset));
const lost = Math.max(0, prev - gameState.combo);
if (lost) {
for(let i = 0; i < lost && i < 8; i++)setTimeout(()=>schedulGameSound(gameState, "comboDecrease", x, 1), i * 100);
if (typeof x !== "undefined" && typeof y !== "undefined") makeText(gameState, x, y, "#FF0000", "-" + lost, 20, 500 + (0, _pureFunctions.clamp)(lost, 0, 500));
}
return lost;
}
function increaseCombo(gameState, by, x, y) {
if (by <= 0) return;
gameState.combo += by;
if ((0, _options.isOptionOn)("comboIncreaseTexts") && typeof x !== "undefined" && typeof y !== "undefined") makeText(gameState, x, y, "#ffd300", "+" + by, 25, 400 + by);
}
function decreaseCombo(gameState, by, x, y) {
const prev = gameState.combo;
gameState.combo = Math.max(baseCombo(gameState), gameState.combo - by);
const lost = Math.max(0, prev - gameState.combo);
if (lost) {
schedulGameSound(gameState, "comboDecrease", x, 1);
if (typeof x !== "undefined" && typeof y !== "undefined") makeText(gameState, x, y, "#FF0000", "-" + lost, 20, 400 + lost);
}
}
function spawnExplosion(gameState, count, x, y, color) {
if (!!(0, _options.isOptionOn)("basic")) return;
if (liveCount(gameState.particles) > (0, _settings.getCurrentMaxParticles)()) // Avoid freezing when lots of explosion happen at once
count = 1;
for(let i = 0; i < count; i++)makeParticle(gameState, x + (Math.random() - 0.5) * gameState.brickWidth / 2, y + (Math.random() - 0.5) * gameState.brickWidth / 2, (Math.random() - 0.5) * 30, (Math.random() - 0.5) * 30, color, false);
}
function spawnImplosion(gameState, count, x, y, color) {
if (!!(0, _options.isOptionOn)("basic")) return;
if (liveCount(gameState.particles) > (0, _settings.getCurrentMaxParticles)()) // Avoid freezing when lots of explosion happen at once
count = 1;
for(let i = 0; i < count; i++){
const dx = (Math.random() - 0.5) * gameState.brickWidth / 2;
const dy = (Math.random() - 0.5) * gameState.brickWidth / 2;
makeParticle(gameState, x - dx * 10, y - dy * 10, dx, dy, color, false);
}
}
function explosionAt(gameState, index, x, y, ball, extraSize = 0) {
const size = 1 + gameState.perks.bigger_explosions + Math.max(0, gameState.perks.implosions - 1) + extraSize;
schedulGameSound(gameState, "explode", ball.x, 1);
if (index !== -1) {
const col = index % gameState.gridSize;
const row = Math.floor(index / gameState.gridSize);
// Break bricks around
for(let dx = -size; dx <= size; dx++)for(let dy = -size; dy <= size; dy++){
const i = (0, _gameUtils.getRowColIndex)(gameState, row + dy, col + dx);
if (gameState.bricks[i] && i !== -1) {
// Study bricks resist explosions too
gameState.brickHP[i]--;
if (gameState.brickHP[i] <= 0) explodeBrick(gameState, i, ball, true);
}
}
}
const factor = gameState.perks.implosions ? -1 : 1;
// Blow nearby coins
forEachLiveOne(gameState.coins, (c)=>{
const dx = c.x - x;
const dy = c.y - y;
const d2 = Math.max(gameState.brickWidth, Math.abs(dx) + Math.abs(dy));
c.vx += dx / d2 * 10 * size / c.weight * factor;
c.vy += dy / d2 * 10 * size / c.weight * factor;
});
gameState.lastExplosion = Date.now();
if (gameState.perks.implosions) spawnImplosion(gameState, 7 * size, x, y, "#FFFFFF");
else spawnExplosion(gameState, 7 * size, x, y, "#FFFFFF");
gameState.runStatistics.bricks_broken++;
if (gameState.perks.zen) resetCombo(gameState, x, y);
}
function explodeBrick(gameState, index, ball, isExplosion) {
const color = gameState.bricks[index];
if (!color) return;
const wasPickyEaterPossible = gameState.perks.picky_eater && (0, _gameUtils.isPickyEatingPossible)(gameState);
const redRowReach = (0, _gameUtils.reachRedRowIndex)(gameState);
gameState.lastBrickBroken = gameState.levelTime;
if (color === "black") {
const x = (0, _gameUtils.brickCenterX)(gameState, index), y = (0, _gameUtils.brickCenterY)(gameState, index);
// if (color === "transparent") {
// schedulGameSound(gameState, "void", x, 1);
// resetCombo(gameState, x, y);
// }
setBrick(gameState, index, "");
explosionAt(gameState, index, x, y, ball, 0);
if (gameState.perks.minefield) decreaseCombo(gameState, gameState.perks.minefield, x, y);
} else if (color) {
// Even if it bounces we don't want to count that as a miss
// Flashing is take care of by the tick loop
const x = (0, _gameUtils.brickCenterX)(gameState, index), y = (0, _gameUtils.brickCenterY)(gameState, index);
setBrick(gameState, index, "");
let coinsToSpawn = gameState.combo;
if (gameState.lastCombo > coinsToSpawn) // In case a reset happens in the same frame as a spawn, i want the combo to stay high (for minefield and zen in particular)
coinsToSpawn = gameState.lastCombo;
if (gameState.perks.sturdy_bricks) // +10% per level
coinsToSpawn += Math.ceil((2 + gameState.perks.sturdy_bricks) / 2 * coinsToSpawn);
if (gameState.perks.transparency) coinsToSpawn = Math.ceil(coinsToSpawn * (1 + (0, _gameUtils.ballTransparency)(ball, gameState) * gameState.perks.transparency / 2));
gameState.levelSpawnedCoins += coinsToSpawn;
gameState.runStatistics.coins_spawned += coinsToSpawn;
gameState.runStatistics.bricks_broken++;
const maxCoins = (0, _settings.getCurrentMaxCoins)();
const spawnableCoins = liveCount(gameState.coins) > (0, _settings.getCurrentMaxCoins)() ? 1 : Math.floor((maxCoins - liveCount(gameState.coins)) / 2);
const pointsPerCoin = Math.max(1, Math.ceil(coinsToSpawn / spawnableCoins));
while(coinsToSpawn > 0){
const points = Math.min(pointsPerCoin, coinsToSpawn);
if (points < 0 || isNaN(points)) {
console.error({
points
});
debugger;
}
coinsToSpawn -= points;
const cx = x + (Math.random() - 0.5) * (gameState.brickWidth - gameState.coinSize), cy = y + (Math.random() - 0.5) * (gameState.brickWidth - gameState.coinSize);
makeCoin(gameState, cx, cy, ball.previousVX * (0.5 + Math.random()), ball.previousVY * (0.5 + Math.random()), color, points);
}
increaseCombo(gameState, gameState.perks.streak_shots + gameState.perks.compound_interest + gameState.perks.left_is_lava + gameState.perks.right_is_lava + gameState.perks.top_is_lava + gameState.perks.picky_eater + gameState.perks.asceticism * 3 + gameState.perks.zen + gameState.perks.passive_income + gameState.perks.addiction, ball.x, ball.y);
if (Math.abs(ball.y - y) < Math.abs(ball.x - x)) {
if (gameState.perks.side_kick) {
if (ball.previousVX > 0) increaseCombo(gameState, gameState.perks.side_kick, ball.x, ball.y);
else decreaseCombo(gameState, gameState.perks.side_kick * 2, ball.x, ball.y);
}
if (gameState.perks.side_flip) {
if (ball.previousVX < 0) increaseCombo(gameState, gameState.perks.side_flip, ball.x, ball.y);
else decreaseCombo(gameState, gameState.perks.side_flip * 2, ball.x, ball.y);
}
}
if (redRowReach !== -1) {
if (Math.floor(index / gameState.level.size) === redRowReach) resetCombo(gameState, x, y);
else {
for(let x = 0; x < gameState.level.size; x++)if (gameState.bricks[redRowReach * gameState.level.size + x]) gameState.combo++;
}
}
if ((0, _gameUtils.isMovingWhilePassiveIncome)(gameState)) resetCombo(gameState, x, y);
if (!isExplosion) {
// color change
if ((gameState.perks.picky_eater || gameState.perks.pierce_color) && color !== gameState.ballsColor && color) {
if (wasPickyEaterPossible) resetCombo(gameState, ball.x, ball.y);
schedulGameSound(gameState, "colorChange", ball.x, 0.8);
gameState.lastExplosion = gameState.levelTime;
gameState.ballsColor = color;
if (!(0, _options.isOptionOn)("basic")) gameState.balls.forEach((ball)=>{
spawnExplosion(gameState, 7, ball.previousX, ball.previousY, color);
});
} else schedulGameSound(gameState, "comboIncreaseMaybe", ball.x, 1);
}
// makeLight(gameState, x, y, color, gameState.brickWidth, 40);
spawnExplosion(gameState, 5 + Math.min(gameState.combo, 30), x, y, color);
}
if (gameState.perks.respawn && color !== "black" && !gameState.bricks[index]) {
if (Math.random() < (0, _pureFunctions.comboKeepingRate)(gameState.perks.respawn)) append(gameState.respawns, (b)=>{
b.color = color;
b.index = index;
b.time = gameState.levelTime + 3000 / gameState.perks.respawn;
});
}
}
function dontOfferTooSoon(gameState, id) {
gameState.lastOffered[id] = Math.round(Date.now() / 1000);
}
function pickRandomUpgrades(gameState, count) {
let list = (0, _gameUtils.getPossibleUpgrades)(gameState).map((u)=>({
...u,
score: Math.random() + (gameState.lastOffered[u.id] || 0)
})).sort((a, b)=>a.score - b.score).filter((u)=>gameState.perks[u.id] < u.max + gameState.perks.limitless).slice(0, count).sort((a, b)=>a.id > b.id ? 1 : -1);
list.forEach((u)=>{
dontOfferTooSoon(gameState, u.id);
});
return list.map((u)=>({
text: u.name + (gameState.perks[u.id] ? (0, _i18N.t)("level_up.upgrade_perk_to_level", {
level: gameState.perks[u.id] + 1
}) : ""),
icon: (0, _loadGameData.icons)["icon:" + u.id],
value: u.id,
help: u.help(gameState.perks[u.id] + 1)
}));
}
function schedulGameSound(gameState, sound, x, vol) {
if (!vol) return;
if (!(0, _options.isOptionOn)("sound")) return;
x ??= gameState.offsetX + gameState.gameZoneWidth / 2;
const ex = gameState.aboutToPlaySound[sound];
ex.x = (x * vol + ex.x * ex.vol) / (vol + ex.vol);
ex.vol += vol;
}
function addToScore(gameState, coin) {
gameState.score += coin.points;
gameState.lastScoreIncrease = gameState.levelTime;
(0, _addToTotalScore.addToTotalScore)(gameState, coin.points);
if (gameState.score > gameState.highScore && !gameState.creative) {
gameState.highScore = gameState.score;
localStorage.setItem("breakout-3-hs-short", gameState.score.toString());
}
if (!(0, _options.isOptionOn)("basic")) makeParticle(gameState, coin.previousX, coin.previousY, (gameState.canvasWidth - coin.x) / 100, -coin.y / 100, (0, _gameUtils.getCoinRenderColor)(gameState, coin), true, gameState.coinSize / 2, 100 + Math.random() * 50);
schedulGameSound(gameState, "coinCatch", coin.x, 1);
gameState.runStatistics.score += coin.points;
if (gameState.perks.asceticism) decreaseCombo(gameState, gameState.perks.asceticism * 3 * coin.points, coin.x, coin.y);
}
async function setLevel(gameState, l) {
// Here to alleviate double upgrades issues
if (gameState.upgradesOfferedFor >= l) {
debugger;
return console.warn("Extra upgrade request ignored ");
}
gameState.upgradesOfferedFor = l;
(0, _game.pause)(false);
(0, _recording.stopRecording)();
if (l > 0) await (0, _game.openUpgradesPicker)(gameState);
gameState.currentLevel = l;
gameState.level = gameState.runLevels[l % gameState.runLevels.length];
gameState.levelTime = 0;
gameState.winAt = 0;
gameState.levelWallBounces = 0;
gameState.lastPuckMove = 0;
gameState.autoCleanUses = 0;
gameState.lastTickDown = gameState.levelTime;
gameState.levelStartScore = gameState.score;
gameState.levelSpawnedCoins = 0;
gameState.levelLostCoins = 0;
gameState.levelMisses = 0;
gameState.lastBrickBroken = 0;
gameState.runStatistics.levelsPlayed++;
// Reset combo silently
const finalCombo = gameState.combo;
gameState.combo = baseCombo(gameState);
if (gameState.perks.shunt) gameState.combo += Math.round(Math.max(0, (finalCombo - gameState.combo) * (0, _pureFunctions.comboKeepingRate)(gameState.perks.shunt)));
gameState.combo += gameState.perks.hot_start * 30;
const lvl = (0, _gameUtils.currentLevelInfo)(gameState);
if (lvl.size !== gameState.gridSize) {
gameState.gridSize = lvl.size;
(0, _game.fitSize)(gameState);
}
gameState.levelLostCoins += empty(gameState.coins);
empty(gameState.particles);
empty(gameState.lights);
empty(gameState.texts);
empty(gameState.respawns);
gameState.bricks = [];
for(let i = 0; i < lvl.size * lvl.size; i++)setBrick(gameState, i, lvl.bricks[i]);
// Balls color will depend on most common brick color sometimes
resetBalls(gameState);
gameState.needsRender = true;
// This caused problems with accented characters like the ô of côte d'ivoire for odd reasons
// background.src = 'data:image/svg+xml;base64,' + btoa(lvl.svg)
(0, _render.background).src = "data:image/svg+xml;UTF8," + lvl.svg;
document.body.style.setProperty("--level-background", lvl.color || "#000000");
document.getElementById("themeColor")?.setAttribute("content", lvl.color || "#000000");
}
function setBrick(gameState, index, color) {
gameState.bricks[index] = color || "";
gameState.brickHP[index] = color === "black" && 1 || color && 1 + gameState.perks.sturdy_bricks || 0;
if (gameState.perks.minefield && color === "black") increaseCombo(gameState, gameState.perks.minefield, (0, _gameUtils.brickCenterX)(gameState, index), (0, _gameUtils.brickCenterY)(gameState, index));
}
const rainbow = [
"#ff2e2e",
"#ffe02e",
"#70ff33",
"#33ffa7",
"#38acff",
"#7038ff",
"#ff3de5"
];
function rainbowColor() {
return rainbow[Math.floor((0, _game.gameState).levelTime / 50) % rainbow.length];
}
function repulse(gameState, a, b, power, impactsBToo) {
const distance = (0, _gameUtils.distanceBetween)(a, b);
// Ensure we don't get soft locked
const max = gameState.gameZoneWidth / 4;
if (distance > max) return;
// Unit vector
const dx = (a.x - b.x) / distance;
const dy = (a.y - b.y) / distance;
const fact = -power * (max - distance) / (max * 1.2) / 3 * Math.min(500, gameState.levelTime) / 500;
if (impactsBToo && typeof b.vx !== "undefined" && typeof b.vy !== "undefined") {
b.vx += dx * fact;
b.vy += dy * fact;
}
a.vx -= dx * fact;
a.vy -= dy * fact;
const speed = 10;
const rand = 2;
makeParticle(gameState, a.x, a.y, -dx * speed + a.vx + (Math.random() - 0.5) * rand, -dy * speed + a.vy + (Math.random() - 0.5) * rand, rainbowColor(), true, gameState.coinSize / 2, 100);
if (impactsBToo && typeof b.vx !== "undefined" && typeof b.vy !== "undefined") makeParticle(gameState, b.x, b.y, dx * speed + b.vx + (Math.random() - 0.5) * rand, dy * speed + b.vy + (Math.random() - 0.5) * rand, rainbowColor(), true, gameState.coinSize / 2, 100);
}
function attract(gameState, a, b, power) {
const distance = (0, _gameUtils.distanceBetween)(a, b);
// Ensure we don't get soft locked
const min = gameState.gameZoneWidth * 3 / 4;
if (distance < min) return;
// Unit vector
const dx = (a.x - b.x) / distance;
const dy = (a.y - b.y) / distance;
const fact = power * (distance - min) / min * Math.min(500, gameState.levelTime) / 500;
b.vx += dx * fact;
b.vy += dy * fact;
a.vx -= dx * fact;
a.vy -= dy * fact;
const speed = 10;
const rand = 2;
makeParticle(gameState, a.x, a.y, dx * speed + a.vx + (Math.random() - 0.5) * rand, dy * speed + a.vy + (Math.random() - 0.5) * rand, rainbowColor(), true, gameState.coinSize / 2, 100);
makeParticle(gameState, b.x, b.y, -dx * speed + b.vx + (Math.random() - 0.5) * rand, -dy * speed + b.vy + (Math.random() - 0.5) * rand, rainbowColor(), true, gameState.coinSize / 2, 100);
}
function coinBrickHitCheck(gameState, coin) {
// Make ball/coin bonce, and return bricks that were hit
const radius = coin.size / 2;
const { x, y, previousX, previousY } = coin;
const vhit = (0, _game.hitsSomething)(previousX, y, radius);
const hhit = (0, _game.hitsSomething)(x, previousY, radius);
const chit = typeof vhit == "undefined" && typeof hhit == "undefined" && (0, _game.hitsSomething)(x, y, radius) || undefined;
if (gameState.perks.ghost_coins) // slow down
{
if (typeof (vhit ?? hhit ?? chit) !== "undefined") {
coin.vy *= 1 - 0.2 / gameState.perks.ghost_coins;
coin.vx *= 1 - 0.2 / gameState.perks.ghost_coins;
}
} else {
if (typeof vhit !== "undefined" || typeof chit !== "undefined") {
coin.y = coin.previousY;
coin.vy *= -1;
// Roll on corners
const leftHit = gameState.bricks[(0, _game.brickIndex)(x - radius, y + radius)];
const rightHit = gameState.bricks[(0, _game.brickIndex)(x + radius, y + radius)];
if (leftHit && !rightHit) {
coin.vx += 1;
coin.sa -= 1;
}
if (!leftHit && rightHit) {
coin.vx -= 1;
coin.sa += 1;
}
}
if (typeof hhit !== "undefined" || typeof chit !== "undefined") {
coin.x = coin.previousX;
coin.vx *= -1;
}
}
return vhit ?? hhit ?? chit;
}
function bordersHitCheck(gameState, coin, radius, delta) {
if (coin.destroyed) return;
coin.previousX = coin.x;
coin.previousY = coin.y;
coin.x += coin.vx * delta;
coin.y += coin.vy * delta;
if (gameState.perks.wind) coin.vx += (gameState.puckPosition - (gameState.offsetX + gameState.gameZoneWidth / 2)) / gameState.gameZoneWidth * gameState.perks.wind * 0.5;
let vhit = 0, hhit = 0;
if (coin.x < gameState.offsetXRoundedDown + radius) {
coin.x = gameState.offsetXRoundedDown + radius + (gameState.offsetXRoundedDown + radius - coin.x);
coin.vx *= -1;
hhit = 1;
}
if (coin.y < radius) {
coin.y = radius + (radius - coin.y);
coin.vy *= -1;
vhit = 1;
}
if (coin.x > gameState.canvasWidth - gameState.offsetXRoundedDown - radius) {
coin.x = gameState.canvasWidth - gameState.offsetXRoundedDown - radius - (coin.x - (gameState.canvasWidth - gameState.offsetXRoundedDown - radius));
coin.vx *= -1;
hhit = 1;
}
return hhit + vhit * 2;
}
function gameStateTick(gameState, // How many frames to compute at once, can go above 1 to compensate lag
frames = 1) {
// Ai movement of puck
if (gameState.startParams.computer_controlled) computerControl(gameState);
gameState.runStatistics.max_combo = Math.max(gameState.runStatistics.max_combo, gameState.combo);
gameState.lastCombo = gameState.combo;
if (gameState.perks.addiction && gameState.lastBrickBroken && gameState.lastBrickBroken < gameState.levelTime - 5000 / gameState.perks.addiction) resetCombo(gameState, gameState.puckPosition, gameState.gameZoneHeight - gameState.puckHeight * 2);
gameState.balls = gameState.balls.filter((ball)=>!ball.destroyed);
const remainingBricks = gameState.bricks.filter((b)=>b && b !== "black").length;
if (!remainingBricks && gameState.lastBrickBroken) // Avoid a combo reset just because we're waiting for coins
gameState.lastBrickBroken = 0;
if (gameState.levelTime > gameState.lastTickDown + 1000 && gameState.perks.hot_start) {
gameState.lastTickDown = gameState.levelTime;
decreaseCombo(gameState, gameState.perks.hot_start, gameState.puckPosition, gameState.gameZoneHeight - 2 * gameState.puckHeight);
}
if (remainingBricks <= gameState.perks.skip_last && !gameState.autoCleanUses) {
gameState.bricks.forEach((type, index)=>{
if (type) explodeBrick(gameState, index, gameState.balls[0], true);
});
gameState.autoCleanUses++;
}
const hasPendingBricks = liveCount(gameState.respawns);
if (gameState.running && !remainingBricks && !hasPendingBricks) {
if (!gameState.winAt) gameState.winAt = gameState.levelTime + 5000;
} else gameState.winAt = 0;
if (gameState.running && // Delayed win when coins are still flying
gameState.winAt && gameState.levelTime > gameState.winAt || // instant win condition
gameState.levelTime && !remainingBricks && !liveCount(gameState.coins)) {
if (gameState.startParams.computer_controlled) (0, _game.startComputerControlledGame)(gameState.startParams.stress);
else if (gameState.currentLevel + 1 < (0, _gameUtils.max_levels)(gameState)) setLevel(gameState, gameState.currentLevel + 1);
else (0, _gameOver.gameOver)((0, _i18N.t)("gameOver.win.title"), (0, _i18N.t)("gameOver.win.summary", {
score: gameState.score
}));
} else if (gameState.running || gameState.levelTime) {
const coinRadius = Math.round(gameState.coinSize / 2);
forEachLiveOne(gameState.coins, (coin, coinIndex)=>{
if (gameState.perks.coin_magnet) {
const strength = 100 / (100 + Math.pow(coin.y - gameState.gameZoneHeight, 2) + Math.pow(coin.x - gameState.puckPosition, 2)) * gameState.perks.coin_magnet;
const attractionX = frames * (gameState.puckPosition - coin.x) * strength;
coin.vx += attractionX;
coin.vy += frames * (gameState.gameZoneHeight - coin.y) * strength / 2;
coin.sa -= attractionX / 10;
}
if (gameState.perks.ball_attracts_coins && gameState.balls.length) {
// Find closest ball
let closestBall = (0, _gameUtils.getClosestBall)(gameState, coin.x, coin.y);
if (closestBall) {
let dist = (0, _gameUtils.distance2)(closestBall, coin);
const minDist = gameState.brickWidth * gameState.brickWidth;
if (dist > minDist && dist < minDist * 16 * gameState.perks.ball_attracts_coins) {
// Slow down coins in effect radius
const ratio = 1 - 0.02 * (0.5 + gameState.perks.ball_attracts_coins);
coin.vx *= ratio;
coin.vy *= ratio;
coin.vy *= ratio;
// Carry them
const dx = (closestBall.x - coin.x) / dist * 50 * gameState.perks.ball_attracts_coins;
const dy = (closestBall.y - coin.y) / dist * 50 * gameState.perks.ball_attracts_coins;
coin.vx += dx;
coin.vy += dy;
if (!(0, _options.isOptionOn)("basic") && Math.random() * gameState.perks.ball_attracts_coins * frames > 0.9) makeParticle(gameState, coin.x + dx * 5, coin.y + dy * 5, dx * 2, dy * 2, rainbowColor(), true, gameState.coinSize / 2, 100);
}
}
}
if (gameState.perks.bricks_attract_coins) goToNearestBrick(gameState, coin, gameState.perks.bricks_attract_coins * frames, 2, false);
const ratio = 1 - (gameState.perks.viscosity * 0.03 + 0.002 + (coin.y > gameState.gameZoneHeight ? 0.2 : 0)) * frames / (1 + gameState.perks.etherealcoins);
if (!gameState.perks.etherealcoins) {
coin.vy *= ratio;
coin.vx *= ratio;
}
if (coin.vx > 7 * gameState.baseSpeed) coin.vx = 7 * gameState.baseSpeed;
if (coin.vx < -7 * gameState.baseSpeed) coin.vx = -7 * gameState.baseSpeed;
if (coin.vy > 7 * gameState.baseSpeed) coin.vy = 7 * gameState.baseSpeed;
if (coin.vy < -7 * gameState.baseSpeed) coin.vy = -7 * gameState.baseSpeed;
coin.a += coin.sa;
// Gravity
const flip = gameState.perks.helium > 0 && Math.abs(coin.x - gameState.puckPosition) * 2 > gameState.puckWidth + coin.size;
let dvy = frames * coin.weight * 0.8 * (flip ? -gameState.perks.helium : 1);
if (gameState.perks.etherealcoins) {
if (gameState.perks.helium) dvy *= 0.2 / gameState.perks.etherealcoins;
else dvy *= 0;
}
coin.vy += dvy;
if (gameState.perks.helium && !(0, _options.isOptionOn)("basic") && Math.random() < 0.1 * frames) makeParticle(gameState, coin.x, coin.y, 0, dvy * 10, gameState.perks.metamorphosis || (0, _options.isOptionOn)("colorful_coins") ? coin.color : "#ffd300", true, 5, 250);
const speed = (Math.abs(coin.vx) + Math.abs(coin.vy)) * 10;
const hitBorder = bordersHitCheck(gameState, coin, coin.size / 2, frames);
if (coin.previousY < gameState.gameZoneHeight && coin.y > gameState.gameZoneHeight && coin.vy > 0 && speed > 20) {
schedulGameSound(gameState, "plouf", coin.x, (0, _pureFunctions.clamp)(speed, 20, 100) / 100 * 0.2);
if (!(0, _options.isOptionOn)("basic")) makeParticle(gameState, coin.x, gameState.gameZoneHeight, -coin.vx / 5, -coin.vy / 5, (0, _gameUtils.getCoinRenderColor)(gameState, coin), false);
}
if (coin.y > gameState.gameZoneHeight - coinRadius - gameState.puckHeight && coin.y < gameState.gameZoneHeight + gameState.puckHeight + coin.vy && Math.abs(coin.x - gameState.puckPosition) < coinRadius + gameState.puckWidth / 2 + // a bit of margin to be nice , negative in case it's a negative coin
gameState.puckHeight * (coin.points ? 1 : -1)) {
addToScore(gameState, coin);
destroy(gameState.coins, coinIndex);
} else if (coin.y > gameState.canvasHeight + coinRadius * 10) {
gameState.levelLostCoins += coin.points;
destroy(gameState.coins, coinIndex);
if (gameState.perks.compound_interest) resetCombo(gameState, coin.x, gameState.gameZoneHeight - 20);
if (gameState.combo < gameState.perks.fountain_toss * 30 && Math.random() < 1 / gameState.combo * gameState.perks.fountain_toss) increaseCombo(gameState, 1, coin.x, gameState.gameZoneHeight - 20);
}
const hitBrick = coinBrickHitCheck(gameState, coin);
if (gameState.perks.metamorphosis && typeof hitBrick !== "undefined") {
if (gameState.bricks[hitBrick] && coin.color !== gameState.bricks[hitBrick] && gameState.bricks[hitBrick] !== "black" && coin.metamorphosisPoints) {
// Not using setbrick because we don't want to reset HP
gameState.bricks[hitBrick] = coin.color;
coin.metamorphosisPoints--;
schedulGameSound(gameState, "colorChange", coin.x, 0.3);
if (gameState.perks.hypnosis) {
const closestBall = (0, _gameUtils.getClosestBall)(gameState, coin.x, coin.y);
if (closestBall) {
coin.x = closestBall.x;
coin.y = closestBall.y;
coin.vx = (Math.random() - 0.5) * gameState.baseSpeed;
coin.vy = (Math.random() - 0.5) * gameState.baseSpeed;
coin.metamorphosisPoints = gameState.perks.metamorphosis;
}
}
}
}
if (!gameState.perks.ghost_coins && typeof hitBrick !== "undefined" || hitBorder) {
const ratio = 1 - 0.2 / (1 + gameState.perks.etherealcoins);
coin.vx *= ratio;
coin.vy *= ratio;
if (Math.abs(coin.vy) < 1) coin.vy = 0;
coin.sa *= 0.9;
if (speed > 20 && !coin.collidedLastFrame) schedulGameSound(gameState, "coinBounce", coin.x, 0.2);
coin.collidedLastFrame = true;
} else coin.collidedLastFrame = false;
});
gameState.balls.forEach((ball)=>ballTick(gameState, ball, frames));
if (gameState.perks.shocks) gameState.balls.forEach((a, ai)=>gameState.balls.forEach((b, bi)=>{
if (ai < bi && !a.destroyed && !b.destroyed && (0, _gameUtils.distance2)(a, b) < gameState.ballSize * gameState.ballSize) {
let tempVx = a.vx;
let tempVy = a.vy;
a.vx = b.vx;
a.vy = b.vy;
b.vx = tempVx;
b.vy = tempVy;
let x = (a.x + b.x) / 2;
let y = (a.y + b.y) / 2;
const limit = gameState.baseSpeed;
a.vx += (0, _pureFunctions.clamp)(a.x - x, -limit, limit) + (Math.random() - 0.5) * limit / 3;
a.vy += (0, _pureFunctions.clamp)(a.y - y, -limit, limit) + (Math.random() - 0.5) * limit / 3;
b.vx += (0, _pureFunctions.clamp)(b.x - x, -limit, limit) + (Math.random() - 0.5) * limit / 3;
b.vy += (0, _pureFunctions.clamp)(b.y - y, -limit, limit) + (Math.random() - 0.5) * limit / 3;
let index = (0, _game.brickIndex)(x, y);
explosionAt(gameState, index, x, y, a, Math.max(0, gameState.perks.shocks - 1));
}
}));
if (gameState.perks.wind) {
const windD = (gameState.puckPosition - (gameState.offsetX + gameState.gameZoneWidth / 2)) / gameState.gameZoneWidth * 2 * gameState.perks.wind;
for(let i = 0; i < gameState.perks.wind; i++)if (Math.random() * Math.abs(windD) > 0.5) makeParticle(gameState, gameState.offsetXRoundedDown + Math.random() * gameState.gameZoneWidthRoundedUp, Math.random() * gameState.gameZoneHeight, windD * 8, 0, rainbowColor(), true, gameState.coinSize / 2, 150);
}
forEachLiveOne(gameState.particles, (flash, index)=>{
flash.x += flash.vx * frames;
flash.y += flash.vy * frames;
if (!flash.ethereal) {
flash.vy += 0.5 * frames;
if ((0, _game.hasBrick)((0, _game.brickIndex)(flash.x, flash.y))) destroy(gameState.particles, index);
}
});
}
if (gameState.combo > baseCombo(gameState) && !(0, _options.isOptionOn)("basic") && (gameState.combo - baseCombo(gameState)) * Math.random() > 5) {
// The red should still be visible on a white bg
if (gameState.perks.top_is_lava) makeParticle(gameState, gameState.offsetXRoundedDown + Math.random() * gameState.gameZoneWidthRoundedUp, 0, (Math.random() - 0.5) * 10, 5, "#FF0000", true, gameState.coinSize / 2, 100 * (Math.random() + 1));
if (gameState.perks.left_is_lava) makeParticle(gameState, gameState.offsetXRoundedDown, Math.random() * gameState.gameZoneHeight, 5, (Math.random() - 0.5) * 10, "#FF0000", true, gameState.coinSize / 2, 100 * (Math.random() + 1));
if (gameState.perks.right_is_lava) makeParticle(gameState, gameState.offsetXRoundedDown + gameState.gameZoneWidthRoundedUp, Math.random() * gameState.gameZoneHeight, -5, (Math.random() - 0.5) * 10, "#FF0000", true, gameState.coinSize / 2, 100 * (Math.random() + 1));
if (gameState.perks.compound_interest) {
let x = gameState.puckPosition, attemps = 0;
do {
x = gameState.offsetXRoundedDown + gameState.gameZoneWidthRoundedUp * Math.random();
attemps++;
}while (Math.abs(x - gameState.puckPosition) < gameState.puckWidth / 2 && attemps < 10);
makeParticle(gameState, x, gameState.gameZoneHeight, (Math.random() - 0.5) * 10, -5, "#FF0000", true, gameState.coinSize / 2, 100 * (Math.random() + 1));
}
if (gameState.perks.streak_shots) {
const pos = 0.5 - Math.random();
makeParticle(gameState, gameState.puckPosition + gameState.puckWidth * pos, gameState.gameZoneHeight - gameState.puckHeight, pos * 10, -5, "#FF0000", true, gameState.coinSize / 2, 100 * (Math.random() + 1));
}
}
// Respawn what's needed, show particles
forEachLiveOne(gameState.respawns, (r, ri)=>{
if (gameState.bricks[r.index]) destroy(gameState.respawns, ri);
else if (gameState.levelTime > r.time) {
setBrick(gameState, r.index, r.color);
destroy(gameState.respawns, ri);
} else {
const { index, color } = r;
const vertical = Math.random() > 0.5;
const dx = Math.random() > 0.5 ? 1 : -1;
const dy = Math.random() > 0.5 ? 1 : -1;
makeParticle(gameState, (0, _gameUtils.brickCenterX)(gameState, index) + dx * gameState.brickWidth / 2, (0, _gameUtils.brickCenterY)(gameState, index) + dy * gameState.brickWidth / 2, vertical ? 0 : -dx * gameState.baseSpeed, vertical ? -dy * gameState.baseSpeed : 0, color, true, gameState.coinSize / 2, 250);
}
});
forEachLiveOne(gameState.particles, (p, pi)=>{
if (gameState.levelTime > p.time + p.duration) destroy(gameState.particles, pi);
});
forEachLiveOne(gameState.texts, (p, pi)=>{
if (gameState.levelTime > p.time + p.duration) destroy(gameState.texts, pi);
});
forEachLiveOne(gameState.lights, (p, pi)=>{
if (gameState.levelTime > p.time + p.duration) destroy(gameState.lights, pi);
});
}
function ballTick(gameState, ball, frames) {
ball.previousVX = ball.vx;
ball.previousVY = ball.vy;
let speedLimitDampener = 1 + gameState.perks.telekinesis + gameState.perks.ball_repulse_ball + gameState.perks.puck_repulse_ball + gameState.perks.ball_attract_ball;
if ((0, _gameUtils.telekinesisEffectRate)(gameState, ball) > 0) {
speedLimitDampener += 3;
ball.vx += (gameState.puckPosition - ball.x) / 1000 * frames * gameState.perks.telekinesis * (0, _gameUtils.telekinesisEffectRate)(gameState, ball);
}
if ((0, _gameUtils.yoyoEffectRate)(gameState, ball) > 0) {
speedLimitDampener += 3;
ball.vx += (gameState.puckPosition - ball.x) / 1000 * frames * gameState.perks.yoyo * (0, _gameUtils.yoyoEffectRate)(gameState, ball);
}
if (ball.hitSinceBounce < gameState.perks.bricks_attract_ball * 3) goToNearestBrick(gameState, ball, gameState.perks.bricks_attract_ball * frames * 0.2, 2 + gameState.perks.bricks_attract_ball, Math.random() < 0.5 * frames);
if (ball.vx * ball.vx + ball.vy * ball.vy < gameState.baseSpeed * gameState.baseSpeed * 2) {
ball.vx *= 1 + 0.02 / speedLimitDampener;
ball.vy *= 1 + 0.02 / speedLimitDampener;
} else {
ball.vx *= 1 - 0.02 / speedLimitDampener;
ball.vy *= 1 - 0.02 / speedLimitDampener;
}
// Ball could get stuck horizontally because of ball-ball interactions in repulse/attract
if (Math.abs(ball.vy) < 0.2 * gameState.baseSpeed) ball.vy += (ball.vy > 0 ? 1 : -1) * 0.02 / speedLimitDampener;
if (gameState.perks.ball_repulse_ball) for (let b2 of gameState.balls){
// avoid computing this twice, and repulsing itself
if (b2.x >= ball.x) continue;
repulse(gameState, ball, b2, gameState.perks.ball_repulse_ball, true);
}
if (gameState.perks.ball_attract_ball) for (let b2 of gameState.balls){
// avoid computing this twice, and repulsing itself
if (b2.x >= ball.x) continue;
attract(gameState, ball, b2, gameState.perks.ball_attract_ball);
}
if (gameState.perks.puck_repulse_ball && Math.abs(ball.x - gameState.puckPosition) < gameState.puckWidth / 2 + gameState.ballSize * (9 + gameState.perks.puck_repulse_ball) / 10) repulse(gameState, ball, {
x: gameState.puckPosition,
y: gameState.gameZoneHeight
}, gameState.perks.puck_repulse_ball + 1, false);
const borderHitCode = bordersHitCheck(gameState, ball, gameState.ballSize / 2, frames);
if (borderHitCode) {
if (gameState.perks.left_is_lava && borderHitCode % 2 && ball.x < gameState.offsetX + gameState.gameZoneWidth / 2) resetCombo(gameState, ball.x, ball.y);
if (gameState.perks.right_is_lava && borderHitCode % 2 && ball.x > gameState.offsetX + gameState.gameZoneWidth / 2) resetCombo(gameState, ball.x, ball.y);
if (gameState.perks.top_is_lava && borderHitCode >= 2) resetCombo(gameState, ball.x, ball.y + gameState.ballSize * 3);
if (gameState.perks.trampoline) decreaseCombo(gameState, gameState.perks.trampoline, ball.x, ball.y + gameState.ballSize);
schedulGameSound(gameState, "wallBeep", ball.x, 1);
gameState.levelWallBounces++;
gameState.runStatistics.wall_bounces++;
}
// Puck collision
const ylimit = gameState.gameZoneHeight - gameState.puckHeight - gameState.ballSize / 2;
const ballIsUnderPuck = Math.abs(ball.x - gameState.puckPosition) < gameState.ballSize / 2 + gameState.puckWidth / 2;
if (ball.y > ylimit && ball.vy > 0 && (ballIsUnderPuck || gameState.balls.length < 2 && gameState.perks.extra_life && ball.y > ylimit + gameState.puckHeight / 2)) {
if (ballIsUnderPuck) {
const speed = Math.sqrt(ball.vx * ball.vx + ball.vy * ball.vy);
const angle = Math.atan2(-gameState.puckWidth / 2, (ball.x - gameState.puckPosition) * (gameState.perks.concave_puck ? -1 / (1 + gameState.perks.concave_puck) : 1));
ball.vx = speed * Math.cos(angle);
ball.vy = speed * Math.sin(angle);
schedulGameSound(gameState, "wallBeep", ball.x, 1);
} else {
ball.vy *= -1;
justLostALife(gameState, ball, ball.x, ball.y);
}
if (gameState.perks.streak_shots) resetCombo(gameState, ball.x, ball.y);
if (gameState.perks.trampoline) increaseCombo(gameState, gameState.perks.trampoline, ball.x, ball.y);
if (gameState.perks.nbricks && ball.hitSinceBounce < gameState.perks.nbricks) resetCombo(gameState, ball.x, ball.y);
if (!ball.hitSinceBounce && gameState.bricks.find((i)=>i)) {
gameState.runStatistics.misses++;
if (gameState.perks.forgiving) {
const loss = Math.floor(gameState.levelMisses / 10 / gameState.perks.forgiving * (gameState.combo - baseCombo(gameState)));
decreaseCombo(gameState, loss, ball.x, ball.y - gameState.ballSize);
} else resetCombo(gameState, ball.x, ball.y);
gameState.levelMisses++;
makeText(gameState, gameState.puckPosition, gameState.gameZoneHeight - gameState.puckHeight * 2, "#FF0000", (0, _i18N.t)("play.missed_ball"), gameState.puckHeight, 500);
}
gameState.runStatistics.puck_bounces++;
ball.hitSinceBounce = 0;
ball.brokenSinceBounce = 0;
ball.sapperUses = 0;
ball.piercePoints = gameState.perks.pierce * 3;
}
if (gameState.running && ball.y > gameState.gameZoneHeight + gameState.ballSize / 2) {
ball.destroyed = true;
gameState.runStatistics.balls_lost++;
if (!gameState.balls.find((b)=>!b.destroyed)) {
if (gameState.startParams.computer_controlled) (0, _game.startComputerControlledGame)(gameState.startParams.stress);
else (0, _gameOver.gameOver)((0, _i18N.t)("gameOver.lost.title"), (0, _i18N.t)("gameOver.lost.summary", {
score: gameState.score
}));
}
}
const radius = gameState.ballSize / 2;
// Make ball/coin bonce, and return bricks that were hit
const { x, y, previousX, previousY } = ball;
const vhit = (0, _game.hitsSomething)(previousX, y, radius);
const hhit = (0, _game.hitsSomething)(x, previousY, radius);
const chit = typeof vhit == "undefined" && typeof hhit == "undefined" && (0, _game.hitsSomething)(x, y, radius) || undefined;
const hitBrick = vhit ?? hhit ?? chit;
if (typeof hitBrick !== "undefined") {
const initialBrickColor = gameState.bricks[hitBrick];
ball.hitSinceBounce++;
if (gameState.perks.nbricks) {
if (ball.hitSinceBounce > gameState.perks.nbricks) resetCombo(gameState, ball.x, ball.y);
else increaseCombo(gameState, gameState.perks.nbricks, ball.x, ball.y);
}
let pierce = false;
let damage = 1 + ((0, _gameUtils.shouldPierceByColor)(gameState, vhit, hhit, chit) ? gameState.perks.pierce_color : 0);
gameState.brickHP[hitBrick] -= damage;
const used = Math.min(ball.piercePoints, Math.max(1, gameState.brickHP[hitBrick] + 1));
gameState.brickHP[hitBrick] -= used;
ball.piercePoints -= used;
if (gameState.brickHP[hitBrick] < 0) {
gameState.brickHP[hitBrick] = 0;
pierce = true;
}
if (typeof vhit !== "undefined" || typeof chit !== "undefined") {
if (!pierce) {
ball.y = ball.previousY;
ball.vy *= -1;
}
}
if (typeof hhit !== "undefined" || typeof chit !== "undefined") {
if (!pierce) {
ball.x = ball.previousX;
ball.vx *= -1;
}
}
if (!gameState.brickHP[hitBrick]) {
ball.brokenSinceBounce++;
explodeBrick(gameState, hitBrick, ball, false);
if (ball.sapperUses < gameState.perks.sapper && initialBrickColor !== "black" && // don't replace a brick that bounced with sturdy_bricks
!gameState.bricks[hitBrick]) {
setBrick(gameState, hitBrick, "black");
ball.sapperUses++;
}
} else {
schedulGameSound(gameState, "wallBeep", x, 1);
makeLight(gameState, (0, _gameUtils.brickCenterX)(gameState, hitBrick), (0, _gameUtils.brickCenterY)(gameState, hitBrick), "#FFFFFF", gameState.brickWidth + 2, 50 * gameState.brickHP[hitBrick]);
}
}
if (!(0, _options.isOptionOn)("basic") && (0, _gameUtils.ballTransparency)(ball, gameState) < Math.random()) {
const remainingPierce = ball.piercePoints;
const remainingSapper = ball.sapperUses < gameState.perks.sapper;
const willMiss = (0, _options.isOptionOn)("red_miss") && ball.vy > 0 && !ball.hitSinceBounce;
const extraCombo = gameState.combo - 1;
if (willMiss || extraCombo && Math.random() > 0.1 / (1 + extraCombo) || remainingSapper && Math.random() > 0.1 / (1 + remainingSapper) || extraCombo && Math.random() > 0.1 / (1 + extraCombo)) {
const color = remainingSapper && (Math.random() > 0.5 ? "#ffb92a" : "#FF0000") || willMiss && "#FF0000" || gameState.ballsColor;
makeParticle(gameState, ball.x, ball.y, gameState.perks.pierce_color || remainingPierce ? -ball.vx + (Math.random() - 0.5) * gameState.baseSpeed / 3 : (Math.random() - 0.5) * gameState.baseSpeed, gameState.perks.pierce_color || remainingPierce ? -ball.vy + (Math.random() - 0.5) * gameState.baseSpeed / 3 : (Math.random() - 0.5) * gameState.baseSpeed, color, true, gameState.coinSize / 2, 100);
}
}
}
function justLostALife(gameState, ball, x, y) {
gameState.perks.extra_life -= 1;
if (gameState.perks.extra_life < 0) gameState.perks.extra_life = 0;
else if (gameState.perks.sacrifice) {
gameState.combo *= gameState.perks.sacrifice;
gameState.bricks.forEach((color, index)=>color && explodeBrick(gameState, index, ball, true));
}
schedulGameSound(gameState, "lifeLost", ball.x, 1);
if (!(0, _options.isOptionOn)("basic")) for(let i = 0; i < 10; i++)makeParticle(gameState, x, y, Math.random() * gameState.baseSpeed * 3, gameState.baseSpeed * 3, "#FF0000", false, gameState.coinSize / 2, 150);
}
function makeCoin(gameState, x, y, vx, vy, color = "#ffd300", points = 1) {
let weight = 0.8 + Math.random() * 0.2 + Math.min(2, points * 0.01);
weight *= 5 / (5 + gameState.perks.etherealcoins);
if (gameState.perks.trickledown) y = -20;
if (gameState.perks.rainbow && Math.random() > 1 / (1 + gameState.perks.rainbow)) color = rainbowColor();
append(gameState.coins, (p)=>{
p.x = x;
p.y = y;
p.collidedLastFrame = true;
p.size = gameState.coinSize;
p.previousX = x;
p.previousY = y;
p.vx = vx;
p.vy = vy;
// p.sx = 0;
// p.sy = 0;
p.color = color;
p.a = Math.random() * Math.PI * 2;
p.sa = Math.random() - 0.5;
p.points = points;
p.weight = weight;
p.metamorphosisPoints = gameState.perks.metamorphosis;
});
}
function makeParticle(gameState, x, y, vx, vy, color, ethereal = false, size = 8, duration = 150) {
append(gameState.particles, (p)=>{
p.time = gameState.levelTime;
p.x = x;
p.y = y;
p.vx = vx;
p.vy = vy;
p.color = color;
p.size = size;
p.duration = duration;
p.ethereal = ethereal;
});
}
function makeText(gameState, x, y, color, text, size = 20, duration = 500) {
append(gameState.texts, (p)=>{
p.time = gameState.levelTime;
p.x = x;
p.y = y;
p.color = color;
p.size = size;
p.duration = (0, _pureFunctions.clamp)(duration, 400, 2000);
p.text = text;
});
}
function makeLight(gameState, x, y, color, size = 8, duration = 150) {
append(gameState.lights, (p)=>{
p.time = gameState.levelTime;
p.x = x;
p.y = y;
p.color = color;
p.size = size;
p.duration = duration;
});
}
function append(where, makeItem) {
while(where.list[where.indexMin] && !where.list[where.indexMin].destroyed && where.indexMin < where.list.length)where.indexMin++;
if (where.indexMin < where.list.length) {
where.list[where.indexMin].destroyed = false;
makeItem(where.list[where.indexMin]);
where.indexMin++;
} else {
const p = {
destroyed: false
};
makeItem(p);
where.list.push(p);
}
where.total++;
}
function destroy(where, index) {
if (where.list[index].destroyed) return;
where.list[index].destroyed = true;
where.indexMin = Math.min(where.indexMin, index);
where.total--;
}
function liveCount(where) {
return where.total;
}
function empty(where) {
let destroyed = 0;
where.total = 0;
where.indexMin = 0;
where.list.forEach((i)=>{
if (!i.destroyed) {
i.destroyed = true;
destroyed++;
}
});
return destroyed;
}
function forEachLiveOne(where, cb) {
where.list.forEach((item, index)=>{
if (item && !item.destroyed) cb(item, index);
});
}
function goToNearestBrick(gameState, coin, strength, size = 2, particle = false) {
const row = Math.floor(coin.y / gameState.brickWidth);
const col = Math.floor((coin.x - gameState.offsetX) / gameState.brickWidth);
let vx = 0, vy = 0;
for(let dcol = -size; dcol < size; dcol++)for(let drow = -size; drow < size; drow++){
const index = (0, _gameUtils.getRowColIndex)(gameState, row + drow, col + dcol);
if (gameState.bricks[index]) {
const dx = (0, _gameUtils.brickCenterX)(gameState, index) + (0, _pureFunctions.clamp)(-dcol, -1, 1) * gameState.brickWidth / 2 - coin.x;
const dy = (0, _gameUtils.brickCenterY)(gameState, index) + (0, _pureFunctions.clamp)(-drow, -1, 1) * gameState.brickWidth / 2 - coin.y;
const d2 = dx * dx + dy * dy;
vx += dx / d2 * 20;
vy += dy / d2 * 20;
}
}
coin.vx += vx * strength;
coin.vy += vy * strength;
const s2 = coin.vx * coin.vx + coin.vy * coin.vy;
if (s2 > gameState.baseSpeed * gameState.baseSpeed * 2) {
coin.vx *= 0.95;
coin.vy *= 0.95;
}
if ((vx || vy) && particle) makeParticle(gameState, coin.x, coin.y, -vx * 2, -vy * 2, rainbowColor(), true);
}
},{"./game_utils":"cEeac","./i18n/i18n":"eNPRm","./loadGameData":"l1B4x","./settings":"5blfu","./render":"9AS2t","./gameOver":"caCAf","./game":"edeGs","./recording":"godmD","./options":"d5NoS","./pure_functions":"6pQh7","./addToTotalScore":"ka4dG","./getLevelBackground":"7OIPf","@parcel/transformer-js/src/esmodule-helpers.js":"gkKU3"}],"9AS2t":[function(require,module,exports,__globalThis) {
var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js");
parcelHelpers.defineInteropFlag(exports);
parcelHelpers.export(exports, "gameCanvas", ()=>gameCanvas);
parcelHelpers.export(exports, "ctx", ()=>ctx);
parcelHelpers.export(exports, "bombSVG", ()=>bombSVG);
parcelHelpers.export(exports, "background", ()=>background);
parcelHelpers.export(exports, "backgroundCanvas", ()=>backgroundCanvas);
parcelHelpers.export(exports, "haloCanvas", ()=>haloCanvas);
parcelHelpers.export(exports, "getHaloScale", ()=>getHaloScale);
parcelHelpers.export(exports, "render", ()=>render);
parcelHelpers.export(exports, "renderAllBricks", ()=>renderAllBricks);
parcelHelpers.export(exports, "drawPuck", ()=>drawPuck);
parcelHelpers.export(exports, "drawBall", ()=>drawBall);
parcelHelpers.export(exports, "drawCoin", ()=>drawCoin);
parcelHelpers.export(exports, "drawFuzzyBall", ()=>drawFuzzyBall);
parcelHelpers.export(exports, "drawBrick", ()=>drawBrick);
parcelHelpers.export(exports, "roundRect", ()=>roundRect);
parcelHelpers.export(exports, "drawIMG", ()=>drawIMG);
parcelHelpers.export(exports, "drawText", ()=>drawText);
parcelHelpers.export(exports, "scoreDisplay", ()=>scoreDisplay);
parcelHelpers.export(exports, "getDashOffset", ()=>getDashOffset);
var _gameStateMutators = require("./gameStateMutators");
var _gameUtils = require("./game_utils");
var _i18N = require("./i18n/i18n");
var _game = require("./game");
var _options = require("./options");
var _pureFunctions = require("./pure_functions");
const gameCanvas = document.getElementById("game");
const ctx = gameCanvas.getContext("2d", {
alpha: false
});
const bombSVG = document.createElement("img");
bombSVG.src = "data:image/svg+xml;base64," + btoa(`<svg width="144" height="144" viewBox="0 0 38.101 38.099" xmlns="http://www.w3.org/2000/svg">
<path d="m6.1528 26.516c-2.6992-3.4942-2.9332-8.281-.58305-11.981a10.454 10.454 0 017.3701-4.7582c1.962-.27726 4.1646.05953 5.8835.90027l.45013.22017.89782-.87417c.83748-.81464.91169-.87499 1.0992-.90271.40528-.058713.58876.03425 1.1971.6116l.55451.52679 1.0821-1.0821c1.1963-1.1963 1.383-1.3357 2.1039-1.5877.57898-.20223 1.5681-.19816 2.1691.00897 1.4613.50314 2.3673 1.7622 2.3567 3.2773-.0058.95654-.24464 1.5795-.90924 2.3746-.40936.48928-.55533.81057-.57898 1.2737-.02039.41018.1109.77714.42322 1.1792.30172.38816.3694.61323.2797.93044-.12803.45666-.56674.71598-1.0242.60507-.601-.14597-1.3031-1.3088-1.3969-2.3126-.09459-1.0161.19245-1.8682.92392-2.7432.42567-.50885.5643-.82851.5643-1.3031 0-.50151-.14026-.83177-.51211-1.2028-.50966-.50966-1.0968-.64829-1.781-.41996l-.37348.12477-2.1006 2.1006.52597.55696c.45421.48194.5325.58876.57898.78855.09622.41588.07502.45014-.88396 1.4548l-.87173.9125.26339.57979a10.193 10.193 0 01.9231 4.1001c.03996 2.046-.41996 3.8082-1.4442 5.537-.55044.928-1.0185 1.5013-1.8968 2.3241-.83503.78284-1.5526 1.2827-2.4904 1.7361-3.4266 1.657-7.4721 1.3422-10.549-.82035-.73473-.51782-1.7312-1.4621-2.2515-2.1357zm21.869-4.5584c-.0579-.19734-.05871-2.2662 0-2.4545.11906-.39142.57898-.63361 1.0038-.53005.23812.05708.54147.32455.6116.5382.06279.19163.06769 2.1805.0065 2.3811-.12558.40773-.61649.67602-1.0462.57164-.234-.05708-.51615-.30498-.57568-.50722m3.0417-2.6013c-.12313-.6222.37837-1.1049 1.0479-1.0079.18348.0261.25279.08399 1.0071.83911.75838.75838.81301.82362.84074 1.0112.10193.68499-.40365 1.1938-1.034 1.0405-.1949-.0473-.28786-.12558-1.0144-.85216-.7649-.76409-.80241-.81057-.84645-1.0316m.61323-3.0629a.85623.85623 0 01.59284-.99975c.28949-.09214 2.1814-.08318 2.3917.01141.38734.17369.6279.61078.53984.98181-.06035.25606-.35391.57327-.60181.64992-.25279.07747-2.2278.053-2.4097-.03017-.26013-.11906-.46318-.36125-.51374-.61323" fill="#fff" opacity="0.3"/>
</svg>`);
bombSVG.onload = ()=>(0, _game.gameState).needsRender = true;
const background = document.createElement("img");
background.onload = ()=>(0, _game.gameState).needsRender = true;
const backgroundCanvas = document.createElement("canvas");
const haloCanvas = document.createElement("canvas");
const haloCanvasCtx = haloCanvas.getContext("2d", {
alpha: false
});
function getHaloScale() {
return 16 * ((0, _options.isOptionOn)("precise_lighting") ? 1 : 2);
}
let framesCounter = 0;
function render(gameState) {
framesCounter++;
(0, _game.startWork)("render:init");
const level = (0, _gameUtils.currentLevelInfo)(gameState);
const hasCombo = gameState.combo > (0, _gameStateMutators.baseCombo)(gameState);
const { width, height } = gameCanvas;
if (!width || !height) return;
if (gameState.currentLevel || gameState.levelTime) menuLabel.innerText = (0, _i18N.t)("play.current_lvl", {
level: gameState.currentLevel + 1,
max: (0, _gameUtils.max_levels)(gameState)
});
else menuLabel.innerText = (0, _i18N.t)("play.menu_label");
const catchRate = gameState.levelSpawnedCoins ? (gameState.levelSpawnedCoins - gameState.levelLostCoins) / gameState.levelSpawnedCoins : 1;
(0, _game.startWork)("render:scoreDisplay");
scoreDisplay.innerHTML = ((0, _options.isOptionOn)("show_fps") || gameState.startParams.computer_controlled ? `
<span class="${Math.abs((0, _game.lastMeasuredFPS) - 60) < 2 && " " || Math.abs((0, _game.lastMeasuredFPS) - 60) < 10 && "good" || "bad"}">
${0, _game.lastMeasuredFPS} FPS
</span><span> / </span>
` : "") + ((0, _options.isOptionOn)("show_stats") ? `
<span class="${catchRate > (0, _pureFunctions.catchRateBest) / 100 && "great" || catchRate > (0, _pureFunctions.catchRateGood) / 100 && "good" || ""}" data-tooltip="${(0, _i18N.t)("play.stats.coins_catch_rate")}">
${Math.floor(catchRate * 100)}%
</span><span> / </span>
<span class="${gameState.levelTime < (0, _pureFunctions.levelTimeBest) * 1000 && "great" || gameState.levelTime < (0, _pureFunctions.levelTimeGood) * 1000 && "good" || ""}" data-tooltip="${(0, _i18N.t)("play.stats.levelTime")}">
${Math.ceil(gameState.levelTime / 1000)}s
</span><span> / </span>
<span class="${gameState.levelWallBounces < (0, _pureFunctions.wallBouncedBest) && "great" || gameState.levelWallBounces < (0, _pureFunctions.wallBouncedGood) && "good" || ""}" data-tooltip="${(0, _i18N.t)("play.stats.levelWallBounces")}">
${gameState.levelWallBounces} B
</span><span> / </span>
<span class="${gameState.levelMisses < (0, _pureFunctions.missesBest) && "great" || gameState.levelMisses < (0, _pureFunctions.missesGood) && "good" || ""}" data-tooltip="${(0, _i18N.t)("play.stats.levelMisses")}">
${gameState.levelMisses} M
</span><span> / </span>
` : "") + `<span class="score" data-tooltip="${(0, _i18N.t)("play.score_tooltip")}">$${gameState.score}</span>`;
scoreDisplay.className = gameState.startParams.computer_controlled && "computer_controlled" || gameState.lastScoreIncrease > gameState.levelTime - 500 && "active" || "";
// Clear
if (!(0, _options.isOptionOn)("basic") && level.svg && level.color === "#000000") {
const skipN = (0, _options.isOptionOn)("probabilistic_lighting") && (0, _gameStateMutators.liveCount)(gameState.coins) > 150 ? 3 : 0;
const shouldSkip = (index)=>skipN ? (framesCounter + index) % (skipN + 1) !== 0 : false;
const haloScale = getHaloScale();
(0, _game.startWork)("render:halo:clear");
haloCanvasCtx.globalCompositeOperation = "source-over";
haloCanvasCtx.globalAlpha = skipN ? 0.1 : 0.99;
haloCanvasCtx.fillStyle = level.color;
haloCanvasCtx.fillRect(0, 0, width / haloScale, height / haloScale);
const brightness = (0, _options.isOptionOn)("extra_bright") ? 3 : 1;
haloCanvasCtx.globalCompositeOperation = "lighten";
haloCanvasCtx.globalAlpha = 0.1 + 5 / ((0, _gameStateMutators.liveCount)(gameState.coins) + 10);
(0, _game.startWork)("render:halo:coins");
(0, _gameStateMutators.forEachLiveOne)(gameState.coins, (coin, index)=>{
if (shouldSkip(index)) return;
const color = (0, _gameUtils.getCoinRenderColor)(gameState, coin);
drawFuzzyBall(haloCanvasCtx, color, gameState.coinSize * 2 * brightness / haloScale, coin.x / haloScale, coin.y / haloScale);
});
(0, _game.startWork)("render:halo:balls");
gameState.balls.forEach((ball, index)=>{
if (shouldSkip(index)) return;
haloCanvasCtx.globalAlpha = 0.3 * (1 - (0, _gameUtils.ballTransparency)(ball, gameState));
drawFuzzyBall(haloCanvasCtx, gameState.ballsColor, gameState.ballSize * 2 * brightness / haloScale, ball.x / haloScale, ball.y / haloScale);
});
(0, _game.startWork)("render:halo:bricks");
haloCanvasCtx.globalAlpha = 0.05;
gameState.bricks.forEach((color, index)=>{
if (!color) return;
if (shouldSkip(index)) return;
const x = (0, _gameUtils.brickCenterX)(gameState, index), y = (0, _gameUtils.brickCenterY)(gameState, index);
drawFuzzyBall(haloCanvasCtx, color == "black" ? "#666666" : color, // Perf could really go down there because of the size of the halo
Math.min(200, gameState.brickWidth * 1.5 * brightness) / haloScale, x / haloScale, y / haloScale);
});
(0, _game.startWork)("render:halo:particles");
haloCanvasCtx.globalCompositeOperation = "screen";
(0, _gameStateMutators.forEachLiveOne)(gameState.particles, (flash, index)=>{
if (shouldSkip(index)) return;
const { x, y, time, color, size, duration } = flash;
const elapsed = gameState.levelTime - time;
haloCanvasCtx.globalAlpha = 0.1 * Math.min(1, 2 - elapsed / duration * 2);
drawFuzzyBall(haloCanvasCtx, color, size * 3 * brightness / haloScale, x / haloScale, y / haloScale);
});
(0, _game.startWork)("render:halo:scale_up");
ctx.globalAlpha = 1;
ctx.globalCompositeOperation = "source-over";
ctx.imageSmoothingQuality = "high";
ctx.imageSmoothingEnabled = (0, _options.isOptionOn)("smooth_lighting") || false;
ctx.drawImage(haloCanvas, 0, 0, width, height);
ctx.imageSmoothingEnabled = false;
(0, _game.startWork)("render:halo:pattern");
ctx.globalAlpha = 1;
ctx.globalCompositeOperation = "multiply";
if (level.svg && background.width && background.complete) {
if (backgroundCanvas.title !== level.name) {
backgroundCanvas.title = level.name;
backgroundCanvas.width = gameState.canvasWidth;
backgroundCanvas.height = gameState.canvasHeight;
const bgctx = backgroundCanvas.getContext("2d");
bgctx.globalCompositeOperation = "source-over";
bgctx.fillStyle = level.color || "#000";
bgctx.fillRect(0, 0, gameState.canvasWidth, gameState.canvasHeight);
if (gameState.perks.clairvoyant >= 3) {
const pageSource = document.body.innerHTML.replace(/\s+/gi, "");
const lineWidth = Math.ceil(gameState.canvasWidth / 15);
const lines = Math.ceil(gameState.canvasHeight / 20);
const chars = lineWidth * lines;
let start = Math.ceil(Math.random() * (pageSource.length - chars));
for(let i = 0; i < lines; i++){
bgctx.fillStyle = "#FFFFFF";
bgctx.font = "20px Courier";
bgctx.fillText(pageSource.slice(start + i * lineWidth, start + (i + 1) * lineWidth), 0, i * 20, gameState.canvasWidth);
}
} else {
const pattern = ctx.createPattern(background, "repeat");
if (pattern) {
bgctx.globalCompositeOperation = "screen";
bgctx.fillStyle = pattern;
bgctx.fillRect(0, 0, width, height);
}
}
}
ctx.globalCompositeOperation = "darken";
ctx.drawImage(backgroundCanvas, 0, 0);
} else {
// Background not loaded yes
ctx.fillStyle = "#000";
ctx.fillRect(0, 0, width, height);
}
} else {
(0, _game.startWork)("render:halo-basic");
ctx.globalAlpha = 1;
ctx.globalCompositeOperation = "source-over";
ctx.fillStyle = level.color || "#000";
ctx.fillRect(0, 0, width, height);
(0, _gameStateMutators.forEachLiveOne)(gameState.particles, (flash)=>{
const { x, y, time, color, size, duration } = flash;
const elapsed = gameState.levelTime - time;
ctx.globalAlpha = Math.min(1, 2 - elapsed / duration * 2);
drawBall(ctx, color, size, x, y);
});
}
(0, _game.startWork)("render:explosionshake");
ctx.globalAlpha = 1;
ctx.globalCompositeOperation = "source-over";
const lastExplosionDelay = Date.now() - gameState.lastExplosion + 5;
const shaked = lastExplosionDelay < 200 && !(0, _options.isOptionOn)("basic");
if (shaked) {
const amplitude = (gameState.perks.bigger_explosions + 1) * 50 / lastExplosionDelay;
ctx.translate(Math.sin(Date.now()) * amplitude, Math.sin(Date.now() + 36) * amplitude);
}
(0, _game.startWork)("render:coins");
// Coins
ctx.globalAlpha = 1;
(0, _gameStateMutators.forEachLiveOne)(gameState.coins, (coin)=>{
const color = (0, _gameUtils.getCoinRenderColor)(gameState, coin);
const hollow = gameState.perks.metamorphosis && !coin.metamorphosisPoints;
ctx.globalCompositeOperation = "source-over";
drawCoin(ctx, hollow ? "transparent" : color, coin.size, coin.x, coin.y, // Red border around coins with asceticism
hasCombo && gameState.perks.asceticism && "#FF0000" || // Gold coins
// (color === "#ffd300" && "#ffd300") ||
hollow && color || gameState.level.color, coin.a);
});
(0, _game.startWork)("render:ball shade");
// Black shadow around balls
if (!(0, _options.isOptionOn)("basic")) {
ctx.globalCompositeOperation = "source-over";
gameState.balls.forEach((ball)=>{
ctx.globalAlpha = Math.min(0.8, (0, _gameStateMutators.liveCount)(gameState.coins) / 20) * (1 - (0, _gameUtils.ballTransparency)(ball, gameState));
drawBall(ctx, level.color || "#000", gameState.ballSize * 6, ball.x, ball.y);
});
}
(0, _game.startWork)("render:bricks");
ctx.globalCompositeOperation = "source-over";
renderAllBricks();
(0, _game.startWork)("render:lights");
ctx.globalCompositeOperation = "screen";
(0, _gameStateMutators.forEachLiveOne)(gameState.lights, (flash)=>{
const { x, y, time, color, size, duration } = flash;
const elapsed = gameState.levelTime - time;
ctx.globalAlpha = Math.min(1, 2 - elapsed / duration * 2) * 0.5;
drawBrick(gameState, ctx, color, x, y, -1, gameState.perks.clairvoyant >= 2);
});
(0, _game.startWork)("render:texts");
ctx.globalCompositeOperation = "screen";
(0, _gameStateMutators.forEachLiveOne)(gameState.texts, (flash)=>{
const { x, y, time, color, size, duration } = flash;
const elapsed = gameState.levelTime - time;
ctx.globalAlpha = Math.max(0, Math.min(1, 2 - elapsed / duration * 2));
ctx.globalCompositeOperation = "source-over";
drawText(ctx, flash.text, color, size, x, y - elapsed / 10);
});
(0, _game.startWork)("render:particles");
(0, _gameStateMutators.forEachLiveOne)(gameState.particles, (particle)=>{
const { x, y, time, color, size, duration } = particle;
const elapsed = gameState.levelTime - time;
ctx.globalAlpha = Math.max(0, Math.min(1, 2 - elapsed / duration * 2));
ctx.globalCompositeOperation = "screen";
drawBall(ctx, color, size, x, y);
});
(0, _game.startWork)("render:extra_life");
if (gameState.perks.extra_life) {
ctx.globalAlpha = 1;
ctx.globalCompositeOperation = "source-over";
ctx.fillStyle = gameState.puckColor;
for(let i = 0; i < gameState.perks.extra_life; i++)ctx.fillRect(gameState.offsetXRoundedDown, gameState.gameZoneHeight - gameState.puckHeight / 2 + 2 * i, gameState.gameZoneWidthRoundedUp, 1);
}
(0, _game.startWork)("render:balls");
ctx.globalAlpha = 1;
ctx.globalCompositeOperation = "source-over";
gameState.balls.forEach((ball)=>{
const drawingColor = gameState.ballsColor;
const ballAlpha = 1 - (0, _gameUtils.ballTransparency)(ball, gameState);
ctx.globalAlpha = ballAlpha;
// The white border around is to distinguish colored balls from coins/bg
drawBall(ctx, drawingColor, gameState.ballSize, ball.x, ball.y, gameState.puckColor);
if ((0, _gameUtils.telekinesisEffectRate)(gameState, ball) || (0, _gameUtils.yoyoEffectRate)(gameState, ball)) {
ctx.beginPath();
ctx.moveTo(gameState.puckPosition, gameState.gameZoneHeight);
ctx.globalAlpha = Math.max((0, _gameUtils.telekinesisEffectRate)(gameState, ball), (0, _gameUtils.yoyoEffectRate)(gameState, ball)) * ballAlpha;
ctx.strokeStyle = gameState.puckColor;
ctx.bezierCurveTo(gameState.puckPosition, gameState.gameZoneHeight, gameState.puckPosition, ball.y, ball.x, ball.y);
ctx.stroke();
ctx.lineWidth = 2;
ctx.setLineDash(emptyArray);
}
ctx.globalAlpha = 1;
if (gameState.perks.clairvoyant && gameState.ballStickToPuck) {
ctx.strokeStyle = gameState.ballsColor;
ctx.beginPath();
ctx.moveTo(ball.x, ball.y);
ctx.lineTo(ball.x + ball.vx * 10, ball.y + ball.vy * 10);
ctx.stroke();
}
});
(0, _game.startWork)("render:puck");
ctx.globalAlpha = 1;
ctx.globalCompositeOperation = "source-over";
drawPuck(ctx, gameState.puckColor, gameState.puckWidth, gameState.puckHeight, 0, gameState.perks.concave_puck, gameState.perks.streak_shots && hasCombo ? getDashOffset(gameState) : -1);
(0, _game.startWork)("render:combotext");
if (gameState.combo > 1) {
ctx.globalCompositeOperation = "source-over";
ctx.globalAlpha = 1;
const comboText = "x " + gameState.combo;
const comboTextWidth = comboText.length * gameState.puckHeight / 1.8;
const totalWidth = comboTextWidth + gameState.coinSize * 2;
const left = gameState.puckPosition - totalWidth / 2;
ctx.globalAlpha = gameState.combo > (0, _gameStateMutators.baseCombo)(gameState) ? 1 : 0.3;
if (totalWidth < gameState.puckWidth) {
drawText(ctx, comboText, "#000", gameState.puckHeight, left + gameState.coinSize * 1.5, gameState.gameZoneHeight - gameState.puckHeight / 2, true);
ctx.globalAlpha = 1;
drawCoin(ctx, "#ffd300", gameState.coinSize, left + gameState.coinSize / 2, gameState.gameZoneHeight - gameState.puckHeight / 2, "#ffd300", 0);
} else drawText(ctx, comboTextWidth > gameState.puckWidth ? gameState.combo.toString() : comboText, "#000", comboTextWidth > gameState.puckWidth ? 12 : 20, gameState.puckPosition, gameState.gameZoneHeight - gameState.puckHeight / 2, false);
}
(0, _game.startWork)("render:borders");
// Borders
ctx.globalCompositeOperation = "source-over";
ctx.globalAlpha = 1;
let redLeftSide = hasCombo && (gameState.perks.left_is_lava || gameState.perks.trampoline);
let redRightSide = hasCombo && (gameState.perks.right_is_lava || gameState.perks.trampoline);
let redTop = hasCombo && (gameState.perks.top_is_lava || gameState.perks.trampoline);
if (gameState.offsetXRoundedDown) {
// draw outside of gaming area to avoid capturing borders in recordings
drawStraightLine(ctx, gameState, redLeftSide && "#FF0000" || "#FFFFFF", gameState.offsetXRoundedDown - 1, 0, gameState.offsetXRoundedDown - 1, height, 1);
drawStraightLine(ctx, gameState, redRightSide && "#FF0000" || "#FFFFFF", width - gameState.offsetXRoundedDown + 1, 0, width - gameState.offsetXRoundedDown + 1, height, 1);
} else {
drawStraightLine(ctx, gameState, redLeftSide && "#FF0000" || "", 0, 0, 0, height, 1);
drawStraightLine(ctx, gameState, redRightSide && "#FF0000" || "", width - 1, 0, width - 1, height, 1);
}
if (redTop) drawStraightLine(ctx, gameState, "#FF0000", gameState.offsetXRoundedDown, 1, width - gameState.offsetXRoundedDown, 1, 1);
(0, _game.startWork)("render:bottom_line");
ctx.globalAlpha = 1;
const corner = (0, _gameUtils.getCornerOffset)(gameState);
drawStraightLine(ctx, gameState, hasCombo && gameState.perks.compound_interest && "#FF0000" || (0, _options.isOptionOn)("mobile-mode") && "#666666" || corner && "#666666" || "", gameState.offsetXRoundedDown - corner, gameState.gameZoneHeight - 1, width - gameState.offsetXRoundedDown + corner, gameState.gameZoneHeight - 1, 1);
(0, _game.startWork)("render:contrast");
if (!(0, _options.isOptionOn)("basic") && (0, _options.isOptionOn)("contrast") && level.svg && level.color === "#000000") {
ctx.imageSmoothingEnabled = (0, _options.isOptionOn)("smooth_lighting") || false;
if ((0, _options.isOptionOn)("probabilistic_lighting")) {
ctx.globalAlpha = 1;
ctx.globalCompositeOperation = "soft-light";
} else {
haloCanvasCtx.fillStyle = "#FFFFFF";
haloCanvasCtx.globalAlpha = 0.25;
haloCanvasCtx.globalCompositeOperation = "screen";
haloCanvasCtx.fillRect(0, 0, haloCanvas.width, haloCanvas.height);
ctx.globalAlpha = 1;
ctx.globalCompositeOperation = "overlay";
}
ctx.drawImage(haloCanvas, 0, 0, width, height);
ctx.imageSmoothingEnabled = false;
}
(0, _game.startWork)("render:text_under_puck");
ctx.globalCompositeOperation = "source-over";
ctx.globalAlpha = 1;
if ((0, _options.isOptionOn)("mobile-mode") && gameState.startParams.computer_controlled) drawText(ctx, "breakout.lecaro.me?autoplay", gameState.puckColor, gameState.puckHeight, gameState.canvasWidth / 2, gameState.gameZoneHeight + (gameState.canvasHeight - gameState.gameZoneHeight) / 2);
if ((0, _options.isOptionOn)("mobile-mode") && !gameState.running) drawText(ctx, (0, _i18N.t)("play.mobile_press_to_play"), gameState.puckColor, gameState.puckHeight, gameState.canvasWidth / 2, gameState.gameZoneHeight + (gameState.canvasHeight - gameState.gameZoneHeight) / 2);
(0, _game.startWork)("render:askForWakeLock");
askForWakeLock(gameState);
(0, _game.startWork)("render:resetTransform");
if (shaked) ctx.resetTransform();
}
function drawStraightLine(ctx, gameState, mode, x1, y1, x2, y2, alpha = 1) {
x1 = Math.round(x1);
y1 = Math.round(y1);
x2 = Math.round(x2);
y2 = Math.round(y2);
ctx.globalAlpha = alpha;
if (!mode) return;
ctx.strokeStyle = mode;
if (mode == "#FF0000") {
ctx.lineDashOffset = getDashOffset(gameState);
ctx.lineWidth = 2;
ctx.setLineDash(redBorderDash);
} else ctx.lineWidth = 1;
ctx.beginPath();
ctx.moveTo(x1, y1);
ctx.lineTo(x2, y2);
ctx.stroke();
if (mode == "#FF0000") {
ctx.setLineDash(emptyArray);
ctx.lineWidth = 1;
}
ctx.globalAlpha = 1;
}
let cachedBricksRender = document.createElement("canvas");
let cachedBricksRenderKey = "";
function renderAllBricks() {
ctx.globalAlpha = 1;
const hasCombo = (0, _game.gameState).combo > (0, _gameStateMutators.baseCombo)((0, _game.gameState));
const redBorderOnBricksWithWrongColor = hasCombo && (0, _game.gameState).perks.picky_eater && (0, _gameUtils.isPickyEatingPossible)((0, _game.gameState));
const redColorOnAllBricks = hasCombo && (0, _gameUtils.isMovingWhilePassiveIncome)((0, _game.gameState));
const redRowReach = (0, _gameUtils.reachRedRowIndex)((0, _game.gameState));
const { clairvoyant } = (0, _game.gameState).perks;
let offset = getDashOffset((0, _game.gameState));
if (!(redBorderOnBricksWithWrongColor || redColorOnAllBricks || redRowReach !== -1 || (0, _game.gameState).perks.zen)) offset = 0;
const clairVoyance = clairvoyant && (0, _game.gameState).brickHP.reduce((a, b)=>a + b, 0);
const newKey = (0, _game.gameState).gameZoneWidth + "_" + (0, _game.gameState).bricks.join("_") + bombSVG.complete + "_" + redRowReach + "_" + redBorderOnBricksWithWrongColor + "_" + redColorOnAllBricks + "_" + (0, _game.gameState).ballsColor + "_" + (0, _game.gameState).perks.pierce_color + "_" + clairVoyance + "_" + offset;
if (newKey !== cachedBricksRenderKey) {
cachedBricksRenderKey = newKey;
cachedBricksRender.width = (0, _game.gameState).gameZoneWidth;
cachedBricksRender.height = (0, _game.gameState).gameZoneWidth + 1;
const canctx = cachedBricksRender.getContext("2d");
canctx.clearRect(0, 0, (0, _game.gameState).gameZoneWidth, (0, _game.gameState).gameZoneWidth);
canctx.resetTransform();
canctx.translate(-(0, _game.gameState).offsetX, 0);
// Bricks
(0, _game.gameState).bricks.forEach((color, index)=>{
const x = (0, _gameUtils.brickCenterX)((0, _game.gameState), index), y = (0, _gameUtils.brickCenterY)((0, _game.gameState), index);
if (!color) return;
let redBecauseOfReach = redRowReach === Math.floor(index / (0, _game.gameState).level.size);
let redBorder = (0, _game.gameState).ballsColor !== color && color !== "black" && redBorderOnBricksWithWrongColor || hasCombo && (0, _game.gameState).perks.zen && color === "black" || redBecauseOfReach || redColorOnAllBricks;
canctx.globalCompositeOperation = "source-over";
drawBrick((0, _game.gameState), canctx, color, x, y, redBorder ? offset : -1, clairvoyant >= 2);
if ((0, _game.gameState).brickHP[index] > 1 && clairvoyant) {
canctx.globalCompositeOperation = "source-over";
drawText(canctx, (0, _game.gameState).brickHP[index].toString(), clairvoyant >= 2 ? color : (0, _game.gameState).level.color, (0, _game.gameState).puckHeight, x, y);
}
if (color === "black") {
canctx.globalCompositeOperation = "source-over";
drawIMG(canctx, bombSVG, (0, _game.gameState).brickWidth, x, y);
}
});
}
ctx.drawImage(cachedBricksRender, (0, _game.gameState).offsetX, 0);
}
let cachedGraphics = {};
function drawPuck(ctx, color, puckWidth, puckHeight, yOffset = 0, concave_puck, redBorderOffset) {
const key = "puck" + color + "_" + puckWidth + "_" + puckHeight + "_" + concave_puck + "_" + redBorderOffset;
if (!cachedGraphics[key]) {
const can = document.createElement("canvas");
can.width = puckWidth;
can.height = puckHeight * 2;
const canctx = can.getContext("2d");
canctx.fillStyle = color;
canctx.beginPath();
canctx.moveTo(0, puckHeight * 2);
if (concave_puck) {
canctx.lineTo(0, puckHeight * 0.75);
canctx.bezierCurveTo(puckWidth / 2, puckHeight * (2 + concave_puck) / 3, puckWidth / 2, puckHeight * (2 + concave_puck) / 3, puckWidth, puckHeight * 0.75);
canctx.lineTo(puckWidth, puckHeight * 2);
} else {
canctx.lineTo(0, puckHeight * 1.25);
canctx.bezierCurveTo(0, puckHeight * 0.75, puckWidth, puckHeight * 0.75, puckWidth, puckHeight * 1.25);
canctx.lineTo(puckWidth, puckHeight * 2);
}
canctx.fill();
if (redBorderOffset !== -1) {
canctx.strokeStyle = "#FF0000";
canctx.lineWidth = 4;
canctx.setLineDash(redBorderDash);
canctx.lineDashOffset = redBorderOffset;
canctx.stroke();
}
cachedGraphics[key] = can;
}
ctx.drawImage(cachedGraphics[key], Math.round((0, _game.gameState).puckPosition - puckWidth / 2), (0, _game.gameState).gameZoneHeight - puckHeight * 2 + yOffset);
}
function drawBall(ctx, color, width, x, y, borderColor = "") {
const key = "ball" + color + "_" + width + "_" + borderColor;
const size = Math.round(width);
if (!cachedGraphics[key]) {
const can = document.createElement("canvas");
can.width = size;
can.height = size;
const canctx = can.getContext("2d");
canctx.beginPath();
canctx.arc(size / 2, size / 2, Math.round(size / 2) - 1, 0, 2 * Math.PI);
canctx.fillStyle = color;
canctx.fill();
if (borderColor) {
canctx.lineWidth = 2;
canctx.strokeStyle = borderColor;
canctx.stroke();
}
cachedGraphics[key] = can;
}
ctx.drawImage(cachedGraphics[key], Math.round(x - size / 2), Math.round(y - size / 2));
}
const angles = 32;
function drawCoin(ctx, color, size, x, y, borderColor, rawAngle) {
const angle = (Math.round(rawAngle / Math.PI * 2 * angles) % angles + angles) % angles;
const key = "coin with halo_" + color + "_" + size + "_" + borderColor + "_" + (color === "#ffd300" ? angle : "whatever");
if (!cachedGraphics[key]) {
const can = document.createElement("canvas");
can.width = size;
can.height = size;
const canctx = can.getContext("2d");
// coin
canctx.beginPath();
canctx.arc(size / 2, size / 2, size / 2, 0, 2 * Math.PI);
canctx.fillStyle = color;
canctx.fill();
canctx.strokeStyle = borderColor;
if (borderColor == "#FF0000") {
canctx.lineWidth = 2;
canctx.setLineDash(redBorderDash);
}
if (color === "transparent") canctx.lineWidth = 2;
canctx.stroke();
if (color === "#ffd300") {
// Fill in
canctx.beginPath();
canctx.arc(size / 2, size / 2, size / 2 * 0.6, 0, 2 * Math.PI);
canctx.fillStyle = "rgba(255,255,255,0.5)";
canctx.fill();
canctx.translate(size / 2, size / 2);
canctx.rotate(angle / 16);
canctx.translate(-size / 2, -size / 2);
canctx.globalCompositeOperation = "multiply";
drawText(canctx, "$", color, size - 2, size / 2, size / 2 + 1);
drawText(canctx, "$", color, size - 2, size / 2, size / 2 + 1);
}
cachedGraphics[key] = can;
}
ctx.drawImage(cachedGraphics[key], Math.round(x - size / 2), Math.round(y - size / 2));
}
function drawFuzzyBall(ctx, color, width, x, y) {
width = Math.max(width, 2);
const key = "fuzzy-circle" + color + "_" + width;
if (!color?.startsWith("#")) debugger;
const size = Math.round(width * 3);
if (!size || isNaN(size)) {
debugger;
return;
}
if (!cachedGraphics[key]) {
const can = document.createElement("canvas");
can.width = size;
can.height = size;
const canctx = can.getContext("2d");
const gradient = canctx.createRadialGradient(size / 2, size / 2, 0, size / 2, size / 2, size / 2);
gradient.addColorStop(0, color);
gradient.addColorStop(0.3, color + "88");
gradient.addColorStop(0.6, color + "22");
gradient.addColorStop(1, "transparent");
canctx.fillStyle = gradient;
canctx.fillRect(0, 0, size, size);
cachedGraphics[key] = can;
}
ctx.drawImage(cachedGraphics[key], Math.round(x - size / 2), Math.round(y - size / 2));
}
function drawBrick(gameState, ctx, color, x, y, offset = 0, borderOnly) {
const tlx = Math.ceil(x - gameState.brickWidth / 2);
const tly = Math.ceil(y - gameState.brickWidth / 2);
const brx = Math.ceil(x + gameState.brickWidth / 2) - 1;
const bry = Math.ceil(y + gameState.brickWidth / 2) - 1;
const width = brx - tlx, height = bry - tly;
const key = "brick" + color + "_" + "_" + width + "_" + height + "_" + offset + "_" + borderOnly + "_";
if (!cachedGraphics[key]) {
const can = document.createElement("canvas");
can.width = width;
can.height = height;
const bord = 4;
const cornerRadius = 2;
const canctx = can.getContext("2d");
canctx.fillStyle = color;
canctx.setLineDash(offset !== -1 ? redBorderDash : emptyArray);
canctx.lineDashOffset = offset;
canctx.strokeStyle = offset !== -1 && "#FF000033" || color;
canctx.lineJoin = "round";
canctx.lineWidth = bord;
roundRect(canctx, bord / 2, bord / 2, width - bord, height - bord, cornerRadius);
if (!borderOnly) canctx.fill();
canctx.stroke();
cachedGraphics[key] = can;
}
ctx.drawImage(cachedGraphics[key], tlx, tly, width, height);
// It's not easy to have a 1px gap between bricks without antialiasing
}
function roundRect(ctx, x, y, width, height, radius) {
ctx.beginPath();
ctx.moveTo(x + radius, y);
ctx.lineTo(x + width - radius, y);
ctx.quadraticCurveTo(x + width, y, x + width, y + radius);
ctx.lineTo(x + width, y + height - radius);
ctx.quadraticCurveTo(x + width, y + height, x + width - radius, y + height);
ctx.lineTo(x + radius, y + height);
ctx.quadraticCurveTo(x, y + height, x, y + height - radius);
ctx.lineTo(x, y + radius);
ctx.quadraticCurveTo(x, y, x + radius, y);
ctx.closePath();
}
function drawIMG(ctx, img, size, x, y) {
const key = "svg" + img + "_" + size + "_" + img.complete;
if (!cachedGraphics[key]) {
const can = document.createElement("canvas");
can.width = size;
can.height = size;
const canctx = can.getContext("2d");
const ratio = size / Math.max(img.width, img.height);
const w = img.width * ratio;
const h = img.height * ratio;
canctx.drawImage(img, (size - w) / 2, (size - h) / 2, w, h);
cachedGraphics[key] = can;
}
ctx.drawImage(cachedGraphics[key], Math.round(x - size / 2), Math.round(y - size / 2));
}
function drawText(ctx, text, color, fontSize, x, y, left = false) {
const key = "text" + text + "_" + color + "_" + fontSize + "_" + left;
if (!cachedGraphics[key]) {
const can = document.createElement("canvas");
can.width = fontSize * text.length;
can.height = fontSize;
const canctx = can.getContext("2d");
canctx.fillStyle = color;
canctx.textAlign = left ? "left" : "center";
canctx.textBaseline = "middle";
canctx.font = fontSize + "px monospace";
canctx.fillText(text, left ? 0 : can.width / 2, can.height / 2, can.width);
cachedGraphics[key] = can;
}
ctx.drawImage(cachedGraphics[key], left ? x : Math.round(x - cachedGraphics[key].width / 2), Math.round(y - cachedGraphics[key].height / 2));
}
const scoreDisplay = document.getElementById("score");
const menuLabel = document.getElementById("menuLabel");
const emptyArray = [];
const redBorderDash = [
5,
5
];
function getDashOffset(gameState) {
if ((0, _options.isOptionOn)("basic")) return 0;
return Math.floor(gameState.levelTime % 500 / 500 * 10) % 10;
}
let wakeLock = null, wakeLockPending = false;
function askForWakeLock(gameState) {
if (gameState.startParams.computer_controlled && !wakeLock && !wakeLockPending) {
wakeLockPending = true;
try {
navigator.wakeLock.request("screen").then((lock)=>{
wakeLock = lock;
wakeLockPending = false;
lock.addEventListener("release", ()=>{
// the wake lock has been released
wakeLock = null;
});
});
} catch (e) {
console.warn("askForWakeLock error", e);
}
}
}
},{"./gameStateMutators":"9ZeQl","./game_utils":"cEeac","./i18n/i18n":"eNPRm","./game":"edeGs","./options":"d5NoS","./pure_functions":"6pQh7","@parcel/transformer-js/src/esmodule-helpers.js":"gkKU3"}],"caCAf":[function(require,module,exports,__globalThis) {
var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js");
parcelHelpers.defineInteropFlag(exports);
parcelHelpers.export(exports, "addToTotalPlayTime", ()=>addToTotalPlayTime);
parcelHelpers.export(exports, "gameOver", ()=>gameOver);
parcelHelpers.export(exports, "getCreativeModeWarning", ()=>getCreativeModeWarning);
parcelHelpers.export(exports, "getHistory", ()=>getHistory);
parcelHelpers.export(exports, "getHistograms", ()=>getHistograms);
var _loadGameData = require("./loadGameData");
var _i18N = require("./i18n/i18n");
var _game = require("./game");
var _gameUtils = require("./game_utils");
var _settings = require("./settings");
var _recording = require("./recording");
var _asyncAlert = require("./asyncAlert");
var _upgrades = require("./upgrades");
var _levelEditor = require("./levelEditor");
var _creative = require("./creative");
function addToTotalPlayTime(ms) {
(0, _settings.setSettingValue)("breakout_71_total_play_time", (0, _settings.getSettingValue)("breakout_71_total_play_time", 0) + ms);
}
function gameOver(title, intro) {
if (!(0, _game.gameState).running) return;
if ((0, _game.gameState).isGameOver) return;
(0, _game.gameState).isGameOver = true;
(0, _game.pause)(true);
(0, _settings.askForPersistentStorage)();
(0, _recording.stopRecording)();
addToTotalPlayTime((0, _game.gameState).runStatistics.runTime);
if (typeof (0, _game.gameState).startParams.isEditorTrialRun === "number") {
(0, _levelEditor.editRawLevelList)((0, _game.gameState).startParams.isEditorTrialRun);
(0, _game.restart)({});
return;
}
if ((0, _game.gameState).startParams.isCreativeRun) {
(0, _creative.openCreativeModePerksPicker)();
(0, _game.restart)({});
return;
}
// unlocks
const endTs = (0, _settings.getTotalScore)();
const startTs = endTs - (0, _game.gameState).score;
const unlockedPerks = (0, _upgrades.rawUpgrades).filter((o)=>o.threshold > startTs && o.threshold < endTs);
let unlocksInfo = unlockedPerks.length ? `
<h2>${unlockedPerks.length === 1 ? (0, _i18N.t)("gameOver.unlocked_perk") : (0, _i18N.t)("gameOver.unlocked_perk_plural", {
count: unlockedPerks.length
})}</h2>
${unlockedPerks.map((u)=>`
<div class="upgrade used">
${(0, _loadGameData.icons)["icon:" + u.id]}
<p>
<strong>${u.name}</strong>
${u.help(1)}
</p>
</div>
`).join("\n")}
` : "";
// Avoid the sad sound right as we restart a new games
(0, _game.gameState).combo = 1;
(0, _asyncAlert.asyncAlert)({
allowClose: true,
title,
content: [
getCreativeModeWarning((0, _game.gameState)) || `
<p>${intro}</p>
<p>${(0, _i18N.t)("gameOver.cumulative_total", {
startTs,
endTs
})}</p>
`,
{
icon: (0, _loadGameData.icons)["icon:new_run"],
value: null,
text: (0, _i18N.t)("confirmRestart.yes"),
help: ""
},
`<div id="level-recording-container"></div>`,
unlocksInfo,
getHistograms((0, _game.gameState))
]
}).then(()=>(0, _game.restart)({
levelToAvoid: (0, _gameUtils.currentLevelInfo)((0, _game.gameState)).name
}));
}
function getCreativeModeWarning(gameState) {
if (gameState.creative) return "<p>" + (0, _i18N.t)("gameOver.creative") + "</p>";
return "";
}
let runsHistory = [];
try {
runsHistory = JSON.parse(localStorage.getItem("breakout_71_runs_history") || "[]").sort((a, b)=>b.score - a.score).slice(0, 100);
} catch (e) {}
function getHistory() {
return runsHistory;
}
function getHistograms(gameState) {
if (gameState.creative) return "";
let unlockedLevels = "";
let runStats = "";
try {
const locked = (0, _loadGameData.allLevels).map((l, li)=>({
li,
l,
r: (0, _gameUtils.reasonLevelIsLocked)(li, runsHistory, false)?.text
})).filter((l)=>l.r);
gameState.runStatistics.runTime = Math.round(gameState.runStatistics.runTime);
const perks = {
...gameState.perks
};
for(let id in perks)if (!perks[id]) delete perks[id];
runsHistory.push({
...gameState.runStatistics,
perks,
appVersion: (0, _loadGameData.appVersion)
});
const unlocked = locked.filter(({ li })=>!(0, _gameUtils.reasonLevelIsLocked)(li, runsHistory, true));
if (unlocked.length) unlockedLevels = `
<h2>${unlocked.length === 1 ? (0, _i18N.t)("unlocks.just_unlocked") : (0, _i18N.t)("unlocks.just_unlocked_plural", {
count: unlocked.length
})}</h2>
${unlocked.map(({ l, r })=>`
<div class="upgrade used">
${(0, _loadGameData.icons)[l.name]}
<p>
<strong>${l.name}</strong>
${(0, _gameUtils.describeLevel)(l)}
</p>
</div>
`).join("\n")}
`;
// Generate some histogram
localStorage.setItem("breakout_71_runs_history", JSON.stringify(runsHistory, null, 2));
const makeHistogram = (title, getter, unit)=>{
let values = runsHistory.map((h)=>getter(h) || 0);
let min = Math.min(...values);
let max = Math.max(...values);
// No point
if (min === max) return "";
if (max - min < 10) {
// This is mostly useful for levels
min = Math.max(0, max - 10);
max = Math.max(max, min + 10);
}
// One bin per unique value, max 10
const binsCount = Math.min(values.length, 10);
if (binsCount < 3) return "";
const bins = [];
const binsTotal = [];
for(let i = 0; i < binsCount; i++){
bins.push(0);
binsTotal.push(0);
}
const binSize = (max - min) / bins.length;
const binIndexOf = (v)=>Math.min(bins.length - 1, Math.floor((v - min) / binSize));
values.forEach((v)=>{
if (isNaN(v)) return;
const index = binIndexOf(v);
bins[index]++;
binsTotal[index] += v;
});
if (bins.filter((b)=>b).length < 3) return "";
const maxBin = Math.max(...bins);
const lastValue = values[values.length - 1];
const activeBin = binIndexOf(lastValue);
const bars = bins.map((v, vi)=>{
const style = `height: ${v / maxBin * 80}px`;
return `<span class="${vi === activeBin ? "active" : ""}"><span style="${style}" title="${v} run${v > 1 ? "s" : ""} between ${Math.floor(min + vi * binSize)} and ${Math.floor(min + (vi + 1) * binSize)}${unit}"
><span>${!v && " " || vi == activeBin && lastValue + unit || Math.round(binsTotal[vi] / v) + unit}</span></span></span>`;
}).join("");
return `<h2 class="histogram-title">${title} : <strong>${lastValue}${unit}</strong></h2>
<div class="histogram">${bars}</div>
`;
};
runStats += makeHistogram((0, _i18N.t)("gameOver.stats.total_score"), (r)=>r.score, "");
runStats += makeHistogram((0, _i18N.t)("gameOver.stats.catch_rate"), (r)=>Math.round(r.score / r.coins_spawned * 100), "%");
runStats += makeHistogram((0, _i18N.t)("gameOver.stats.bricks_broken"), (r)=>r.bricks_broken, "");
runStats += makeHistogram((0, _i18N.t)("gameOver.stats.bricks_per_minute"), (r)=>Math.round(r.bricks_broken / r.runTime * 60000), "");
runStats += makeHistogram((0, _i18N.t)("gameOver.stats.hit_rate"), (r)=>Math.round((1 - r.misses / r.puck_bounces) * 100), "%");
runStats += makeHistogram((0, _i18N.t)("gameOver.stats.duration_per_level"), (r)=>Math.round(r.runTime / 1000 / r.levelsPlayed), "s");
runStats += makeHistogram((0, _i18N.t)("gameOver.stats.level_reached"), (r)=>r.levelsPlayed, "");
runStats += makeHistogram((0, _i18N.t)("gameOver.stats.upgrades_applied"), (r)=>r.upgrades_picked, "");
runStats += makeHistogram((0, _i18N.t)("gameOver.stats.balls_lost"), (r)=>r.balls_lost, "");
runStats += makeHistogram((0, _i18N.t)("gameOver.stats.combo_avg"), (r)=>Math.round(r.coins_spawned / r.bricks_broken), "");
runStats += makeHistogram((0, _i18N.t)("gameOver.stats.combo_max"), (r)=>r.max_combo, "");
if (runStats) runStats = `<p>${(0, _i18N.t)("gameOver.stats_intro", {
count: runsHistory.length - 1
})}</p>` + runStats;
} catch (e) {
console.warn(e);
}
return unlockedLevels + runStats;
}
},{"./loadGameData":"l1B4x","./i18n/i18n":"eNPRm","./game":"edeGs","./game_utils":"cEeac","./settings":"5blfu","./recording":"godmD","./asyncAlert":"rSqLY","./upgrades":"1u3Dx","./levelEditor":"cirX1","./creative":"63kYJ","@parcel/transformer-js/src/esmodule-helpers.js":"gkKU3"}],"godmD":[function(require,module,exports,__globalThis) {
var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js");
parcelHelpers.defineInteropFlag(exports);
parcelHelpers.export(exports, "recordOneFrame", ()=>recordOneFrame);
parcelHelpers.export(exports, "drawMainCanvasOnSmallCanvas", ()=>drawMainCanvasOnSmallCanvas);
parcelHelpers.export(exports, "startRecordingGame", ()=>startRecordingGame);
parcelHelpers.export(exports, "pauseRecording", ()=>pauseRecording);
parcelHelpers.export(exports, "resumeRecording", ()=>resumeRecording);
parcelHelpers.export(exports, "stopRecording", ()=>stopRecording);
parcelHelpers.export(exports, "captureFileName", ()=>captureFileName);
var _render = require("./render");
var _gameUtils = require("./game_utils");
var _sounds = require("./sounds");
var _i18N = require("./i18n/i18n");
var _options = require("./options");
let mediaRecorder, captureStream, captureTrack, recordCanvas, recordCanvasCtx;
function recordOneFrame(gameState) {
if (!(0, _options.isOptionOn)("record")) return;
// if (!gameState.running) return;
if (!captureStream) return;
drawMainCanvasOnSmallCanvas(gameState);
if (captureTrack?.requestFrame) captureTrack?.requestFrame();
else if (captureStream?.requestFrame) captureStream.requestFrame();
}
function drawMainCanvasOnSmallCanvas(gameState) {
if (!recordCanvasCtx) return;
recordCanvasCtx.drawImage((0, _render.gameCanvas), gameState.offsetXRoundedDown, 0, gameState.gameZoneWidthRoundedUp, gameState.gameZoneHeight, 0, 0, recordCanvas.width, recordCanvas.height);
// Here we don't use drawText as we don't want to cache a picture for each distinct value of score
recordCanvasCtx.fillStyle = "#FFFFFF";
recordCanvasCtx.textBaseline = "top";
recordCanvasCtx.font = "12px monospace";
recordCanvasCtx.textAlign = "right";
recordCanvasCtx.fillText(gameState.score.toString(), recordCanvas.width - 12, 12);
recordCanvasCtx.textAlign = "left";
recordCanvasCtx.fillText("Level " + (gameState.currentLevel + 1) + "/" + (0, _gameUtils.max_levels)(gameState), 12, 12);
}
function startRecordingGame(gameState) {
if (!(0, _options.isOptionOn)("record")) return;
if (mediaRecorder) return;
if (!recordCanvas) {
// Smaller canvas with fewer details
recordCanvas = document.createElement("canvas");
recordCanvasCtx = recordCanvas.getContext("2d", {
antialias: false,
alpha: false
});
captureStream = recordCanvas.captureStream(0);
captureTrack = captureStream.getVideoTracks()[0];
const track = (0, _sounds.getAudioRecordingTrack)();
if (track) captureStream.addTrack(track.stream.getAudioTracks()[0]);
}
recordCanvas.width = gameState.gameZoneWidthRoundedUp;
recordCanvas.height = gameState.gameZoneHeight;
// drawMainCanvasOnSmallCanvas()
const recordedChunks = [];
const instance = new MediaRecorder(captureStream, {
videoBitsPerSecond: 3500000
});
mediaRecorder = instance;
instance.start();
mediaRecorder.pause();
instance.ondataavailable = function(event) {
recordedChunks.push(event.data);
};
instance.onstop = async function() {
let targetDiv;
let blob = new Blob(recordedChunks, {
type: "video/webm"
});
if (blob.size < 200000) return; // under 0.2MB, probably bugged out or pointlessly short
while(!(targetDiv = document.getElementById("level-recording-container")))await new Promise((r)=>setTimeout(r, 200));
const video = document.createElement("video");
video.autoplay = true;
video.controls = false;
video.disablePictureInPicture = true;
video.disableRemotePlayback = true;
video.width = recordCanvas.width;
video.height = recordCanvas.height;
video.loop = true;
video.muted = true;
video.playsInline = true;
video.src = URL.createObjectURL(blob);
targetDiv.appendChild(video);
const a = document.createElement("a");
a.download = captureFileName("webm");
a.target = "_blank";
a.href = video.src;
a.textContent = (0, _i18N.t)("settings.record_download", {
size: (blob.size / 1000000).toFixed(2)
});
targetDiv.appendChild(a);
};
}
function pauseRecording() {
if (!(0, _options.isOptionOn)("record")) return;
if (mediaRecorder?.state === "recording") mediaRecorder?.pause();
}
function resumeRecording() {
if (!(0, _options.isOptionOn)("record")) return;
if (mediaRecorder?.state === "paused") mediaRecorder.resume();
}
function stopRecording() {
if (!(0, _options.isOptionOn)("record")) return;
if (!mediaRecorder) return;
mediaRecorder?.stop();
mediaRecorder = null;
}
function captureFileName(ext = "webm") {
return "breakout-71-capture-" + new Date().toISOString().replace(/[^0-9\-]+/gi, "-") + "." + ext;
}
},{"./render":"9AS2t","./game_utils":"cEeac","./sounds":"dQKPV","./i18n/i18n":"eNPRm","./options":"d5NoS","@parcel/transformer-js/src/esmodule-helpers.js":"gkKU3"}],"rSqLY":[function(require,module,exports,__globalThis) {
var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js");
parcelHelpers.defineInteropFlag(exports);
parcelHelpers.export(exports, "alertsOpen", ()=>alertsOpen);
parcelHelpers.export(exports, "closeModal", ()=>closeModal);
parcelHelpers.export(exports, "requiredAsyncAlert", ()=>requiredAsyncAlert);
parcelHelpers.export(exports, "asyncAlert", ()=>asyncAlert);
var _i18N = require("./i18n/i18n");
let alertsOpen = 0, closeModal = null;
const popupWrap = document.getElementById("popup");
const closeModaleButton = document.getElementById("close-modale");
closeModaleButton.addEventListener("click", (e)=>{
e.preventDefault();
if (closeModal) closeModal();
});
closeModaleButton.title = (0, _i18N.t)("play.close_modale_window_tooltip");
let lastClickedItemIndex = -1;
function requiredAsyncAlert(p) {
return asyncAlert({
...p,
allowClose: false
});
}
async function asyncAlert({ title, content = [], allowClose = true, className = "" }) {
updateAlertsOpen(1);
return new Promise((resolve)=>{
popupWrap.className = className;
closeModaleButton.style.display = allowClose ? "" : "none";
const popup = document.createElement("div");
let closed = false;
function closeWithResult(value) {
if (closed) return;
closed = true;
Array.prototype.forEach.call(popup.querySelectorAll("button:not([disabled])"), (b)=>b.disabled = true);
document.body.style.minHeight = document.body.scrollHeight + "px";
setTimeout(()=>document.body.style.minHeight = "", 0);
popup.remove();
resolve(value);
}
if (allowClose) closeModal = ()=>{
closeWithResult(undefined);
};
else closeModal = null;
if (title) {
const h1 = document.createElement("h1");
h1.innerHTML = title;
popup.appendChild(h1);
}
content?.filter((i)=>i).forEach((entry, index)=>{
if (!entry) return;
if (typeof entry == "string") {
const p = document.createElement("div");
p.innerHTML = entry;
popup.appendChild(p);
return;
}
let addto;
if (popup.lastChild?.nodeName == "SECTION") addto = popup.lastChild;
else {
addto = document.createElement("section");
addto.className = "actions";
popup.appendChild(addto);
}
const { text, value, help, disabled, className = "", icon = "", tooltip } = entry;
const button = document.createElement("button");
button.innerHTML = `
${icon}
<div>
<strong>${text}</strong>
<em>${help || ""}</em>
</div>`;
if (tooltip) button.setAttribute("data-tooltip", tooltip);
if (disabled) button.setAttribute("disabled", "disabled");
else button.addEventListener("click", (e)=>{
e.preventDefault();
e.stopPropagation();
closeWithResult(value);
// Focus "same" button if it's still there
lastClickedItemIndex = index;
});
button.className = className + (lastClickedItemIndex === index ? " needs-focus" : "");
addto.appendChild(button);
});
popup.addEventListener("click", (e)=>{
const target = e.target;
if (target.getAttribute("data-resolve-to")) closeWithResult(target.getAttribute("data-resolve-to"));
}, true);
popupWrap.appendChild(popup);
popupWrap.querySelector(`section.actions > button.needs-focus`)?.focus();
lastClickedItemIndex = -1;
}).then((v)=>{
updateAlertsOpen(-1);
closeModal = null;
return v;
}, ()=>{
closeModal = null;
updateAlertsOpen(-1);
});
}
function updateAlertsOpen(delta) {
alertsOpen += delta;
if (alertsOpen > 1) alert("Two alerts where opened at once");
document.body.classList[alertsOpen ? "add" : "remove"]("has-alert-open");
}
},{"./i18n/i18n":"eNPRm","@parcel/transformer-js/src/esmodule-helpers.js":"gkKU3"}],"cirX1":[function(require,module,exports,__globalThis) {
var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js");
parcelHelpers.defineInteropFlag(exports);
parcelHelpers.export(exports, "levelEditorMenuEntry", ()=>levelEditorMenuEntry);
parcelHelpers.export(exports, "editRawLevelList", ()=>editRawLevelList);
var _loadGameData = require("./loadGameData");
var _i18N = require("./i18n/i18n");
var _settings = require("./settings");
var _asyncAlert = require("./asyncAlert");
var _levelIcon = require("./levelIcon");
var _paletteJson = require("./data/palette.json");
var _paletteJsonDefault = parcelHelpers.interopDefault(_paletteJson);
var _game = require("./game");
var _gameUtils = require("./game_utils");
const palette = (0, _paletteJsonDefault.default);
const MAX_LEVEL_SIZE = 21;
const MIN_LEVEL_SIZE = 2;
function levelEditorMenuEntry() {
const min = 10000;
const disabled = (0, _settings.getTotalScore)() < min;
return {
icon: (0, _loadGameData.icons)["icon:editor"],
text: (0, _i18N.t)("editor.title"),
disabled,
help: disabled ? (0, _i18N.t)("editor.locked", {
min
}) : (0, _i18N.t)("editor.help"),
async value () {
openLevelEditorLevelsList().then();
}
};
}
async function openLevelEditorLevelsList() {
const rawList = (0, _settings.getSettingValue)("custom_levels", []);
const customLevels = rawList.map((0, _loadGameData.transformRawLevel));
let choice = await (0, _asyncAlert.asyncAlert)({
title: (0, _i18N.t)("editor.title"),
content: [
...customLevels.map((l, li)=>({
text: l.name,
icon: (0, _levelIcon.levelIconHTML)(l.bricks, l.size, l.color),
value () {
editRawLevelList(li);
},
help: l.credit || (0, _gameUtils.describeLevel)(l)
})),
{
text: (0, _i18N.t)("editor.new_level"),
icon: (0, _loadGameData.icons)["icon:editor"],
value () {
rawList.push({
color: "",
size: 6,
bricks: "____________________________________",
name: "custom level" + (rawList.length + 1),
credit: ""
});
(0, _settings.setSettingValue)("custom_levels", rawList);
editRawLevelList(rawList.length - 1);
}
},
{
text: (0, _i18N.t)("editor.import"),
help: (0, _i18N.t)("editor.import_instruction"),
value () {
const code = prompt((0, _i18N.t)("editor.import_instruction"))?.trim();
if (code) {
let [name, credit] = code.match(/\[([^\]]+)]/gi);
let bricks = code.split(name)[1].split(credit)[0].replace(/\s/gi, "");
name = name.slice(1, -1);
credit = credit.slice(1, -1);
name ||= "Imported on " + new Date().toISOString().slice(0, 10);
credit ||= "";
const size = Math.sqrt(bricks.length);
if (Math.floor(size) === size && size >= MIN_LEVEL_SIZE && size <= MAX_LEVEL_SIZE) {
rawList.push({
color: automaticBackgroundColor(bricks.split("")),
size,
bricks,
name,
credit
});
(0, _settings.setSettingValue)("custom_levels", rawList);
}
}
openLevelEditorLevelsList();
}
}
]
});
if (typeof choice == "function") choice();
}
async function editRawLevelList(nth, color = "W") {
let rawList = (0, _settings.getSettingValue)("custom_levels", []);
const level = rawList[nth];
const bricks = level.bricks.split("");
let grid = "";
for(let y = 0; y < level.size; y++){
grid += '<div style="background: ' + (level.color || "black") + ';">';
for(let x = 0; x < level.size; x++){
const c = bricks[y * level.size + x];
grid += `<span data-resolve-to="paint_brick:${x}:${y}" style="background: ${palette[c]}">${c == "B" ? "\uD83D\uDCA3" : ""}</span>`;
}
grid += "</div>";
}
const levelColors = new Set(bricks);
levelColors.delete("_");
levelColors.delete("B");
let colorList = '<div class="palette">' + Object.entries(palette).filter(([key, value])=>key !== "_").filter(([key, value])=>levelColors.size < 5 || levelColors.has(key) || key === "B").map(([key, value])=>`<span data-resolve-to="set_color:${key}" data-selected="${key == color}" style="background: ${value}">${key == "B" ? "\uD83D\uDCA3" : ""}</span>`).join("") + "</div>";
const clicked = await (0, _asyncAlert.asyncAlert)({
title: (0, _i18N.t)("editor.editing.title", {
name: level.name
}),
content: [
(0, _i18N.t)("editor.editing.color"),
colorList,
(0, _i18N.t)("editor.editing.help"),
`<div class="gridEdit" style="--grid-size:${level.size};">${grid}</div>`,
{
icon: (0, _loadGameData.icons)["icon:new_run"],
text: (0, _i18N.t)("editor.editing.play"),
value: "play"
},
{
text: (0, _i18N.t)("editor.editing.rename"),
value: "rename",
help: level.name
},
{
text: (0, _i18N.t)("editor.editing.credit"),
value: "credit",
help: level.credit
},
{
text: (0, _i18N.t)("editor.editing.delete"),
value: "delete"
},
{
text: (0, _i18N.t)("editor.editing.copy"),
value: "copy",
help: (0, _i18N.t)("editor.editing.copy_help"),
disabled: !level.name || !level.credit || bricks.filter((b)=>b !== "_").length < 6
},
{
text: (0, _i18N.t)("editor.editing.bigger"),
value: "size:+1",
disabled: level.size >= MAX_LEVEL_SIZE
},
{
text: (0, _i18N.t)("editor.editing.smaller"),
value: "size:-1",
disabled: level.size <= MIN_LEVEL_SIZE
},
{
text: (0, _i18N.t)("editor.editing.left"),
value: "move:-1:0"
},
{
text: (0, _i18N.t)("editor.editing.right"),
value: "move:1:0"
},
{
text: (0, _i18N.t)("editor.editing.up"),
value: "move:0:-1"
},
{
text: (0, _i18N.t)("editor.editing.down"),
value: "move:0:1"
}
]
});
if (!clicked) return;
if (typeof clicked === "string") {
const [action, a, b] = clicked.split(":");
if (action == "paint_brick") {
const x = parseInt(a), y = parseInt(b);
bricks[y * level.size + x] = bricks[y * level.size + x] === color ? "_" : color;
level.bricks = bricks.join("");
}
if (action == "set_color") color = a;
if (action == "size") {
const newSize = level.size + parseInt(a);
const newBricks = [];
for(let y = 0; y < newSize; y++)for(let x = 0; x < newSize; x++)newBricks.push(x < level.size && y < level.size && bricks[y * level.size + x] || "_");
level.size = newSize;
level.bricks = newBricks.join("");
}
if (action == "move") {
const dx = parseInt(a), dy = parseInt(b);
const newBricks = [];
for(let y = 0; y < level.size; y++)for(let x = 0; x < level.size; x++){
const tx = x - dx;
const ty = y - dy;
if (tx < 0 || tx >= level.size || ty < 0 || ty >= level.size) newBricks.push("_");
else newBricks.push(bricks[ty * level.size + tx]);
}
level.bricks = newBricks.join("");
}
if (action === "play") {
(0, _game.restart)({
level: (0, _loadGameData.transformRawLevel)(level),
isEditorTrialRun: nth,
perks: {
base_combo: 7
}
});
return;
}
if (action === "copy") {
let text = "```\n[" + level.name?.replace(/\[|\]/gi, " ") + "]";
bricks.forEach((b, bi)=>{
if (!(bi % level.size)) text += "\n";
text += b;
});
text += "\n[" + (level.credit?.replace(/\[|\]/gi, " ") || "Missing credits!") + "]\n```";
navigator.clipboard.writeText(text);
// return
}
if (action === "rename") {
const name = prompt((0, _i18N.t)("editor.editing.rename_prompt"), level.name);
if (name) level.name = name;
}
if (action === "credit") {
const credit = prompt((0, _i18N.t)("editor.editing.credit_prompt"), level.credit || "");
if (credit !== "null") level.credit = credit || "";
}
if (action === "delete") {
rawList = rawList.filter((l, li)=>li !== nth);
(0, _settings.setSettingValue)("custom_levels", rawList);
openLevelEditorLevelsList();
return;
}
}
level.color = automaticBackgroundColor(bricks);
(0, _settings.setSettingValue)("custom_levels", rawList);
editRawLevelList(nth, color);
}
function automaticBackgroundColor(bricks) {
return bricks.filter((b)=>b === "g").length > bricks.filter((b)=>b !== "_").length * 0.05 ? "#115988" : "";
}
},{"./loadGameData":"l1B4x","./i18n/i18n":"eNPRm","./settings":"5blfu","./asyncAlert":"rSqLY","./levelIcon":"6rQoT","./data/palette.json":"ktRBU","./game":"edeGs","./game_utils":"cEeac","@parcel/transformer-js/src/esmodule-helpers.js":"gkKU3"}],"63kYJ":[function(require,module,exports,__globalThis) {
var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js");
parcelHelpers.defineInteropFlag(exports);
parcelHelpers.export(exports, "creativeMode", ()=>creativeMode);
parcelHelpers.export(exports, "openCreativeModePerksPicker", ()=>openCreativeModePerksPicker);
var _loadGameData = require("./loadGameData");
var _i18N = require("./i18n/i18n");
var _settings = require("./settings");
var _game = require("./game");
var _asyncAlert = require("./asyncAlert");
var _gameUtils = require("./game_utils");
var _gameOver = require("./gameOver");
var _upgrades = require("./upgrades");
var _levelIcon = require("./levelIcon");
function creativeMode(gameState) {
return {
icon: (0, _loadGameData.icons)["icon:creative"],
text: (0, _i18N.t)("lab.menu_entry"),
help: (0, _settings.getTotalScore)() < (0, _game.creativeModeThreshold) && (0, _i18N.t)("lab.unlocks_at", {
score: (0, _game.creativeModeThreshold)
}) || (0, _i18N.t)("lab.help"),
disabled: (0, _settings.getTotalScore)() < (0, _game.creativeModeThreshold),
async value () {
openCreativeModePerksPicker();
}
};
}
async function openCreativeModePerksPicker() {
let creativeModePerks = (0, _settings.getSettingValue)("creativeModePerks", {}), choice;
const customLevels = (0, _settings.getSettingValue)("custom_levels", []).map((0, _loadGameData.transformRawLevel));
while(choice = await (0, _asyncAlert.asyncAlert)({
title: (0, _i18N.t)("lab.menu_entry"),
className: "actionsAsGrid",
content: [
(0, _i18N.t)("lab.instructions"),
{
value: "reset",
text: (0, _i18N.t)("lab.reset"),
disabled: !(0, _gameUtils.sumOfValues)(creativeModePerks)
},
...(0, _loadGameData.upgrades).filter((u)=>!(0, _upgrades.noCreative).includes(u.id)).map((u)=>({
icon: u.icon,
text: u.name,
help: (creativeModePerks[u.id] || 0) + "/" + (u.max + (creativeModePerks.limitless || 0)),
value: u,
className: creativeModePerks[u.id] ? "sandbox highlight" : "sandbox ",
tooltip: u.help(creativeModePerks[u.id] || 1)
})),
(0, _i18N.t)("lab.select_level"),
...(0, _loadGameData.allLevels).map((l, li)=>{
const problem = (0, _gameUtils.reasonLevelIsLocked)(li, (0, _gameOver.getHistory)(), true)?.text || "";
return {
icon: (0, _loadGameData.icons)[l.name],
text: l.name,
value: l,
disabled: !!problem,
tooltip: problem || (0, _gameUtils.describeLevel)(l),
className: (0, _settings.getSettingValue)("creativeModeLevel", "") === l.name ? "highlight" : ""
};
}),
...customLevels.map((l)=>({
icon: (0, _levelIcon.levelIconHTML)(l.bricks, l.size, l.color),
text: l.name,
value: l,
disabled: !l.bricks.filter((b)=>b !== "_").length,
tooltip: (0, _gameUtils.describeLevel)(l)
}))
]
})){
if (choice === "reset") (0, _loadGameData.upgrades).forEach((u)=>{
creativeModePerks[u.id] = 0;
});
else if ("bricks" in choice) {
(0, _settings.setSettingValue)("creativeModePerks", creativeModePerks);
(0, _settings.setSettingValue)("creativeModeLevel", choice.name);
if (await (0, _game.confirmRestart)((0, _game.gameState))) (0, _game.restart)({
perks: creativeModePerks,
level: choice,
isCreativeRun: true
});
return;
} else if (choice) creativeModePerks[choice.id] = ((creativeModePerks[choice.id] || 0) + 1) % (choice.max + 1 + (creativeModePerks.limitless || 0));
else return;
}
}
},{"./loadGameData":"l1B4x","./i18n/i18n":"eNPRm","./settings":"5blfu","./game":"edeGs","./asyncAlert":"rSqLY","./game_utils":"cEeac","./gameOver":"caCAf","./upgrades":"1u3Dx","./levelIcon":"6rQoT","@parcel/transformer-js/src/esmodule-helpers.js":"gkKU3"}],"ka4dG":[function(require,module,exports,__globalThis) {
var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js");
parcelHelpers.defineInteropFlag(exports);
parcelHelpers.export(exports, "addToTotalScore", ()=>addToTotalScore);
var _loadGameData = require("./loadGameData");
var _gameStateMutators = require("./gameStateMutators");
var _toast = require("./toast");
var _i18N = require("./i18n/i18n");
var _settings = require("./settings");
function addToTotalScore(gameState, points) {
if (gameState.creative) return;
const pastScore = (0, _settings.getTotalScore)();
const newScore = pastScore + points;
(0, _settings.setSettingValue)("breakout_71_total_score", newScore);
// Check unlocked upgrades
(0, _loadGameData.upgrades).forEach((u)=>{
if (u.threshold > pastScore && u.threshold <= newScore) {
(0, _gameStateMutators.schedulGameSound)(gameState, "colorChange", 0, 1);
(0, _toast.toast)((0, _loadGameData.icons)["icon:" + u.id] + "<strong>" + (0, _i18N.t)("gameOver.unlocked_perk") + "</strong>");
}
});
}
},{"./loadGameData":"l1B4x","./gameStateMutators":"9ZeQl","./toast":"nAuvo","./i18n/i18n":"eNPRm","./settings":"5blfu","@parcel/transformer-js/src/esmodule-helpers.js":"gkKU3"}],"aQN6X":[function(require,module,exports,__globalThis) {
var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js");
parcelHelpers.defineInteropFlag(exports);
parcelHelpers.export(exports, "getRunLevels", ()=>getRunLevels);
parcelHelpers.export(exports, "newGameState", ()=>newGameState);
var _loadGameData = require("./loadGameData");
var _gameUtils = require("./game_utils");
var _gameStateMutators = require("./gameStateMutators");
var _options = require("./options");
var _gameOver = require("./gameOver");
var _settings = require("./settings");
var _startingPerks = require("./startingPerks");
function getRunLevels(params, randomGift) {
const unlockedBefore = new Set((0, _settings.getSettingValue)("breakout_71_unlocked_levels", []));
const history = (0, _gameOver.getHistory)();
const unlocked = (0, _loadGameData.allLevels).filter((l, li)=>unlockedBefore.has(l.name) || !(0, _gameUtils.reasonLevelIsLocked)(li, history, false));
const firstLevel = params?.level ? [
params.level
] : (0, _loadGameData.allLevelsAndIcons).filter((l)=>l.name == "icon:" + randomGift);
const restInRandomOrder = unlocked.filter((l)=>l.name !== params?.level?.name).filter((l)=>l.name !== params?.levelToAvoid).sort(()=>Math.random() - 0.5);
return firstLevel.concat(restInRandomOrder.slice(0, 10).sort((a, b)=>a.sortKey - b.sortKey)).concat(restInRandomOrder.slice(10));
}
function newGameState(params) {
const highScore = (0, _gameUtils.getHighScore)();
const perks = {
...(0, _gameUtils.makeEmptyPerksMap)((0, _loadGameData.upgrades)),
...params?.perks || {}
};
let randomGift = undefined;
if (!(0, _gameUtils.sumOfValues)(perks)) {
let giftable = (0, _loadGameData.upgrades).filter((u)=>(0, _startingPerks.isStartingPerk)(u));
if (!giftable.length) giftable = (0, _loadGameData.upgrades).filter((u)=>!(0, _startingPerks.isBlackListedForStart)(u));
randomGift = (0, _options.isOptionOn)("easy") && "slow_down" || giftable[Math.floor(Math.random() * giftable.length)].id;
perks[randomGift] = 1;
}
const runLevels = getRunLevels(params, randomGift);
const gameState = {
startParams: params,
runLevels,
level: runLevels[0],
currentLevel: 0,
upgradesOfferedFor: -1,
perks,
puckWidth: 200,
baseSpeed: 12,
combo: 1,
lastCombo: 1,
gridSize: 12,
running: false,
isGameOver: false,
ballStickToPuck: true,
puckPosition: 400,
lastPuckPosition: 400,
lastPuckMove: 0,
pauseTimeout: null,
canvasWidth: 0,
canvasHeight: 0,
offsetX: 0,
offsetXRoundedDown: 0,
gameZoneWidth: 0,
gameZoneWidthRoundedUp: 0,
gameZoneHeight: 0,
brickWidth: 0,
score: 0,
lastScoreIncrease: -1000,
lastExplosion: -1000,
lastBrickBroken: 0,
highScore,
balls: [],
ballsColor: "#FFFFFF",
bricks: [],
brickHP: [],
lights: {
indexMin: 0,
total: 0,
list: []
},
particles: {
indexMin: 0,
total: 0,
list: []
},
texts: {
indexMin: 0,
total: 0,
list: []
},
coins: {
indexMin: 0,
total: 0,
list: []
},
respawns: {
indexMin: 0,
total: 0,
list: []
},
levelStartScore: 0,
levelMisses: 0,
levelSpawnedCoins: 0,
puckColor: "#FFFFFF",
ballSize: 20,
coinSize: 14,
puckHeight: 20,
pauseUsesDuringRun: 0,
keyboardPuckSpeed: 0,
lastTick: performance.now(),
lastTickDown: 0,
runStatistics: {
started: Date.now(),
levelsPlayed: 0,
runTime: 0,
coins_spawned: 0,
score: 0,
bricks_broken: 0,
misses: 0,
balls_lost: 0,
puck_bounces: 0,
wall_bounces: 0,
upgrades_picked: 1,
max_combo: 1
},
lastOffered: {},
levelTime: 0,
winAt: 0,
levelWallBounces: 0,
needsRender: true,
autoCleanUses: 0,
...(0, _gameUtils.defaultSounds)(),
rerolls: 0,
creative: params?.computer_controlled || (0, _gameUtils.sumOfValues)(params.perks) > 1 || params.level && !params.level.name.startsWith("icon:")
};
(0, _gameStateMutators.resetBalls)(gameState);
for (let perk of (0, _loadGameData.upgrades))if (perks[perk.id]) (0, _gameStateMutators.dontOfferTooSoon)(gameState, perk.id);
return gameState;
}
},{"./loadGameData":"l1B4x","./game_utils":"cEeac","./gameStateMutators":"9ZeQl","./options":"d5NoS","./gameOver":"caCAf","./settings":"5blfu","./startingPerks":"lv30m","@parcel/transformer-js/src/esmodule-helpers.js":"gkKU3"}],"lv30m":[function(require,module,exports,__globalThis) {
var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js");
parcelHelpers.defineInteropFlag(exports);
parcelHelpers.export(exports, "startingPerkMenuButton", ()=>startingPerkMenuButton);
parcelHelpers.export(exports, "isBlackListedForStart", ()=>isBlackListedForStart);
parcelHelpers.export(exports, "isStartingPerk", ()=>isStartingPerk);
parcelHelpers.export(exports, "openStartingPerksEditor", ()=>openStartingPerksEditor);
var _asyncAlert = require("./asyncAlert");
var _i18N = require("./i18n/i18n");
var _loadGameData = require("./loadGameData");
var _settings = require("./settings");
var _options = require("./options");
var _upgrades = require("./upgrades");
function startingPerkMenuButton() {
return {
disabled: (0, _options.isOptionOn)("easy"),
icon: (0, _loadGameData.icons)["icon:starting_perks"],
text: (0, _i18N.t)("starting_perks.title"),
help: (0, _i18N.t)("starting_perks.help"),
async value () {
await openStartingPerksEditor();
}
};
}
function isBlackListedForStart(u) {
return !!((0, _upgrades.notStartingPerk).includes(u.id) || u.requires || u.threshold > (0, _settings.getTotalScore)());
}
function isStartingPerk(u) {
return !isBlackListedForStart(u) && (0, _settings.getSettingValue)("start_with_" + u.id, u.gift);
}
async function openStartingPerksEditor() {
const avaliable = (0, _loadGameData.upgrades).filter((u)=>!isBlackListedForStart(u));
const buttons = avaliable.map((u)=>{
const checked = isStartingPerk(u);
return {
icon: u.icon,
text: u.name,
tooltip: u.help(1),
value: [
u
],
checked
};
});
const checkedList = buttons.filter((b)=>b.checked);
const perks = await (0, _asyncAlert.asyncAlert)({
title: (0, _i18N.t)("starting_perks.title"),
className: "actionsAsGrid",
content: [
checkedList.length ? (0, _i18N.t)("starting_perks.checked") : (0, _i18N.t)("starting_perks.random"),
...checkedList,
(0, _i18N.t)("starting_perks.unchecked"),
...buttons.filter((b)=>!b.checked)
]
});
if (perks) {
perks?.forEach((perk)=>{
(0, _settings.setSettingValue)("start_with_" + perk.id, !isStartingPerk(perk));
});
openStartingPerksEditor();
}
}
},{"./asyncAlert":"rSqLY","./i18n/i18n":"eNPRm","./loadGameData":"l1B4x","./settings":"5blfu","./options":"d5NoS","./upgrades":"1u3Dx","@parcel/transformer-js/src/esmodule-helpers.js":"gkKU3"}],"bqkdF":[function(require,module,exports,__globalThis) {
var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js");
parcelHelpers.defineInteropFlag(exports);
parcelHelpers.export(exports, "helpMenuEntry", ()=>helpMenuEntry);
var _loadGameData = require("./loadGameData");
var _i18N = require("./i18n/i18n");
var _asyncAlert = require("./asyncAlert");
var _pureFunctions = require("./pure_functions");
function helpMenuEntry() {
return {
icon: (0, _loadGameData.icons)["icon:help"],
text: (0, _i18N.t)("help.title"),
help: (0, _i18N.t)("help.help"),
async value () {
await (0, _asyncAlert.asyncAlert)({
title: (0, _i18N.t)("help.title"),
allowClose: true,
content: [
(0, _pureFunctions.miniMarkDown)((0, _i18N.t)("help.content", {
catchRateBest: (0, _pureFunctions.catchRateBest),
catchRateGood: (0, _pureFunctions.catchRateGood),
levelTimeBest: (0, _pureFunctions.levelTimeBest),
levelTimeGood: (0, _pureFunctions.levelTimeGood),
missesBest: (0, _pureFunctions.missesBest),
missesGood: (0, _pureFunctions.missesGood),
wallBouncedBest: (0, _pureFunctions.wallBouncedBest),
wallBouncedGood: (0, _pureFunctions.wallBouncedGood)
})),
(0, _pureFunctions.miniMarkDown)((0, _i18N.t)("help.upgrades")),
...(0, _loadGameData.upgrades).map((u)=>`
<div class="upgrade used">
${u.icon}
<p>
<strong>${u.name}</strong><br/>
${u.help(1)}
</p>
</div>
${(0, _pureFunctions.miniMarkDown)(u.fullHelp)}
`),
"<h2>" + (0, _i18N.t)("help.levels") + "</h2>",
...(0, _loadGameData.allLevels).filter((l)=>l.credit?.trim()).map((l)=>`
<div class="upgrade used">
${(0, _loadGameData.icons)[l.name]}
<div>
<p>
<strong>${l.name}</strong>
</p>
${(0, _pureFunctions.miniMarkDown)(l.credit || "")}
</div>
</div>`)
]
});
}
};
}
},{"./loadGameData":"l1B4x","./i18n/i18n":"eNPRm","./asyncAlert":"rSqLY","./pure_functions":"6pQh7","@parcel/transformer-js/src/esmodule-helpers.js":"gkKU3"}],"3RWxb":[function(require,module,exports,__globalThis) {
var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js");
parcelHelpers.defineInteropFlag(exports);
parcelHelpers.export(exports, "setupTooltips", ()=>setupTooltips);
var _options = require("./options");
function setupTooltips() {
const tooltip = document.getElementById("tooltip");
if ((0, _options.isOptionOn)("mobile-mode")) {
tooltip.style.display = "none";
return;
}
function updateTooltipPosition(e) {
tooltip.style.transform = `translate(${e.clientX}px,${e.clientY}px) translate(${e.clientX > window.innerWidth / 2 ? "-100%" : "0"},${e.clientY > window.innerHeight * 2 / 3 ? "-100%" : "20px"})`;
}
function closeToolTip() {
tooltip.style.display = "none";
hovering = null;
}
let hovering = null;
document.body.addEventListener("mouseenter", (e)=>{
let parent = e.target;
while(parent && !parent.hasAttribute("data-tooltip"))parent = parent.parentElement;
if (parent?.getAttribute("data-tooltip")?.trim()) {
hovering = parent;
tooltip.innerHTML = hovering.getAttribute("data-tooltip") || "";
tooltip.style.display = "";
updateTooltipPosition(e);
} else closeToolTip();
}, true);
setInterval(()=>{
if (hovering) {
if (!document.body.contains(hovering)) closeToolTip();
}
}, 200);
document.body.addEventListener("mousemove", (e)=>{
if (!tooltip.style.display) updateTooltipPosition(e);
}, true);
document.body.addEventListener("mouseleave", (e)=>{
closeToolTip();
}, true);
}
},{"./options":"d5NoS","@parcel/transformer-js/src/esmodule-helpers.js":"gkKU3"}],"a9qdY":[function(require,module,exports,__globalThis) {
var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js");
var _versionJson = require("./data/version.json");
var _versionJsonDefault = parcelHelpers.interopDefault(_versionJson);
var _generateSaveFileContent = require("./generateSaveFileContent");
var _gameUtils = require("./game_utils");
var _loadGameData = require("./loadGameData");
// The page will be reloaded if any migrations were run
let migrationsRun = 0;
function migrate(name, cb) {
if (!localStorage.getItem(name)) try {
cb();
console.debug("Ran migration : " + name);
localStorage.setItem(name, "" + Date.now());
migrationsRun++;
} catch (e) {
console.warn("Migration " + name + " failed : ", e);
}
}
function afterMigration() {
// Avoid a boot loop by setting the hash before reloading
// We can't set the query string as it is used for other things
if (migrationsRun && !window.location.hash) {
window.location.hash = "#reloadAfterMigration";
window.location.reload();
}
if (!migrationsRun) window.location.hash = "";
}
migrate("save_data_before_upgrade_to_" + (0, _versionJsonDefault.default), ()=>{
localStorage.setItem("recovery_data", JSON.stringify((0, _generateSaveFileContent.generateSaveFileContent)()));
});
migrate("migrate_high_scores", ()=>{
const old = localStorage.getItem("breakout-3-hs");
if (old) {
localStorage.setItem("breakout-3-hs-short", old);
localStorage.removeItem("breakout-3-hs");
}
});
migrate("recover_high_scores", ()=>{
let runsHistory = JSON.parse(localStorage.getItem("breakout_71_runs_history") || "[]");
runsHistory.forEach((r)=>{
const currentHS = parseInt(localStorage.getItem("breakout-3-hs-" + (r.mode || "short")) || "0");
if (r.score > currentHS) localStorage.setItem("breakout-3-hs-" + (r.mode || "short"), "" + r.score);
});
});
migrate("remove_long_and_creative_mode_data", ()=>{
let runsHistory = JSON.parse(localStorage.getItem("breakout_71_runs_history") || "[]");
let cleaned = runsHistory.filter((r)=>{
if (!r.perks) return false;
if ("mode" in r) {
if (r.mode !== "short") return false;
}
return true;
});
if (cleaned.length !== runsHistory.length) localStorage.setItem("breakout_71_runs_history", JSON.stringify(cleaned));
});
migrate("compact_runs_data_again", ()=>{
let runsHistory = JSON.parse(localStorage.getItem("breakout_71_runs_history") || "[]");
runsHistory = runsHistory.filter((r)=>{
if (!r.perks) return false;
if ("mode" in r) {
if (r.mode !== "short") return false;
delete r.mode;
}
return true;
});
runsHistory.forEach((r)=>{
r.runTime = Math.round(r.runTime);
if (r.perks) {
for(let key in r.perks)if (!r.perks[key]) delete r.perks[key];
}
if ("best_level_score" in r) delete r.best_level_score;
if ("worst_level_score" in r) delete r.worst_level_score;
});
localStorage.setItem("breakout_71_runs_history", JSON.stringify(runsHistory));
});
migrate("set_breakout_71_unlocked_levels" + (0, _versionJsonDefault.default), ()=>{
// We want to lock any level unlocked by an app upgrade too
let runsHistory = JSON.parse(localStorage.getItem("breakout_71_runs_history") || "[]");
let breakout_71_unlocked_levels = JSON.parse(localStorage.getItem("breakout_71_unlocked_levels") || "[]");
(0, _loadGameData.allLevels).filter((l, li)=>!(0, _gameUtils.reasonLevelIsLocked)(li, runsHistory, false)).forEach((l)=>{
if (!breakout_71_unlocked_levels.includes(l.name)) breakout_71_unlocked_levels.push(l.name);
});
localStorage.setItem("breakout_71_unlocked_levels", JSON.stringify(breakout_71_unlocked_levels));
});
afterMigration();
},{"./data/version.json":"iyP6E","./generateSaveFileContent":"iEcoB","./game_utils":"cEeac","./loadGameData":"l1B4x","@parcel/transformer-js/src/esmodule-helpers.js":"gkKU3"}],"iEcoB":[function(require,module,exports,__globalThis) {
var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js");
parcelHelpers.defineInteropFlag(exports);
parcelHelpers.export(exports, "generateSaveFileContent", ()=>generateSaveFileContent);
function generateSaveFileContent() {
const localStorageContent = {};
for(let i = 0; i < localStorage.length; i++){
const key = localStorage.key(i);
// Avoid including recovery info in the recovery info
if ([
"recovery_data"
].includes(key)) continue;
try {
const value = localStorage.getItem(key);
localStorageContent[key] = JSON.parse(value);
} catch (e) {}
}
return localStorageContent;
}
},{"@parcel/transformer-js/src/esmodule-helpers.js":"gkKU3"}],"b80Ki":[function(require,module,exports,__globalThis) {
var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js");
parcelHelpers.defineInteropFlag(exports);
parcelHelpers.export(exports, "runHistoryViewerMenuEntry", ()=>runHistoryViewerMenuEntry);
var _gameOver = require("./gameOver");
var _loadGameData = require("./loadGameData");
var _i18N = require("./i18n/i18n");
var _asyncAlert = require("./asyncAlert");
var _upgrades = require("./upgrades");
function runHistoryViewerMenuEntry() {
const history = (0, _gameOver.getHistory)();
return {
icon: (0, _loadGameData.icons)["icon:history"],
text: (0, _i18N.t)("history.title"),
disabled: history.length < 10,
help: history.length < 10 ? (0, _i18N.t)("history.locked") : (0, _i18N.t)("history.help", {
count: history.length
}),
async value () {
let sort = 0;
let sortDir = -1;
let columns = [
{
label: (0, _i18N.t)("history.columns.started"),
field: (r)=>r.started,
render (v) {
return new Date(v).toISOString().slice(0, 10);
}
},
{
label: (0, _i18N.t)("history.columns.score"),
field: (r)=>r.score
},
...(0, _upgrades.rawUpgrades).map((u)=>({
label: (0, _loadGameData.icons)["icon:" + u.id],
tooltip: u.name,
field: (r)=>r.perks?.[u.id] || 0,
render (v) {
if (!v) return "-";
return v;
}
}))
];
while(true){
const header = columns.map((c, ci)=>`<th data-tooltip="${c.tooltip || ""}" data-resolve-to="sort:${ci}">${c.label}</th>`).join("");
const toString = (v)=>v.toString();
const tbody = history.sort((a, b)=>sortDir * (columns[sort].field(a) - columns[sort].field(b))).map((h)=>"<tr>" + columns.map((c)=>{
const value = c.field(h) ?? 0;
const render = c.render || toString;
return "<td>" + render(value) + "</td>";
}).join("") + "</tr>").join("");
const result = await (0, _asyncAlert.asyncAlert)({
title: (0, _i18N.t)("history.title"),
className: "history",
content: [
`
<table>
<thead><tr>${header}</tr></thead>
<tbody>${tbody}</tbody>
</table>
`
]
});
if (!result) return;
if (result.startsWith("sort:")) {
const newSort = parseInt(result.split(":")[1]);
if (newSort == sort) sortDir *= -1;
else {
sortDir = -1;
sort = newSort;
}
}
}
}
};
}
},{"./gameOver":"caCAf","./loadGameData":"l1B4x","./i18n/i18n":"eNPRm","./asyncAlert":"rSqLY","./upgrades":"1u3Dx","@parcel/transformer-js/src/esmodule-helpers.js":"gkKU3"}],"aHTmD":[function(require,module,exports,__globalThis) {
var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js");
parcelHelpers.defineInteropFlag(exports);
parcelHelpers.export(exports, "openScorePanel", ()=>openScorePanel);
parcelHelpers.export(exports, "getNearestUnlockHTML", ()=>getNearestUnlockHTML);
var _asyncAlert = require("./asyncAlert");
var _i18N = require("./i18n/i18n");
var _gameUtils = require("./game_utils");
var _gameOver = require("./gameOver");
var _game = require("./game");
var _loadGameData = require("./loadGameData");
var _pureFunctions = require("./pure_functions");
var _settings = require("./settings");
async function openScorePanel(gameState) {
(0, _game.pause)(true);
await (0, _asyncAlert.asyncAlert)({
title: (0, _i18N.t)("score_panel.title", {
score: gameState.score,
level: gameState.currentLevel + 1,
max: (0, _gameUtils.max_levels)(gameState)
}),
content: [
(0, _gameOver.getCreativeModeWarning)(gameState),
(0, _gameUtils.pickedUpgradesHTMl)(gameState),
(0, _gameUtils.levelsListHTMl)(gameState, gameState.currentLevel),
getNearestUnlockHTML(gameState),
gameState.rerolls ? (0, _i18N.t)("score_panel.rerolls_count", {
rerolls: gameState.rerolls
}) : ""
],
allowClose: true
});
}
function getNearestUnlockHTML(gameState) {
if (gameState.creative) return "";
const unlocked = new Set((0, _settings.getSettingValue)("breakout_71_unlocked_levels", []));
const firstUnlockable = (0, _pureFunctions.firstWhere)((0, _loadGameData.allLevels), (l, li)=>{
if (unlocked.has(l.name)) return;
const reason = (0, _gameUtils.reasonLevelIsLocked)(li, (0, _gameOver.getHistory)(), false);
if (!reason) return;
const { minScore, forbidden, required } = (0, _gameUtils.getLevelUnlockCondition)(li);
const missing = required.filter((u)=>!gameState?.perks?.[u.id]);
// we can't have a forbidden perk
if (forbidden.find((u)=>gameState?.perks?.[u.id])) return;
// All required upgrades need to be unlocked
if (missing.find((u)=>u.threshold > (0, _settings.getTotalScore)())) return;
return {
l,
li,
minScore,
forbidden,
required,
missing,
reason
};
});
if (!firstUnlockable) return "";
let missingPoints = Math.max(0, firstUnlockable.minScore - gameState.score);
let missingUpgrades = firstUnlockable.missing.map((u)=>u.name).join(", ");
const title = missingUpgrades && (0, _i18N.t)("score_panel.get_upgrades_to_unlock", {
missingUpgrades,
points: missingPoints,
level: firstUnlockable.l.name
}) || (0, _i18N.t)("score_panel.score_to_unlock", {
points: missingPoints,
level: firstUnlockable.l.name
});
return `
<p>${(0, _i18N.t)("score_panel.close_to_unlock")}</p>
<div class="upgrade used">
${(0, _loadGameData.icons)[firstUnlockable.l.name]}
<p>
<strong>${title}</strong>
${firstUnlockable.reason?.text}
</p>
</div>
`;
}
},{"./asyncAlert":"rSqLY","./i18n/i18n":"eNPRm","./game_utils":"cEeac","./gameOver":"caCAf","./game":"edeGs","./loadGameData":"l1B4x","./pure_functions":"6pQh7","./settings":"5blfu","@parcel/transformer-js/src/esmodule-helpers.js":"gkKU3"}],"jjD0P":[function(require,module,exports,__globalThis) {
var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js");
parcelHelpers.defineInteropFlag(exports);
parcelHelpers.export(exports, "monitorLevelsUnlocks", ()=>monitorLevelsUnlocks);
var _settings = require("./settings");
var _loadGameData = require("./loadGameData");
var _gameUtils = require("./game_utils");
var _i18N = require("./i18n/i18n");
var _toast = require("./toast");
var _gameStateMutators = require("./gameStateMutators");
let list;
let unlocked = new Set((0, _settings.getSettingValue)("breakout_71_unlocked_levels", []));
function monitorLevelsUnlocks(gameState) {
if (gameState.creative) return;
if (!list) list = (0, _loadGameData.allLevels).map((l, li)=>({
name: l.name,
li,
l,
...(0, _gameUtils.getLevelUnlockCondition)(li)
}));
list.forEach(({ name, minScore, forbidden, required, l })=>{
// Already unlocked
if (unlocked.has(name)) return;
// Score not reached yet
if (gameState.score < minScore) return;
if (!minScore) return;
if (gameState.score < minScore) return;
// We are missing a required perk
if (required.find((id)=>!gameState.perks[id])) return;
// We have a forbidden perk
if (forbidden.find((id)=>gameState.perks[id])) return;
// Level just got unlocked
unlocked.add(name);
(0, _settings.setSettingValue)("breakout_71_unlocked_levels", (0, _settings.getSettingValue)("breakout_71_unlocked_levels", []).concat([
name
]));
(0, _toast.toast)((0, _loadGameData.icons)[name] + "<strong>" + (0, _i18N.t)("unlocks.just_unlocked") + "</strong>");
(0, _gameStateMutators.schedulGameSound)(gameState, "colorChange", 0, 1);
});
}
},{"./settings":"5blfu","./loadGameData":"l1B4x","./game_utils":"cEeac","./i18n/i18n":"eNPRm","./toast":"nAuvo","./gameStateMutators":"9ZeQl","@parcel/transformer-js/src/esmodule-helpers.js":"gkKU3"}]},["x07Me"], "x07Me", "parcelRequire94c2")
</script>
</body>
</html>