Adjusted neon effect, more screenshake after bigger_explosion perk is chosen

This commit is contained in:
Renan LE CARO 2025-02-18 16:03:31 +01:00
parent b458780558
commit ffeb97becb
4 changed files with 349 additions and 175 deletions

View file

@ -9,8 +9,8 @@ const puckHeight = ballSize;
if (allLevels.find(l => l.focus)) { if (allLevels.find(l => l.focus)) {
allLevels = allLevels.filter(l => l.focus) allLevels = allLevels.filter(l => l.focus)
} }
allLevels.forEach((l,li)=>{ allLevels.forEach((l, li) => {
l.threshold= li < 8 ? 0 : Math.round(Math.pow(10, 1 + (li + l.size) / 30) * (li)) * 10 l.threshold = li < 8 ? 0 : Math.round(Math.pow(10, 1 + (li + l.size) / 30) * (li)) * 10
}) })
let runLevels = [] let runLevels = []
@ -107,8 +107,7 @@ function pause() {
} }
} }
let offsetX, offsetXRoundedDown, gameZoneWidth, gameZoneWidthRoundedUp, gameZoneHeight, brickWidth, needsRender = true;
let offsetX, gameZoneWidth, gameZoneHeight, brickWidth, needsRender = true;
const background = document.createElement("img"); const background = document.createElement("img");
const backgroundCanvas = document.createElement("canvas"); const backgroundCanvas = document.createElement("canvas");
@ -129,6 +128,9 @@ const fitSize = () => {
brickWidth = Math.floor(baseWidth / gridSize / 2) * 2; brickWidth = Math.floor(baseWidth / gridSize / 2) * 2;
gameZoneWidth = brickWidth * gridSize; gameZoneWidth = brickWidth * gridSize;
offsetX = Math.floor((canvas.width - gameZoneWidth) / 2); offsetX = Math.floor((canvas.width - gameZoneWidth) / 2);
offsetXRoundedDown = offsetX
if (offsetX < ballSize) offsetXRoundedDown = 0
gameZoneWidthRoundedUp = width - 2 * offsetXRoundedDown
backgroundCanvas.title = 'resized' backgroundCanvas.title = 'resized'
// Ensure puck stays within bounds // Ensure puck stays within bounds
setMousePos(puck); setMousePos(puck);
@ -576,14 +578,14 @@ const upgrades = [
"threshold": 87000, "threshold": 87000,
"id": "ball_repulse_ball", "id": "ball_repulse_ball",
"name": "Balls repulse balls", "name": "Balls repulse balls",
requires:'multiball', requires: 'multiball',
"max": 3, "max": 3,
"help": "Only has an effect with 2+ balls." "help": "Only has an effect with 2+ balls."
}, },
{ {
"threshold": 98000, "threshold": 98000,
"id": "ball_attract_ball", "id": "ball_attract_ball",
requires:'multiball', requires: 'multiball',
"name": "Balls attract balls", "name": "Balls attract balls",
"max": 3, "max": 3,
"help": "Only has an effect with 2+ balls." "help": "Only has an effect with 2+ balls."
@ -602,7 +604,7 @@ function getPossibleUpgrades() {
const ts = getTotalScore() const ts = getTotalScore()
return upgrades return upgrades
.filter(u => !(isSettingOn('color_blind') && u.color_blind_exclude)) .filter(u => !(isSettingOn('color_blind') && u.color_blind_exclude))
.filter(u => ts>=u.threshold) .filter(u => ts >= u.threshold)
.filter(u => !u.requires || perks[u.requires]) .filter(u => !u.requires || perks[u.requires])
} }
@ -646,12 +648,13 @@ function getUpgraderUnlockPoints() {
} }
let lastOffered={} let lastOffered = {}
function pickRandomUpgrades(count) { function pickRandomUpgrades(count) {
let list = getPossibleUpgrades() let list = getPossibleUpgrades()
.map(u=>({...u, score:Math.random() + (lastOffered[u.id]||0) })) .map(u => ({...u, score: Math.random() + (lastOffered[u.id] || 0)}))
.sort((a,b) => a.score-b.score) .sort((a, b) => a.score - b.score)
.filter(u => perks[u.id] < u.max) .filter(u => perks[u.id] < u.max)
.slice(0, count) .slice(0, count)
.sort((a, b) => a.id > b.id ? 1 : -1) .sort((a, b) => a.id > b.id ? 1 : -1)
@ -668,8 +671,8 @@ function pickRandomUpgrades(count) {
}) })
list.forEach(u=> { list.forEach(u => {
lastOffered[u.key] = Math.round(Date.now()/1000) lastOffered[u.key] = Math.round(Date.now() / 1000)
}) })
return list; return list;
@ -703,22 +706,12 @@ function setMousePos(x) {
needsRender = true; needsRender = true;
puck = x; puck = x;
if (offsetX > ballSize) { // We have borders visible, enforce them
// We have borders visible, enforce them if (puck < offsetXRoundedDown + puckWidth / 2) {
if (puck < offsetX + puckWidth / 2) { puck = offsetXRoundedDown + puckWidth / 2;
puck = offsetX + puckWidth / 2; }
} if (puck > offsetXRoundedDown + gameZoneWidthRoundedUp - puckWidth / 2) {
if (puck > offsetX + gameZoneWidth - puckWidth / 2) { puck = offsetXRoundedDown + gameZoneWidthRoundedUp - puckWidth / 2;
puck = offsetX + gameZoneWidth - puckWidth / 2;
}
} else {
// Let puck touch the border of the screen
if (puck < puckWidth / 2) {
puck = puckWidth / 2;
}
if (puck > offsetX * 2 + gameZoneWidth - puckWidth / 2) {
puck = offsetX * 2 + gameZoneWidth - puckWidth / 2;
}
} }
if (!running && !levelTime) { if (!running && !levelTime) {
putBallsAtPuck(); putBallsAtPuck();
@ -850,8 +843,8 @@ function bordersHitCheck(coin, radius, delta) {
let vhit = 0, hhit = 0; let vhit = 0, hhit = 0;
if (coin.x < (offsetX > ballSize ? offsetX : 0) + radius) { if (coin.x < offsetXRoundedDown + radius) {
coin.x = offsetX + radius; coin.x = offsetXRoundedDown + radius;
coin.vx *= -1; coin.vx *= -1;
hhit = 1; hhit = 1;
} }
@ -860,8 +853,8 @@ function bordersHitCheck(coin, radius, delta) {
coin.vy *= -1; coin.vy *= -1;
vhit = 1; vhit = 1;
} }
if (coin.x > canvas.width - (offsetX > ballSize ? offsetX : 0) - radius) { if (coin.x > canvas.width - offsetXRoundedDown - radius) {
coin.x = canvas.width - offsetX - radius; coin.x = canvas.width - offsetXRoundedDown - radius;
coin.vx *= -1; coin.vx *= -1;
hhit = 1; hhit = 1;
} }
@ -1406,18 +1399,13 @@ function render() {
if (!isSettingOn("basic") && !level.color && level.svg && !level.black_puck) { if (!isSettingOn("basic") && !level.color && level.svg && !level.black_puck) {
// Without this the light trails everything
ctx.globalCompositeOperation = "source-over"; ctx.globalCompositeOperation = "source-over";
ctx.globalAlpha = 0.7 ctx.globalAlpha = .4
ctx.fillStyle = "#000"; ctx.fillStyle = "#000";
ctx.fillRect(0, 0, width, height); ctx.fillRect(0, 0, width, height);
ctx.globalCompositeOperation = "multiply";
ctx.globalAlpha = 0.3;
const gradient = ctx.createLinearGradient(offsetX, gameZoneHeight - puckHeight, offsetX, height - puckHeight * 3,);
gradient.addColorStop(0, "black");
gradient.addColorStop(1, "transparent");
ctx.fillStyle = gradient;
ctx.fillRect(offsetX, gameZoneHeight - puckHeight * 3, gameZoneWidth, puckHeight * 4,);
ctx.globalCompositeOperation = "screen"; ctx.globalCompositeOperation = "screen";
ctx.globalAlpha = 0.6; ctx.globalAlpha = 0.6;
@ -1446,11 +1434,16 @@ function render() {
} }
}); });
// Decides how brights the bg black parts can get
ctx.globalAlpha = 0.9; ctx.globalAlpha = .2;
ctx.globalCompositeOperation = "multiply"; ctx.globalCompositeOperation = "multiply";
if (level.svg && background.complete) { ctx.fillStyle = "black";
if (backgroundCanvas.title !== level.name) { ctx.fillRect(0, 0, width, height);
// Decides how dark the background black parts are when lit (1=black)
ctx.globalAlpha = .8;
ctx.globalCompositeOperation = "multiply";
if (level.svg) {
if (backgroundCanvas.title !== level.name && background.complete) {
backgroundCanvas.title = level.name backgroundCanvas.title = level.name
backgroundCanvas.width = canvas.width backgroundCanvas.width = canvas.width
backgroundCanvas.height = canvas.height backgroundCanvas.height = canvas.height
@ -1461,14 +1454,18 @@ function render() {
bgctx.fillRect(0, 0, width, height); bgctx.fillRect(0, 0, width, height);
console.log("redrew context") console.log("redrew context")
} }
ctx.drawImage(backgroundCanvas, 0, 0) if(background.complete) {
ctx.drawImage(backgroundCanvas, 0, 0)
}else{
// Background not loaded yes
ctx.fillStyle = "#000";
ctx.fillRect(0, 0, width, height);
}
} }
} else { } else {
ctx.globalCompositeOperation = "source-over";
ctx.globalAlpha = 1 ctx.globalAlpha = 1
ctx.globalCompositeOperation = "source-over";
ctx.fillStyle = level.color || "#000"; ctx.fillStyle = level.color || "#000";
ctx.fillRect(0, 0, width, height); ctx.fillRect(0, 0, width, height);
@ -1484,18 +1481,18 @@ function render() {
if (combo > baseCombo()) { if (combo > baseCombo()) {
// The red should still be visible on a white bg // The red should still be visible on a white bg
ctx.globalCompositeOperation = !level.color && level.svg ? "screen" : 'source-over'; ctx.globalCompositeOperation = !level.color && level.svg ? "screen" : 'source-over';
ctx.globalAlpha = (2 + combo - baseCombo()) / 50; ctx.globalAlpha = (2 + combo - baseCombo()) / 50;
if (perks.top_is_lava) { if (perks.top_is_lava) {
drawRedGradientSquare(ctx, offsetX, 0, gameZoneWidth, ballSize, 0, 0, 0, ballSize,); drawRedGradientSquare(ctx, offsetXRoundedDown, 0, gameZoneWidthRoundedUp, ballSize, 0, 0, 0, ballSize,);
} }
if (perks.sides_are_lava) { if (perks.sides_are_lava) {
drawRedGradientSquare(ctx, offsetX, 0, ballSize, gameZoneHeight, 0, 0, ballSize, 0,); drawRedGradientSquare(ctx, offsetXRoundedDown, 0, ballSize, gameZoneHeight, 0, 0, ballSize, 0,);
drawRedGradientSquare(ctx, offsetX + gameZoneWidth - ballSize, 0, ballSize, gameZoneHeight, ballSize, 0, 0, 0,); drawRedGradientSquare(ctx, offsetXRoundedDown + gameZoneWidthRoundedUp - ballSize, 0, ballSize, gameZoneHeight, ballSize, 0, 0, 0,);
} }
if (perks.catch_all_coins) { if (perks.catch_all_coins) {
drawRedGradientSquare(ctx, offsetX, gameZoneHeight - ballSize, gameZoneWidth, ballSize, 0, ballSize, 0, 0,); drawRedGradientSquare(ctx, offsetXRoundedDown, gameZoneHeight - ballSize, gameZoneWidthRoundedUp, ballSize, 0, ballSize, 0, 0,);
} }
if (perks.streak_shots) { if (perks.streak_shots) {
drawRedGradientSquare(ctx, puck - puckWidth / 2, gameZoneHeight - puckHeight - ballSize, puckWidth, ballSize, 0, ballSize, 0, 0,); drawRedGradientSquare(ctx, puck - puckWidth / 2, gameZoneHeight - puckHeight - ballSize, puckWidth, ballSize, 0, ballSize, 0, 0,);
@ -1517,7 +1514,8 @@ function render() {
const lastExplosionDelay = Date.now() - lastexplosion + 5; const lastExplosionDelay = Date.now() - lastexplosion + 5;
const shaked = lastExplosionDelay < 200; const shaked = lastExplosionDelay < 200;
if (shaked) { if (shaked) {
ctx.translate((Math.sin(Date.now()) * 50) / lastExplosionDelay, (Math.sin(Date.now() + 36) * 50) / lastExplosionDelay,); const amplitude =( perks.bigger_explosions + 1) * 50 / lastExplosionDelay
ctx.translate(Math.sin(Date.now()) * amplitude , Math.sin(Date.now() + 36) * amplitude);
} }
ctx.globalCompositeOperation = "source-over"; ctx.globalCompositeOperation = "source-over";
@ -1586,12 +1584,12 @@ function render() {
// Borders // Borders
ctx.fillStyle = puckColor; ctx.fillStyle = puckColor;
ctx.globalCompositeOperation = "source-over"; ctx.globalCompositeOperation = "source-over";
if (offsetX > ballSize) { if (offsetXRoundedDown) {
ctx.fillRect(offsetX, 0, 1, height); ctx.fillRect(offsetX, 0, 1, height);
ctx.fillRect(width - offsetX - 1, 0, 1, height); ctx.fillRect(width - offsetX - 1, 0, 1, height);
} }
if (isSettingOn("mobile-mode")) { if (isSettingOn("mobile-mode")) {
ctx.fillRect(offsetX, gameZoneHeight, gameZoneWidth, 1); ctx.fillRect(offsetXRoundedDown, gameZoneHeight, gameZoneWidthRoundedUp, 1);
if (!running) { if (!running) {
drawText(ctx, "Keep pressing here to play", puckColor, puckHeight, { drawText(ctx, "Keep pressing here to play", puckColor, puckHeight, {
x: canvas.width / 2, y: gameZoneHeight + (canvas.height - gameZoneHeight) / 2, x: canvas.width / 2, y: gameZoneHeight + (canvas.height - gameZoneHeight) / 2,
@ -1770,8 +1768,8 @@ function drawBrick(ctx, color, x, y, squared) {
// It's not easy to have a 1px gap between bricks without antialiasing // It's not easy to have a 1px gap between bricks without antialiasing
} }
function drawRedGradientSquare(ctx, x, y, width, height, redX, redY, blackX, blackY ) { function drawRedGradientSquare(ctx, x, y, width, height, redX, redY, blackX, blackY) {
const key = "gradient" + width + "_" + height + "_" + redX + "_" + redY + "_" + blackX + "_" + blackY ; const key = "gradient" + width + "_" + height + "_" + redX + "_" + redY + "_" + blackX + "_" + blackY;
if (!cachedGraphics[key]) { if (!cachedGraphics[key]) {
const can = document.createElement("canvas"); const can = document.createElement("canvas");
@ -2239,15 +2237,15 @@ async function openSettingsPanel() {
...allLevels ...allLevels
.sort((a, b) => a.threshold - b.threshold) .sort((a, b) => a.threshold - b.threshold)
.map((l, li) => { .map((l, li) => {
const avaliable = ts >= l.threshold const avaliable = ts >= l.threshold
return ({ return ({
text: l.name, text: l.name,
help: `A ${l.size}x${l.size} level with ${l.bricks.filter(i => i).length} bricks` + (avaliable ? '' : `(${l.threshold} coins)`), help: `A ${l.size}x${l.size} level with ${l.bricks.filter(i => i).length} bricks` + (avaliable ? '' : `(${l.threshold} coins)`),
disabled: !avaliable, disabled: !avaliable,
value: {level: l.name} value: {level: l.name}
})
}) })
})
] ]

View file

@ -30,7 +30,8 @@ let allLevels=[
"#e32119" "#e32119"
], ],
"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": "<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>",
"color": "" "color": "",
"focus": false
}, },
{ {
"name": "Butterfly", "name": "Butterfly",
@ -1028,26 +1029,26 @@ let allLevels=[
null, null,
null, null,
null, null,
"#6262EA", "#ffd300",
"white", "#ffd300",
null, null,
null, null,
"#6262EA", "#ffd300",
"white", "#ffd300",
null, "",
null, null,
"white", "#ffd300",
"white", "#ffd300",
null,
null,
"white",
"white",
null, null,
null, null,
"#ffd300",
"#ffd300",
"",
null, null,
null, null,
null, null,
null, null,
"",
null, null,
null, null,
null, null,
@ -1060,24 +1061,26 @@ let allLevels=[
"", "",
null, null,
null, null,
"#e32119", "#ffd300",
"#e32119", "#ffd300",
"#e32119", "#ffd300",
"#e32119", "#ffd300",
"#e32119", "#ffd300",
"#e32119", "#ffd300",
null, "",
null, null,
null, null,
"#e32119", "#ffd300",
"#e32119", "#ffd300",
"#e32119", "#ffd300",
"#e32119", "#ffd300",
null, "",
null, null,
null, null,
null, null,
"", "",
"",
"",
"" ""
], ],
"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": "<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>",
@ -2801,7 +2804,7 @@ let allLevels=[
"color": "" "color": ""
}, },
{ {
"name": "Gold chain", "name": "Chain",
"size": 7, "size": 7,
"bricks": [ "bricks": [
"#ffd300", "#ffd300",
@ -2862,30 +2865,21 @@ let allLevels=[
"name": "Marion", "name": "Marion",
"size": 9, "size": 9,
"bricks": [ "bricks": [
"#ab0c0c",
"#ab0c0c",
"",
"",
"",
"",
"",
"#ab0c0c",
"#ab0c0c",
"",
"#e32119", "#e32119",
"#ab0c0c",
"",
"",
"",
"#ab0c0c",
"#e32119", "#e32119",
null, "",
"",
"",
"",
"", "",
"#e32119", "#e32119",
"#e32119", "#e32119",
"#ab0c0c",
"", "",
"#ab0c0c", "#e32119",
"#e32119",
"",
"",
"",
"#e32119", "#e32119",
"#e32119", "#e32119",
null, null,
@ -2893,7 +2887,16 @@ let allLevels=[
"#e32119", "#e32119",
"#e32119", "#e32119",
"#e32119", "#e32119",
"#ab0c0c", "",
"#e32119",
"#e32119",
"#e32119",
null,
"",
"#e32119",
"#e32119",
"#e32119",
"#e32119",
"#e32119", "#e32119",
"#e32119", "#e32119",
"#e32119", "#e32119",
@ -2934,7 +2937,7 @@ let allLevels=[
"#e32119", "#e32119",
"#e32119", "#e32119",
null, null,
"#ab0c0c", "#e32119",
"#e32119", "#e32119",
"#e32119", "#e32119",
null, null,
@ -2942,7 +2945,7 @@ let allLevels=[
null, null,
"#e32119", "#e32119",
"#e32119", "#e32119",
"#ab0c0c" "#e32119"
], ],
"svg": "<svg xmlns='http://www.w3.org/2000/svg' width='50' height='50'><path d='M44.11 8.56c-.065.316-.192.615-.24.931-.037.395-.11.796-.083 1.197.016.564.113 1.127.287 1.664.166.405.303.835.577 1.187.225.358.456.724.788.994.222.222.483.42.614.718.4.748.164 1.758-.536 2.242-.663.515-1.69.47-2.285-.131-.414-.374-.525-.936-.717-1.433-.195-.513-.238-1.06-.316-1.599 0-.442-.015-.886.008-1.327.073-.471.115-.955.235-1.42.081-.295.195-.578.303-.864.195-.472.436-.924.74-1.334.176-.282.439-.515.61-.809zm-2.819.134L38.42 14.01a1.83 1.83 0 01-2.446.745c-.878-.452-1.197-1.569-.745-2.446a2 2 0 01.745-.745zm.16-2.819a11.23 11.23 0 01-.771.638c-.49.34-1.008.652-1.581.832-.469.208-.978.308-1.484.387-.373.019-.736.106-1.112.084-.525.01-1.054-.003-1.566-.128-.563-.05-1.082-.293-1.612-.473-.832-.31-1.33-1.285-1.087-2.14.225-.892 1.211-1.49 2.107-1.28.45.09.836.38 1.111.738.274.272.54.558.89.73.347.243.713.455 1.117.586.428.163.87.291 1.329.322.578.108 1.18.056 1.755-.03.315-.026.605-.176.904-.266zm3.377.612a1.33 1.33 0 01-1.33-1.33 1.33 1.33 0 011.33-1.33 1.33 1.33 0 011.33 1.33 1.33 1.33 0 01-1.33 1.33zM41.439 44.11c-.315-.065-.614-.192-.93-.24-.395-.037-.796-.11-1.197-.083a5.959 5.959 0 00-1.664.287c-.405.166-.835.303-1.187.577-.358.225-.724.456-.994.788-.222.222-.42.483-.718.614-.748.4-1.758.164-2.242-.536-.515-.663-.47-1.69.131-2.285.374-.414.936-.525 1.433-.717.513-.195 1.06-.238 1.599-.316.442 0 .885-.015 1.326.008.472.073.956.115 1.421.235.295.081.578.195.864.303.472.195.924.436 1.334.74.282.177.515.439.809.61zm-.133-2.819L35.99 38.42a1.83 1.83 0 01-.745-2.446c.452-.878 1.569-1.197 2.446-.745a2 2 0 01.745.745zm2.819.16a11.223 11.223 0 01-.638-.771c-.34-.49-.652-1.008-.832-1.581-.208-.469-.308-.978-.387-1.484-.019-.373-.106-.736-.084-1.112-.01-.525.003-1.054.128-1.566.05-.563.293-1.082.473-1.612.31-.832 1.285-1.33 2.14-1.087.892.225 1.49 1.211 1.28 2.107-.09.45-.38.836-.738 1.111-.272.274-.558.54-.73.89-.243.347-.455.713-.586 1.117-.163.428-.291.87-.322 1.329-.108.578-.056 1.18.03 1.755.026.315.176.605.266.904zm-.612 3.377a1.33 1.33 0 011.33-1.33 1.33 1.33 0 011.33 1.33 1.33 1.33 0 01-1.33 1.33 1.33 1.33 0 01-1.33-1.33zM5.89 41.439c.065-.315.192-.614.24-.93.037-.395.11-.796.083-1.197a5.955 5.955 0 00-.287-1.664c-.166-.405-.303-.835-.577-1.187-.225-.358-.456-.724-.788-.994-.222-.222-.483-.42-.614-.718-.4-.748-.164-1.758.536-2.242.663-.515 1.69-.47 2.285.131.414.374.525.936.717 1.433.195.513.238 1.06.316 1.599 0 .442.015.885-.008 1.326-.073.472-.115.956-.235 1.421-.081.295-.195.578-.303.864a6.282 6.282 0 01-.74 1.334c-.176.282-.439.515-.61.809zm2.819-.133l2.871-5.317a1.83 1.83 0 012.446-.745c.878.452 1.197 1.569.745 2.446a2 2 0 01-.745.745zm-.16 2.819c.247-.226.507-.437.771-.638.49-.34 1.008-.652 1.581-.832.469-.208.978-.308 1.484-.387.373-.019.736-.106 1.112-.084.525-.01 1.054.003 1.566.128.563.05 1.082.293 1.612.473.832.31 1.33 1.285 1.087 2.14-.225.892-1.211 1.49-2.107 1.28-.45-.09-.836-.38-1.111-.738-.274-.272-.54-.559-.89-.73-.347-.243-.713-.455-1.117-.586-.428-.163-.87-.291-1.329-.322-.578-.108-1.18-.056-1.755.03-.315.026-.605.176-.904.266zm-3.377-.612a1.33 1.33 0 011.33 1.33 1.33 1.33 0 01-1.33 1.33 1.33 1.33 0 01-1.33-1.33 1.33 1.33 0 011.33-1.33zM8.561 5.89c.315.065.614.192.93.24.395.037.796.11 1.197.083a5.959 5.959 0 001.664-.288c.405-.165.835-.302 1.187-.576.358-.225.724-.456.994-.788.222-.222.42-.483.718-.614.748-.4 1.758-.164 2.242.536.515.663.47 1.69-.131 2.285-.374.414-.936.525-1.433.717-.513.195-1.06.238-1.599.316-.442 0-.885.015-1.326-.008-.472-.073-.956-.115-1.421-.235-.295-.081-.578-.195-.864-.303a6.281 6.281 0 01-1.334-.74c-.282-.177-.515-.439-.809-.61zm.133 2.819l5.317 2.871a1.83 1.83 0 01.745 2.446c-.452.878-1.569 1.197-2.446.745a2 2 0 01-.745-.745zm-2.819-.16c.226.247.437.507.638.771.34.49.652 1.008.832 1.581.208.469.308.978.387 1.484.019.373.106.736.084 1.112.01.525-.003 1.054-.128 1.566-.05.563-.293 1.082-.473 1.612-.31.832-1.285 1.33-2.14 1.087-.892-.225-1.49-1.211-1.28-2.107.09-.45.38-.836.738-1.111.272-.274.558-.54.73-.89.243-.347.455-.713.586-1.117.163-.428.291-.87.322-1.329.108-.578.056-1.18-.03-1.755-.026-.315-.176-.605-.266-.904zm.612-3.377a1.33 1.33 0 01-1.33 1.33 1.33 1.33 0 01-1.33-1.33 1.33 1.33 0 011.33-1.33 1.33 1.33 0 011.33 1.33zm22.515 22.552c2.052-.142 2.476-1.875 2.476-2.724 0-.849-.46-2.582-2.476-2.724C26.951 22.135 24.97 25 24.97 25s2.016 2.83 4.032 2.724zm-6.756 1.308c.142 2.052 1.875 2.476 2.724 2.476.849 0 2.582-.46 2.724-2.476C27.835 26.981 24.97 25 24.97 25s-2.83 2.016-2.724 4.032zm-1.308-6.756c-2.052.142-2.476 1.875-2.476 2.724 0 .849.46 2.582 2.476 2.724C22.989 27.865 24.97 25 24.97 25s-2.016-2.83-4.032-2.724zm6.756-1.308c-.142-2.052-1.875-2.476-2.724-2.476-.849 0-2.582.46-2.724 2.476C22.105 23.019 24.97 25 24.97 25s2.83-2.016 2.724-4.032z' stroke='none' fill='white'/></svg>", "svg": "<svg xmlns='http://www.w3.org/2000/svg' width='50' height='50'><path d='M44.11 8.56c-.065.316-.192.615-.24.931-.037.395-.11.796-.083 1.197.016.564.113 1.127.287 1.664.166.405.303.835.577 1.187.225.358.456.724.788.994.222.222.483.42.614.718.4.748.164 1.758-.536 2.242-.663.515-1.69.47-2.285-.131-.414-.374-.525-.936-.717-1.433-.195-.513-.238-1.06-.316-1.599 0-.442-.015-.886.008-1.327.073-.471.115-.955.235-1.42.081-.295.195-.578.303-.864.195-.472.436-.924.74-1.334.176-.282.439-.515.61-.809zm-2.819.134L38.42 14.01a1.83 1.83 0 01-2.446.745c-.878-.452-1.197-1.569-.745-2.446a2 2 0 01.745-.745zm.16-2.819a11.23 11.23 0 01-.771.638c-.49.34-1.008.652-1.581.832-.469.208-.978.308-1.484.387-.373.019-.736.106-1.112.084-.525.01-1.054-.003-1.566-.128-.563-.05-1.082-.293-1.612-.473-.832-.31-1.33-1.285-1.087-2.14.225-.892 1.211-1.49 2.107-1.28.45.09.836.38 1.111.738.274.272.54.558.89.73.347.243.713.455 1.117.586.428.163.87.291 1.329.322.578.108 1.18.056 1.755-.03.315-.026.605-.176.904-.266zm3.377.612a1.33 1.33 0 01-1.33-1.33 1.33 1.33 0 011.33-1.33 1.33 1.33 0 011.33 1.33 1.33 1.33 0 01-1.33 1.33zM41.439 44.11c-.315-.065-.614-.192-.93-.24-.395-.037-.796-.11-1.197-.083a5.959 5.959 0 00-1.664.287c-.405.166-.835.303-1.187.577-.358.225-.724.456-.994.788-.222.222-.42.483-.718.614-.748.4-1.758.164-2.242-.536-.515-.663-.47-1.69.131-2.285.374-.414.936-.525 1.433-.717.513-.195 1.06-.238 1.599-.316.442 0 .885-.015 1.326.008.472.073.956.115 1.421.235.295.081.578.195.864.303.472.195.924.436 1.334.74.282.177.515.439.809.61zm-.133-2.819L35.99 38.42a1.83 1.83 0 01-.745-2.446c.452-.878 1.569-1.197 2.446-.745a2 2 0 01.745.745zm2.819.16a11.223 11.223 0 01-.638-.771c-.34-.49-.652-1.008-.832-1.581-.208-.469-.308-.978-.387-1.484-.019-.373-.106-.736-.084-1.112-.01-.525.003-1.054.128-1.566.05-.563.293-1.082.473-1.612.31-.832 1.285-1.33 2.14-1.087.892.225 1.49 1.211 1.28 2.107-.09.45-.38.836-.738 1.111-.272.274-.558.54-.73.89-.243.347-.455.713-.586 1.117-.163.428-.291.87-.322 1.329-.108.578-.056 1.18.03 1.755.026.315.176.605.266.904zm-.612 3.377a1.33 1.33 0 011.33-1.33 1.33 1.33 0 011.33 1.33 1.33 1.33 0 01-1.33 1.33 1.33 1.33 0 01-1.33-1.33zM5.89 41.439c.065-.315.192-.614.24-.93.037-.395.11-.796.083-1.197a5.955 5.955 0 00-.287-1.664c-.166-.405-.303-.835-.577-1.187-.225-.358-.456-.724-.788-.994-.222-.222-.483-.42-.614-.718-.4-.748-.164-1.758.536-2.242.663-.515 1.69-.47 2.285.131.414.374.525.936.717 1.433.195.513.238 1.06.316 1.599 0 .442.015.885-.008 1.326-.073.472-.115.956-.235 1.421-.081.295-.195.578-.303.864a6.282 6.282 0 01-.74 1.334c-.176.282-.439.515-.61.809zm2.819-.133l2.871-5.317a1.83 1.83 0 012.446-.745c.878.452 1.197 1.569.745 2.446a2 2 0 01-.745.745zm-.16 2.819c.247-.226.507-.437.771-.638.49-.34 1.008-.652 1.581-.832.469-.208.978-.308 1.484-.387.373-.019.736-.106 1.112-.084.525-.01 1.054.003 1.566.128.563.05 1.082.293 1.612.473.832.31 1.33 1.285 1.087 2.14-.225.892-1.211 1.49-2.107 1.28-.45-.09-.836-.38-1.111-.738-.274-.272-.54-.559-.89-.73-.347-.243-.713-.455-1.117-.586-.428-.163-.87-.291-1.329-.322-.578-.108-1.18-.056-1.755.03-.315.026-.605.176-.904.266zm-3.377-.612a1.33 1.33 0 011.33 1.33 1.33 1.33 0 01-1.33 1.33 1.33 1.33 0 01-1.33-1.33 1.33 1.33 0 011.33-1.33zM8.561 5.89c.315.065.614.192.93.24.395.037.796.11 1.197.083a5.959 5.959 0 001.664-.288c.405-.165.835-.302 1.187-.576.358-.225.724-.456.994-.788.222-.222.42-.483.718-.614.748-.4 1.758-.164 2.242.536.515.663.47 1.69-.131 2.285-.374.414-.936.525-1.433.717-.513.195-1.06.238-1.599.316-.442 0-.885.015-1.326-.008-.472-.073-.956-.115-1.421-.235-.295-.081-.578-.195-.864-.303a6.281 6.281 0 01-1.334-.74c-.282-.177-.515-.439-.809-.61zm.133 2.819l5.317 2.871a1.83 1.83 0 01.745 2.446c-.452.878-1.569 1.197-2.446.745a2 2 0 01-.745-.745zm-2.819-.16c.226.247.437.507.638.771.34.49.652 1.008.832 1.581.208.469.308.978.387 1.484.019.373.106.736.084 1.112.01.525-.003 1.054-.128 1.566-.05.563-.293 1.082-.473 1.612-.31.832-1.285 1.33-2.14 1.087-.892-.225-1.49-1.211-1.28-2.107.09-.45.38-.836.738-1.111.272-.274.558-.54.73-.89.243-.347.455-.713.586-1.117.163-.428.291-.87.322-1.329.108-.578.056-1.18-.03-1.755-.026-.315-.176-.605-.266-.904zm.612-3.377a1.33 1.33 0 01-1.33 1.33 1.33 1.33 0 01-1.33-1.33 1.33 1.33 0 011.33-1.33 1.33 1.33 0 011.33 1.33zm22.515 22.552c2.052-.142 2.476-1.875 2.476-2.724 0-.849-.46-2.582-2.476-2.724C26.951 22.135 24.97 25 24.97 25s2.016 2.83 4.032 2.724zm-6.756 1.308c.142 2.052 1.875 2.476 2.724 2.476.849 0 2.582-.46 2.724-2.476C27.835 26.981 24.97 25 24.97 25s-2.83 2.016-2.724 4.032zm-1.308-6.756c-2.052.142-2.476 1.875-2.476 2.724 0 .849.46 2.582 2.476 2.724C22.989 27.865 24.97 25 24.97 25s-2.016-2.83-4.032-2.724zm6.756-1.308c-.142-2.052-1.875-2.476-2.724-2.476-.849 0-2.582.46-2.724 2.476C22.105 23.019 24.97 25 24.97 25s2.83-2.016 2.724-4.032z' stroke='none' fill='white'/></svg>",
"focus": false, "focus": false,
@ -4041,29 +4044,29 @@ let allLevels=[
"", "",
null, null,
"", "",
"#e32119",
"#F44848", "#F44848",
"#F44848", "#F44848",
"#ab0c0c", "#F44848",
"#F44848",
"", "",
"", "",
"", "",
null, null,
"", "",
"#e32119", "#F44848",
"#e32119", "#F44848",
"#ab0c0c", "#F44848",
"#ab0c0c", "#F44848",
"", "",
"", "",
"", "",
null, null,
"", "",
"", "",
"#e32119", "#F44848",
"#ab0c0c", "#F44848",
"", "",
"#A1F051", "#618227",
"", "",
"", "",
null, null,
@ -4072,7 +4075,7 @@ let allLevels=[
"", "",
"#618227", "#618227",
"", "",
"#A1F051", "#618227",
"#618227", "#618227",
"", "",
null, null,
@ -4239,7 +4242,7 @@ let allLevels=[
"#F44848", "#F44848",
"#F44848", "#F44848",
"#F44848", "#F44848",
"#A1F051", "#F44848",
"#618227", "#618227",
"", "",
"#F44848", "#F44848",
@ -4253,14 +4256,14 @@ let allLevels=[
"black", "black",
"#F44848", "#F44848",
"#F44848", "#F44848",
"#A1F051", "#F44848",
"#A1F051", "#F44848",
"#618227", "#618227",
"", "",
"#618227", "#618227",
"#618227", "#F44848",
"#A1F051", "#F44848",
"#A1F051", "#F44848",
"#618227", "#618227",
"#618227", "#618227",
"", "",
@ -4453,79 +4456,79 @@ let allLevels=[
"#E67070", "#E67070",
"#E67070" "#E67070"
], ],
"svg": "<svg width=\"100\" height=\"100\" version=\"1.1\" viewBox=\"0 0 26.458 26.458\" xmlns=\"http://www.w3.org/2000/svg\">\n <g transform=\"matrix(.4134 0 0 .4134 -28.686 7.4041)\" fill=\"#fff\" stroke-width=\".08052\">\n <path d=\"m85.464 15.71c.46125-2.7744 1.3323-5.2725 2.5579-7.3954 1.3141-2.2761 3.0349-4.1229 5.0932-5.4239.05426-.032181.10625-.06363.16319-.090256l1.0546-.51771-.58764-.33928c-4.1341-2.3868-9.4256-.99284-11.794 3.1086-2.3679 4.1014-.92853 9.3794 3.2056 11.766l.24993.1443.03571-1.0307c.0013-.07451.0096-.14715.02097-.22192z\"/>\n <path d=\"m104.59 31.947 6.8094 1.9479c.89353.25602 1.8277-.24198 2.1101-1.1263l2.0498-6.3916c.77562.29904 1.6676.02855 2.0962-.71374.42773-.74084.21592-1.6486-.43073-2.1707l4.5104-4.971c.6237-.68524.58797-1.7432-.0797-2.3905l-5.0916-4.9231c-.56009-.54158-1.417-.63764-2.0855-.23217l-2.5199 1.5303c-.11453-.07652-.21-.16882-.3305-.23839l-13.71-7.9155-3.0424 1.4905c-3.0763 1.9787-5.2047 5.6412-6.0028 10.322l-.09615 2.7432 14.263 8.235c.1205.06957.24898.10807.37232.16935l-.0659 2.9451c-.017.78162.49475 1.4757 1.2438 1.69zm9.4614-10.348.0773-.13389c.20183-.34957.35541-.71518.48767-1.0851.0343-.09724.0692-.1921.0989-.28805.10439-.34241.18608-.68994.23264-1.0419.0185-.12816.0208-.25579.0316-.38447.0175-.23981.0234-.48037.0164-.72241-.006-.15197-.003-.30344-.0188-.4552-.0304-.30121-.0832-.60141-.15389-.89812-.0443-.1843-.0998-.36306-.15821-.54358-.0521-.15702-.11304-.30923-.17539-.46229-.0642-.16009-.11449-.32393-.19135-.4794l.83065-.50422 2.9414 2.8447-3.8536 4.2493-.16527-.09542zm-7.2196 6.4376c.17837-.01006.35094-.0513.52555-.07545.15668-.02063.31129-.04444.46484-.07675.18939-.03942.37814-.08115.56309-.13708.28995-.08653.57313-.18876.84685-.31244.14247-.06456.27485-.14285.41324-.21765.20907-.11137.41033-.2332.60695-.36764.10837-.0743.2186-.14157.3236-.22376.27921-.21563.53853-.45866.78283-.72028.0691-.07511.13386-.15284.20087-.23111.2543-.29947.49403-.61525.69501-.96336l.001-.0017.0782-.13535.16512.09534-1.754 5.4635-3.9343-1.125z\"/>\n </g>\n</svg>\n", "svg": "<svg width=\"50\" height=\"50\" version=\"1.1\" viewBox=\"0 0 50 50\" xmlns=\"http://www.w3.org/2000/svg\"> <g transform=\"matrix(.4134 0 0 .4134 -28.686 7.4041)\" fill=\"#fff\" stroke-width=\".08052\"> <path d=\"m85.464 15.71c.46125-2.7744 1.3323-5.2725 2.5579-7.3954 1.3141-2.2761 3.0349-4.1229 5.0932-5.4239.05426-.032181.10625-.06363.16319-.090256l1.0546-.51771-.58764-.33928c-4.1341-2.3868-9.4256-.99284-11.794 3.1086-2.3679 4.1014-.92853 9.3794 3.2056 11.766l.24993.1443.03571-1.0307c.0013-.07451.0096-.14715.02097-.22192z\"/> <path d=\"m104.59 31.947 6.8094 1.9479c.89353.25602 1.8277-.24198 2.1101-1.1263l2.0498-6.3916c.77562.29904 1.6676.02855 2.0962-.71374.42773-.74084.21592-1.6486-.43073-2.1707l4.5104-4.971c.6237-.68524.58797-1.7432-.0797-2.3905l-5.0916-4.9231c-.56009-.54158-1.417-.63764-2.0855-.23217l-2.5199 1.5303c-.11453-.07652-.21-.16882-.3305-.23839l-13.71-7.9155-3.0424 1.4905c-3.0763 1.9787-5.2047 5.6412-6.0028 10.322l-.09615 2.7432 14.263 8.235c.1205.06957.24898.10807.37232.16935l-.0659 2.9451c-.017.78162.49475 1.4757 1.2438 1.69zm9.4614-10.348.0773-.13389c.20183-.34957.35541-.71518.48767-1.0851.0343-.09724.0692-.1921.0989-.28805.10439-.34241.18608-.68994.23264-1.0419.0185-.12816.0208-.25579.0316-.38447.0175-.23981.0234-.48037.0164-.72241-.006-.15197-.003-.30344-.0188-.4552-.0304-.30121-.0832-.60141-.15389-.89812-.0443-.1843-.0998-.36306-.15821-.54358-.0521-.15702-.11304-.30923-.17539-.46229-.0642-.16009-.11449-.32393-.19135-.4794l.83065-.50422 2.9414 2.8447-3.8536 4.2493-.16527-.09542zm-7.2196 6.4376c.17837-.01006.35094-.0513.52555-.07545.15668-.02063.31129-.04444.46484-.07675.18939-.03942.37814-.08115.56309-.13708.28995-.08653.57313-.18876.84685-.31244.14247-.06456.27485-.14285.41324-.21765.20907-.11137.41033-.2332.60695-.36764.10837-.0743.2186-.14157.3236-.22376.27921-.21563.53853-.45866.78283-.72028.0691-.07511.13386-.15284.20087-.23111.2543-.29947.49403-.61525.69501-.96336l.001-.0017.0782-.13535.16512.09534-1.754 5.4635-3.9343-1.125z\"/> </g></svg>",
"color": "", "color": "",
"focus": false, "focus": false,
"squared": false "squared": false
}, },
{ {
"name": "Sunrise", "name": "Ocean Sunrise",
"size": 8, "size": 8,
"bricks": [ "bricks": [
"", "#F44848",
"", "#F44848",
"", "#F44848",
"", "#F44848",
"", "#F44848",
"", "#F44848",
"", "#F44848",
"", "#F44848",
"", "#F44848",
"", "#F44848",
"", "#F44848",
"#e32119",
"#e32119",
"",
"",
"",
"",
"",
"#e32119",
"#ffd300", "#ffd300",
"#ffd300", "#ffd300",
"#e32119", "#F44848",
"", "#F44848",
"", "#F44848",
"", "#F44848",
"#e32119", "#F44848",
"#ffd300",
"#ffd300",
"#ffd300",
"#ffd300",
"#F44848",
"#F44848",
"#F44848",
"#ffd300",
"#ffd300", "#ffd300",
"white", "white",
"white", "white",
"#ffd300", "#ffd300",
"#e32119", "#ffd300",
"", "#F44848",
"#6262EA",
"#6262EA", "#6262EA",
"#5DA3EA", "#5DA3EA",
"#5DA3EA",
"#5BECEC", "#5BECEC",
"#5BECEC", "#5BECEC",
"#5DA3EA", "#5DA3EA",
"#5DA3EA",
"#6262EA",
"#6262EA",
"#6262EA",
"#5DA3EA",
"#5DA3EA",
"#5DA3EA",
"#5DA3EA",
"#6262EA",
"#6262EA", "#6262EA",
"#6262EA", "#6262EA",
"",
"#6262EA", "#6262EA",
"#6262EA", "#6262EA",
"#5DA3EA", "#5DA3EA",
"#5DA3EA", "#5DA3EA",
"#6262EA", "#6262EA",
"#6262EA", "#6262EA",
"",
"",
"",
"#6262EA", "#6262EA",
"#6262EA", "#6262EA",
"#6262EA", "#6262EA",
"#6262EA", "#6262EA",
"", "#6262EA",
"", "#6262EA",
"", "#6262EA",
"", "#6262EA",
"", "#6262EA"
"",
"",
"",
"",
""
], ],
"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": "<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>",
"focus": false, "focus": false,
@ -6002,7 +6005,8 @@ let allLevels=[
"", "",
"" ""
], ],
"svg": "" "svg": "",
"focus": false
}, },
{ {
"name": "Pig", "name": "Pig",
@ -6774,5 +6778,172 @@ let allLevels=[
], ],
"svg": "", "svg": "",
"focus": false "focus": false
},
{
"name": "Baby Dog",
"size": 8,
"bricks": [
"",
null,
null,
null,
null,
null,
null,
"white",
"",
"",
"#e1c8b4",
"#e1c8b4",
"#e1c8b4",
"#e1c8b4",
"white",
"white",
"white",
"white",
"#e1c8b4",
"#e1c8b4",
"white",
"#e1c8b4",
"white",
"white",
"white",
"#e1c8b4",
"#333",
"white",
"#e1c8b4",
"#333",
"#e1c8b4",
"#e1c8b4",
"#e1c8b4",
"#e1c8b4",
"white",
"white",
"white",
"white",
"#e1c8b4",
"#e1c8b4",
null,
"#e1c8b4",
"white",
"#333",
"#333",
"white",
"#e1c8b4",
null,
null,
"#e1c8b4",
"white",
"white",
"white",
"white",
"#e1c8b4",
null,
null,
null,
null,
"white",
"white"
],
"svg": "",
"focus": false
},
{
"name": "Cute dog",
"size": 9,
"bricks": [
null,
null,
null,
null,
null,
null,
null,
null,
null,
"",
"#F29E4A",
"",
"",
"",
"",
"",
"#F29E4A",
"",
"#F29E4A",
"#F29E4A",
"#F29E4A",
"white",
"white",
"white",
"#F29E4A",
"#F29E4A",
"#F29E4A",
"#F29E4A",
"#F29E4A",
"white",
"white",
"white",
"white",
"white",
"#F29E4A",
"#F29E4A",
"#F29E4A",
"#F29E4A",
"#e1c8b4",
"white",
"white",
"white",
"white",
"#F29E4A",
"#F29E4A",
"",
"#e1c8b4",
"black",
"#e1c8b4",
"white",
"white",
"black",
"white",
"",
"",
"#e1c8b4",
"black",
"#e1c8b4",
"white",
"white",
"black",
"white",
"",
"",
"",
"#e1c8b4",
"white",
"black",
"white",
"white",
"",
"",
"",
"",
"",
"white",
"#ab0c0c",
"white",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
""
],
"svg": "",
"focus": false
} }
] ]

View file

@ -138,7 +138,12 @@ document.getElementById('levels').addEventListener('change', e => {
level.svg = '' level.svg = ''
updateLevelBackground(levelIndex) updateLevelBackground(levelIndex)
}else if( e.target.getAttribute('type') === 'checkbox' && e.target.hasAttribute('data-field')){ }else if( e.target.getAttribute('type') === 'checkbox' && e.target.hasAttribute('data-field')){
level[e.target.getAttribute('data-field')] = !!e.target.checked const field=e.target.getAttribute('data-field')
if(field==='focus'){
allLevels.forEach(l=>l.focus=false)
}
level[field] = !!e.target.checked
} }
save() save()

BIN
gifs/1.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 MiB