This commit is contained in:
Renan LE CARO 2025-04-21 09:06:15 +02:00
parent 0a1d9dfe2f
commit 6b6e393d3b
16 changed files with 443 additions and 79 deletions

View file

@ -24,6 +24,9 @@ Other translation are very welcome, contact me if you'd like to submit one.
## To do ## To do
## Done ## Done
- left/top/right is laval perks : at level 2+, the corresponding borders completely disappears (reachable with limitless)
- new perk : three cushion (gain point for indirect hits)
- live stats: coins still in the air appear as "lost" in the catch percentage, as in the final computation
- level editor : removed the conditions on bricks count, level name and credits to be able to copy the code - level editor : removed the conditions on bricks count, level name and credits to be able to copy the code
- shadow around ball when there are many coins : enabled in basic mode too - shadow around ball when there are many coins : enabled in basic mode too
- hot start : after reset, if you raise the combo again, only start ticking down after a whole second. - hot start : after reset, if you raise the combo again, only start ticking down after a whole second.
@ -374,6 +377,8 @@ Other translation are very welcome, contact me if you'd like to submit one.
- accelerometer controls coins and balls - accelerometer controls coins and balls
- [colin] side pucks - same as above but with two side pucks : hard to know where to put them - [colin] side pucks - same as above but with two side pucks : hard to know where to put them
- [colin] Perk: second puck in the middle of the screen - [colin] Perk: second puck in the middle of the screen
- [colin] Sponge Ball : the ball stores coins it collides with, and releases them when bouncing on any border (left, right, top).
## ideas to sort ## ideas to sort
- wind : move coins based on puck movement not position - wind : move coins based on puck movement not position

85
dist/index.html vendored

File diff suppressed because one or more lines are too long

View file

@ -1358,5 +1358,19 @@
"bricks": "BBtWWtBBBttWWttBtWWtttWtttWWWWtttttWWtttttWWWtttBWWtWttBBBtttWBB", "bricks": "BBtWWtBBBttWWttBtWWtttWtttWWWWtttttWWtttttWWWtttBWWtWttBBBtttWBB",
"svg": null, "svg": null,
"color": "" "color": ""
},
{
"name": "icon:three_cushion",
"size": 8,
"bricks": "BkkkkkkBk___W__kk__W_W_kk_W___WkkW___y_kk_W____kk__W___kBkkkkkkB",
"svg": null,
"color": ""
},
{
"name": "icon:sticky_coins",
"size": 8,
"bricks": "__________yy_yy___tttty__ytttt___ytttt____tttty______yy_________",
"svg": null,
"color": ""
} }
] ]

View file

@ -248,8 +248,7 @@ setInterval(() => {
}, 1000); }, 1000);
export async function openUpgradesPicker(gameState: GameState) { export async function openUpgradesPicker(gameState: GameState) {
const catchRate = const catchRate = (gameState.score - gameState.levelStartScore) /
(gameState.score - gameState.levelStartScore) /
(gameState.levelSpawnedCoins || 1); (gameState.levelSpawnedCoins || 1);
let repeats = 1; let repeats = 1;

View file

@ -139,6 +139,7 @@ export function resetBalls(gameState: GameState) {
piercePoints: gameState.perks.pierce * 3, piercePoints: gameState.perks.pierce * 3,
hitSinceBounce: 0, hitSinceBounce: 0,
brokenSinceBounce: 0, brokenSinceBounce: 0,
sidesHitsSinceBounce: 0,
sapperUses: 0, sapperUses: 0,
}); });
} }
@ -160,6 +161,7 @@ export function putBallsAtPuck(gameState: GameState) {
ball.previousY = ball.y; ball.previousY = ball.y;
ball.hitSinceBounce = 0; ball.hitSinceBounce = 0;
ball.brokenSinceBounce = 0; ball.brokenSinceBounce = 0;
ball.sidesHitsSinceBounce = 0;
ball.piercePoints = gameState.perks.pierce * 3; ball.piercePoints = gameState.perks.pierce * 3;
}); });
} }
@ -959,7 +961,7 @@ export function bordersHitCheck(
let vhit = 0, let vhit = 0,
hhit = 0; hhit = 0;
if (coin.x < gameState.offsetXRoundedDown + radius) { if (coin.x < gameState.offsetXRoundedDown + radius && gameState.perks.left_is_lava < 2) {
coin.x = coin.x =
gameState.offsetXRoundedDown + gameState.offsetXRoundedDown +
radius + radius +
@ -967,12 +969,12 @@ export function bordersHitCheck(
coin.vx *= -1; coin.vx *= -1;
hhit = 1; hhit = 1;
} }
if (coin.y < radius) { if (coin.y < radius && gameState.perks.top_is_lava < 2) {
coin.y = radius + (radius - coin.y); coin.y = radius + (radius - coin.y);
coin.vy *= -1; coin.vy *= -1;
vhit = 1; vhit = 1;
} }
if (coin.x > gameState.canvasWidth - gameState.offsetXRoundedDown - radius) { if (coin.x > gameState.canvasWidth - gameState.offsetXRoundedDown - radius && gameState.perks.right_is_lava < 2) {
coin.x = coin.x =
gameState.canvasWidth - gameState.canvasWidth -
gameState.offsetXRoundedDown - gameState.offsetXRoundedDown -
@ -1266,15 +1268,23 @@ export function gameStateTick(
) { ) {
addToScore(gameState, coin); addToScore(gameState, coin);
destroy(gameState.coins, coinIndex); destroy(gameState.coins, coinIndex);
} else if (coin.y > gameState.canvasHeight + coinRadius * 10) { } else if (
coin.y > gameState.canvasHeight + coinRadius * 10 ||
coin.y < -coinRadius * 10 ||
coin.x < -coinRadius * 10 ||
coin.x > gameState.canvasWidth + coinRadius * 10
) {
gameState.levelLostCoins += coin.points; gameState.levelLostCoins += coin.points;
destroy(gameState.coins, coinIndex); destroy(gameState.coins, coinIndex);
if ( if (
gameState.combo < gameState.perks.fountain_toss * 30 && gameState.combo < gameState.perks.fountain_toss * 30 &&
Math.random() < (1 / gameState.combo) * gameState.perks.fountain_toss Math.random() / coin.points < (1 / gameState.combo) * gameState.perks.fountain_toss
) { ) {
increaseCombo(gameState, 1, coin.x, gameState.gameZoneHeight - 20); increaseCombo(gameState, 1,
clamp(coin.x,20, gameState.canvasWidth-20 ),
clamp(coin.y,20, gameState.gameZoneHeight-20 )
);
} }
} }
@ -1419,7 +1429,7 @@ export function gameStateTick(
) { ) {
// The red should still be visible on a white bg // The red should still be visible on a white bg
if (gameState.perks.top_is_lava) { if (gameState.perks.top_is_lava == 1) {
makeParticle( makeParticle(
gameState, gameState,
gameState.offsetXRoundedDown + gameState.offsetXRoundedDown +
@ -1434,7 +1444,7 @@ export function gameStateTick(
); );
} }
if (gameState.perks.left_is_lava) { if (gameState.perks.left_is_lava == 1) {
makeParticle( makeParticle(
gameState, gameState,
gameState.offsetXRoundedDown, gameState.offsetXRoundedDown,
@ -1448,7 +1458,7 @@ export function gameStateTick(
); );
} }
if (gameState.perks.right_is_lava) { if (gameState.perks.right_is_lava == 1) {
makeParticle( makeParticle(
gameState, gameState,
gameState.offsetXRoundedDown + gameState.gameZoneWidthRoundedUp, gameState.offsetXRoundedDown + gameState.gameZoneWidthRoundedUp,
@ -1640,6 +1650,12 @@ export function ballTick(gameState: GameState, ball: Ball, frames: number) {
frames, frames,
); );
if (borderHitCode) { if (borderHitCode) {
ball.sidesHitsSinceBounce++
if (ball.sidesHitsSinceBounce <= gameState.perks.three_cushion * 3) {
increaseCombo(gameState, 1, ball.x, ball.y);
}
if ( if (
gameState.perks.left_is_lava && gameState.perks.left_is_lava &&
borderHitCode % 2 && borderHitCode % 2 &&
@ -1741,13 +1757,20 @@ export function ballTick(gameState: GameState, ball: Ball, frames: number) {
gameState.runStatistics.puck_bounces++; gameState.runStatistics.puck_bounces++;
ball.hitSinceBounce = 0; ball.hitSinceBounce = 0;
ball.brokenSinceBounce = 0; ball.brokenSinceBounce = 0;
ball.sidesHitsSinceBounce = 0;
ball.sapperUses = 0; ball.sapperUses = 0;
ball.piercePoints = gameState.perks.pierce * 3; ball.piercePoints = gameState.perks.pierce * 3;
} }
if ( if (
gameState.running && gameState.running &&
ball.y > gameState.gameZoneHeight + gameState.ballSize / 2 (
ball.y > gameState.gameZoneHeight + gameState.ballSize / 2 ||
ball.y < -gameState.gameZoneHeight ||
ball.x < -gameState.gameZoneHeight ||
ball.x > gameState.canvasWidth + gameState.gameZoneHeight
)
) { ) {
ball.destroyed = true; ball.destroyed = true;
gameState.runStatistics.balls_lost++; gameState.runStatistics.balls_lost++;
@ -1780,6 +1803,9 @@ export function ballTick(gameState: GameState, ball: Ball, frames: number) {
const initialBrickColor = gameState.bricks[hitBrick]; const initialBrickColor = gameState.bricks[hitBrick];
ball.hitSinceBounce++; ball.hitSinceBounce++;
if (!ball.sidesHitsSinceBounce && gameState.perks.three_cushion) {
resetCombo(gameState, ball.x, ball.y);
}
if (gameState.perks.nbricks) { if (gameState.perks.nbricks) {
if (ball.hitSinceBounce > gameState.perks.nbricks) { if (ball.hitSinceBounce > gameState.perks.nbricks) {
resetCombo(gameState, ball.x, ball.y); resetCombo(gameState, ball.x, ball.y);
@ -1824,7 +1850,6 @@ export function ballTick(gameState: GameState, ball: Ball, frames: number) {
if (!gameState.brickHP[hitBrick]) { if (!gameState.brickHP[hitBrick]) {
ball.brokenSinceBounce++; ball.brokenSinceBounce++;
applyOttawaTreatyPerk(gameState, hitBrick, ball) applyOttawaTreatyPerk(gameState, hitBrick, ball)
explodeBrick(gameState, hitBrick, ball, false); explodeBrick(gameState, hitBrick, ball, false);
if ( if (
@ -1835,6 +1860,8 @@ export function ballTick(gameState: GameState, ball: Ball, frames: number) {
setBrick(gameState, hitBrick, "black"); setBrick(gameState, hitBrick, "black");
ball.sapperUses++; ball.sapperUses++;
} }
} else { } else {
schedulGameSound(gameState, "wallBeep", x, 1); schedulGameSound(gameState, "wallBeep", x, 1);
makeLight( makeLight(
@ -2130,11 +2157,11 @@ function goToNearestBrick(
function applyOttawaTreatyPerk(gameState: GameState, index: number, ball: Ball) { function applyOttawaTreatyPerk(gameState: GameState, index: number, ball: Ball) {
if (!gameState.perks.ottawa_treaty) return console.log('!gameState.perks.ottawa_treaty') if (!gameState.perks.ottawa_treaty) return
if (ball.sapperUses) return console.log('ball.sapperUses') if (ball.sapperUses) return
const originalColor = gameState.bricks[index] const originalColor = gameState.bricks[index]
if (originalColor == 'black') return console.log("originalColor == 'black'") if (originalColor == 'black') return
const x = index % gameState.gridSize const x = index % gameState.gridSize
const y = Math.floor(index / gameState.gridSize) const y = Math.floor(index / gameState.gridSize)
let converted = 0 let converted = 0
@ -2143,17 +2170,17 @@ function applyOttawaTreatyPerk(gameState: GameState, index: number,ball:Ball) {
if (dx || dy) { if (dx || dy) {
const nIndex = getRowColIndex(gameState, y + dy, x + dx) const nIndex = getRowColIndex(gameState, y + dy, x + dx)
if (gameState.bricks[nIndex] && gameState.bricks[nIndex] === 'black') { if (gameState.bricks[nIndex] && gameState.bricks[nIndex] === 'black') {
console.log('converted brick '+nIndex+ ' from '+gameState.bricks[nIndex] + ' to '+originalColor)
setBrick(gameState, nIndex, originalColor) setBrick(gameState, nIndex, originalColor)
schedulGameSound(gameState, "colorChange", brickCenterX(gameState, index), 1) schedulGameSound(gameState, "colorChange", brickCenterX(gameState, index), 1)
// Avoid infinite bricks generation hack // Avoid infinite bricks generation hack
ball.sapperUses = Infinity ball.sapperUses = Infinity
converted++ converted++
// Don't convert more than one brick per hit normally // Don't convert more than one brick per hit normally
if(converted>=gameState.perks.ottawa_treaty) return console.log("converted>=gameState.perks.ottawa_treaty"); if (converted >= gameState.perks.ottawa_treaty) return
} }
} }
return console.log("done",converted); return
} }

View file

@ -408,6 +408,9 @@
"upgrades.soft_reset.name": "إعادة الضبط الناعمة", "upgrades.soft_reset.name": "إعادة الضبط الناعمة",
"upgrades.soft_reset.tooltip": "إعادة تعيين المجموعة تحافظ على {{percent}}%", "upgrades.soft_reset.tooltip": "إعادة تعيين المجموعة تحافظ على {{percent}}%",
"upgrades.soft_reset.verbose_description": "الحد من تأثير إعادة تعيين المجموعة.", "upgrades.soft_reset.verbose_description": "الحد من تأثير إعادة تعيين المجموعة.",
"upgrades.sticky_coins.name": "",
"upgrades.sticky_coins.tooltip": "",
"upgrades.sticky_coins.verbose_description": "",
"upgrades.streak_shots.name": "سلسلة الضربات", "upgrades.streak_shots.name": "سلسلة الضربات",
"upgrades.streak_shots.tooltip": "مزيد من العملات المعدنية إذا قمت بكسر العديد من الطوب قبل القفز على المجداف.", "upgrades.streak_shots.tooltip": "مزيد من العملات المعدنية إذا قمت بكسر العديد من الطوب قبل القفز على المجداف.",
"upgrades.streak_shots.verbose_description": "في كل مرة تكسر فيها لبنة، تزداد مجموعتك بمقدار واحد.\n\nولكن، بمجرد أن تلمس الكرة مضربك، تُعاد المجموعة إلى قيمتها الافتراضية.\n\nبمجرد أن تتجاوز مجموعتك القيمة الأساسية، سيُحاط مضربك بإطار أحمر لتذكيرك بأنه سيدمر مجموعتك إذا لمسته بالكرة.", "upgrades.streak_shots.verbose_description": "في كل مرة تكسر فيها لبنة، تزداد مجموعتك بمقدار واحد.\n\nولكن، بمجرد أن تلمس الكرة مضربك، تُعاد المجموعة إلى قيمتها الافتراضية.\n\nبمجرد أن تتجاوز مجموعتك القيمة الأساسية، سيُحاط مضربك بإطار أحمر لتذكيرك بأنه سيدمر مجموعتك إذا لمسته بالكرة.",
@ -421,6 +424,9 @@
"upgrades.telekinesis.name": "التحريك الذهني", "upgrades.telekinesis.name": "التحريك الذهني",
"upgrades.telekinesis.tooltip": "يتحكم المضرب في مسار الكرة", "upgrades.telekinesis.tooltip": "يتحكم المضرب في مسار الكرة",
"upgrades.telekinesis.verbose_description": "تتحكم بالكرة أثناء صعودها.", "upgrades.telekinesis.verbose_description": "تتحكم بالكرة أثناء صعودها.",
"upgrades.three_cushion.name": "",
"upgrades.three_cushion.tooltip": "",
"upgrades.three_cushion.verbose_description": "",
"upgrades.top_is_lava.name": "السماء هي الحد", "upgrades.top_is_lava.name": "السماء هي الحد",
"upgrades.top_is_lava.tooltip": "+{{lvl}} مجموعة لكل لبنة، يتم إعادة ضبطها عند الوصول إلى الجزء العلوي", "upgrades.top_is_lava.tooltip": "+{{lvl}} مجموعة لكل لبنة، يتم إعادة ضبطها عند الوصول إلى الجزء العلوي",
"upgrades.top_is_lava.verbose_description": "كلما كسرتَ لبنة، ستزداد مجموعتك بمقدار واحد. مع ذلك، ستُعاد ضبط مجموعتك بمجرد وصول الكرة إلى أعلى الشاشة.\n\nعندما تتجاوز مجموعتك الحد الأدنى، سيظهر شريط أحمر في الأعلى لتذكيرك بتجنب ضربها.", "upgrades.top_is_lava.verbose_description": "كلما كسرتَ لبنة، ستزداد مجموعتك بمقدار واحد. مع ذلك، ستُعاد ضبط مجموعتك بمجرد وصول الكرة إلى أعلى الشاشة.\n\nعندما تتجاوز مجموعتك الحد الأدنى، سيظهر شريط أحمر في الأعلى لتذكيرك بتجنب ضربها.",

View file

@ -14702,6 +14702,116 @@
</concept_node> </concept_node>
</children> </children>
</folder_node> </folder_node>
<folder_node>
<name>sticky_coins</name>
<children>
<concept_node>
<name>name</name>
<description/>
<comment/>
<translations>
<translation>
<language>ar-LB</language>
<approved>false</approved>
</translation>
<translation>
<language>de-DE</language>
<approved>false</approved>
</translation>
<translation>
<language>en-US</language>
<approved>false</approved>
</translation>
<translation>
<language>es-CL</language>
<approved>false</approved>
</translation>
<translation>
<language>fr-FR</language>
<approved>false</approved>
</translation>
<translation>
<language>ru-RU</language>
<approved>false</approved>
</translation>
<translation>
<language>tr-TR</language>
<approved>false</approved>
</translation>
</translations>
</concept_node>
<concept_node>
<name>tooltip</name>
<description/>
<comment/>
<translations>
<translation>
<language>ar-LB</language>
<approved>false</approved>
</translation>
<translation>
<language>de-DE</language>
<approved>false</approved>
</translation>
<translation>
<language>en-US</language>
<approved>false</approved>
</translation>
<translation>
<language>es-CL</language>
<approved>false</approved>
</translation>
<translation>
<language>fr-FR</language>
<approved>false</approved>
</translation>
<translation>
<language>ru-RU</language>
<approved>false</approved>
</translation>
<translation>
<language>tr-TR</language>
<approved>false</approved>
</translation>
</translations>
</concept_node>
<concept_node>
<name>verbose_description</name>
<description/>
<comment/>
<translations>
<translation>
<language>ar-LB</language>
<approved>false</approved>
</translation>
<translation>
<language>de-DE</language>
<approved>false</approved>
</translation>
<translation>
<language>en-US</language>
<approved>false</approved>
</translation>
<translation>
<language>es-CL</language>
<approved>false</approved>
</translation>
<translation>
<language>fr-FR</language>
<approved>false</approved>
</translation>
<translation>
<language>ru-RU</language>
<approved>false</approved>
</translation>
<translation>
<language>tr-TR</language>
<approved>false</approved>
</translation>
</translations>
</concept_node>
</children>
</folder_node>
<folder_node> <folder_node>
<name>streak_shots</name> <name>streak_shots</name>
<children> <children>
@ -15177,6 +15287,116 @@
</concept_node> </concept_node>
</children> </children>
</folder_node> </folder_node>
<folder_node>
<name>three_cushion</name>
<children>
<concept_node>
<name>name</name>
<description/>
<comment/>
<translations>
<translation>
<language>ar-LB</language>
<approved>false</approved>
</translation>
<translation>
<language>de-DE</language>
<approved>false</approved>
</translation>
<translation>
<language>en-US</language>
<approved>false</approved>
</translation>
<translation>
<language>es-CL</language>
<approved>false</approved>
</translation>
<translation>
<language>fr-FR</language>
<approved>false</approved>
</translation>
<translation>
<language>ru-RU</language>
<approved>false</approved>
</translation>
<translation>
<language>tr-TR</language>
<approved>false</approved>
</translation>
</translations>
</concept_node>
<concept_node>
<name>tooltip</name>
<description/>
<comment/>
<translations>
<translation>
<language>ar-LB</language>
<approved>false</approved>
</translation>
<translation>
<language>de-DE</language>
<approved>false</approved>
</translation>
<translation>
<language>en-US</language>
<approved>false</approved>
</translation>
<translation>
<language>es-CL</language>
<approved>false</approved>
</translation>
<translation>
<language>fr-FR</language>
<approved>false</approved>
</translation>
<translation>
<language>ru-RU</language>
<approved>false</approved>
</translation>
<translation>
<language>tr-TR</language>
<approved>false</approved>
</translation>
</translations>
</concept_node>
<concept_node>
<name>verbose_description</name>
<description/>
<comment/>
<translations>
<translation>
<language>ar-LB</language>
<approved>false</approved>
</translation>
<translation>
<language>de-DE</language>
<approved>false</approved>
</translation>
<translation>
<language>en-US</language>
<approved>false</approved>
</translation>
<translation>
<language>es-CL</language>
<approved>false</approved>
</translation>
<translation>
<language>fr-FR</language>
<approved>false</approved>
</translation>
<translation>
<language>ru-RU</language>
<approved>false</approved>
</translation>
<translation>
<language>tr-TR</language>
<approved>false</approved>
</translation>
</translations>
</concept_node>
</children>
</folder_node>
<folder_node> <folder_node>
<name>top_is_lava</name> <name>top_is_lava</name>
<children> <children>

View file

@ -58,10 +58,10 @@
"history.locked": "Mindestens zehn Spiele spielen, um freizuschalten", "history.locked": "Mindestens zehn Spiele spielen, um freizuschalten",
"history.title": "Läuft Geschichte", "history.title": "Läuft Geschichte",
"lab.help": "Versuchen Sie jede beliebige Konstruktion", "lab.help": "Versuchen Sie jede beliebige Konstruktion",
"lab.instructions": "", "lab.instructions": "Wähle Upgrades und ein Level aus und klicke dann oben auf die Schaltfläche „Play“",
"lab.menu_entry": "Kreativ-Modus", "lab.menu_entry": "Kreativ-Modus",
"lab.play": "", "lab.play": "Spielen",
"lab.reset": "", "lab.reset": "Zurücksetzen",
"lab.select_level": "Wählen Sie einen Level zum Spielen", "lab.select_level": "Wählen Sie einen Level zum Spielen",
"lab.unlocks_at": "Wird freigeschaltet bei Gesamtpunktzahl {{score}}", "lab.unlocks_at": "Wird freigeschaltet bei Gesamtpunktzahl {{score}}",
"level_up.after_buttons": "Du hast gerade Level {{level}}/{{max}}beendet.", "level_up.after_buttons": "Du hast gerade Level {{level}}/{{max}}beendet.",
@ -163,8 +163,8 @@
"score_panel.title": "{{score}} Punkte auf Stufe {{level}}/{{max}} ", "score_panel.title": "{{score}} Punkte auf Stufe {{level}}/{{max}} ",
"score_panel.upcoming_levels": "Kommende Stufen :", "score_panel.upcoming_levels": "Kommende Stufen :",
"score_panel.upgrades_picked": "Die in diesem Spiel gewählten Upgrades laufen:", "score_panel.upgrades_picked": "Die in diesem Spiel gewählten Upgrades laufen:",
"settings.autoplay": "", "settings.autoplay": "Automatisches Abspielen",
"settings.autoplay_help": "", "settings.autoplay_help": "Starten Sie eine Sitzung mit zufälligen Upgrades und einem computergesteuerten Paddel",
"settings.basic": "Grundlegende Grafiken", "settings.basic": "Grundlegende Grafiken",
"settings.basic_help": "Bessere Leistung.", "settings.basic_help": "Bessere Leistung.",
"settings.colorful_coins": "Bunte Münzen", "settings.colorful_coins": "Bunte Münzen",
@ -193,10 +193,10 @@
"settings.mobile_help": "Lässt Platz unter dem Paddel.", "settings.mobile_help": "Lässt Platz unter dem Paddel.",
"settings.pointer_lock": "Mauszeigersperre", "settings.pointer_lock": "Mauszeigersperre",
"settings.pointer_lock_help": "Sperrt und versteckt den Mauszeiger.", "settings.pointer_lock_help": "Sperrt und versteckt den Mauszeiger.",
"settings.precise_lighting": "", "settings.precise_lighting": "Präzise Beleuchtung",
"settings.precise_lighting_help": "", "settings.precise_lighting_help": "Verwenden Sie ein kleineres Raster für den Hintergrundlichteffekt",
"settings.probabilistic_lighting": "", "settings.probabilistic_lighting": "Persistenz des Sehens",
"settings.probabilistic_lighting_help": "", "settings.probabilistic_lighting_help": "Verbessern Sie die Leistung, wenn mehr als 150 Münzen vorhanden sind, indem Sie einen Teil des Lichts des vorherigen Frames wiederverwenden",
"settings.record": "Spielvideos aufnehmen", "settings.record": "Spielvideos aufnehmen",
"settings.record_download": "Video herunterladen ({{size}} MB)", "settings.record_download": "Video herunterladen ({{size}} MB)",
"settings.record_help": "Holen Sie sich ein Video von jedem Level.", "settings.record_help": "Holen Sie sich ein Video von jedem Level.",
@ -215,12 +215,12 @@
"settings.show_fps_help": "Überwachen Sie die Leistung der Anwendung", "settings.show_fps_help": "Überwachen Sie die Leistung der Anwendung",
"settings.show_stats": "Echtzeit-Statistiken anzeigen", "settings.show_stats": "Echtzeit-Statistiken anzeigen",
"settings.show_stats_help": "Münzen, Zeit, Sprünge, Fehlschüsse", "settings.show_stats_help": "Münzen, Zeit, Sprünge, Fehlschüsse",
"settings.smooth_lighting": "", "settings.smooth_lighting": "Sanfte Beleuchtung",
"settings.smooth_lighting_help": "", "settings.smooth_lighting_help": "Verwischen Sie die Lichteffekte im Hintergrund, damit sie weniger quadratisch aussehen. Erhöht die Verzögerung.",
"settings.sounds": "Spiel-Sounds", "settings.sounds": "Spiel-Sounds",
"settings.sounds_help": "Piepsen, Bloops und Brrrr", "settings.sounds_help": "Piepsen, Bloops und Brrrr",
"settings.stress_test": "", "settings.stress_test": "Stresstest",
"settings.stress_test_help": "", "settings.stress_test_help": "Starten Sie ein Bot-gesteuertes Spiel mit einer sehr hohen Anzahl an Münzen, um die Leistungsgrenzen Ihres Geräts zu testen.",
"starting_perks.checked": "Wenn Sie ein neues Spiel beginnen, wird Ihnen eine dieser Vergünstigungen angeboten. Klicken Sie auf eine Vergünstigung, um sie auszuschließen.", "starting_perks.checked": "Wenn Sie ein neues Spiel beginnen, wird Ihnen eine dieser Vergünstigungen angeboten. Klicken Sie auf eine Vergünstigung, um sie auszuschließen.",
"starting_perks.help": "Wählen Sie mögliche Start-Upgrades", "starting_perks.help": "Wählen Sie mögliche Start-Upgrades",
"starting_perks.random": "Alle Vorteile wurden gestrichen, die Auswahl erfolgt nach dem Zufallsprinzip.", "starting_perks.random": "Alle Vorteile wurden gestrichen, die Auswahl erfolgt nach dem Zufallsprinzip.",
@ -269,9 +269,9 @@
"upgrades.bricks_attract_coins.name": "Ziegelsteine ziehen Münzen an", "upgrades.bricks_attract_coins.name": "Ziegelsteine ziehen Münzen an",
"upgrades.bricks_attract_coins.tooltip": "Hilft ihnen, dort oben zu bleiben", "upgrades.bricks_attract_coins.tooltip": "Hilft ihnen, dort oben zu bleiben",
"upgrades.bricks_attract_coins.verbose_description": "", "upgrades.bricks_attract_coins.verbose_description": "",
"upgrades.buoy.name": "", "upgrades.buoy.name": "Boje",
"upgrades.buoy.tooltip": "", "upgrades.buoy.tooltip": "Münzen schweben {{duration}} Sekunden lang auf der unteren Linie.",
"upgrades.buoy.verbose_description": "", "upgrades.buoy.verbose_description": "Der Effekt ist im mobilen Modus am deutlichsten sichtbar",
"upgrades.clairvoyant.name": "Hellsichtig", "upgrades.clairvoyant.name": "Hellsichtig",
"upgrades.clairvoyant.tooltip": "Sehen Sie die nächsten Levels, die HP der Steine und die Ballrichtung", "upgrades.clairvoyant.tooltip": "Sehen Sie die nächsten Levels, die HP der Steine und die Ballrichtung",
"upgrades.clairvoyant.verbose_description": "Hilft dir, die richtigen Upgrades auszuwählen und zu verstehen, was es mit den robusten Steinen auf sich hat. Level 2 und 3 bringen zusätzliches Wissen von zweifelhaftem Nutzen (erreichbar im Loop-Modus)", "upgrades.clairvoyant.verbose_description": "Hilft dir, die richtigen Upgrades auszuwählen und zu verstehen, was es mit den robusten Steinen auf sich hat. Level 2 und 3 bringen zusätzliches Wissen von zweifelhaftem Nutzen (erreichbar im Loop-Modus)",
@ -343,9 +343,9 @@
"upgrades.one_more_choice.name": "Extra Auswahl", "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.tooltip": "Weitere Stufenaufstiege bieten {{lvl}} weitere Option(en) in der Liste",
"upgrades.one_more_choice.verbose_description": "Jedes Upgrade-Menü wird eine weitere Option enthalten. Erhöht nicht die Anzahl der Upgrades, die Sie auswählen können.", "upgrades.one_more_choice.verbose_description": "Jedes Upgrade-Menü wird eine weitere Option enthalten. Erhöht nicht die Anzahl der Upgrades, die Sie auswählen können.",
"upgrades.ottawa_treaty.name": "", "upgrades.ottawa_treaty.name": "Ottawa-Vertrag",
"upgrades.ottawa_treaty.tooltip": "", "upgrades.ottawa_treaty.tooltip": "Das Zerschlagen eines Ziegelsteins in der Nähe einer Bombe entschärft diese",
"upgrades.ottawa_treaty.verbose_description": "", "upgrades.ottawa_treaty.verbose_description": "Die nahe Bombe wird durch einen farbigen Block ersetzt. Wenn du einen Pionier hast, verliert der Ball seinen Pioniereffekt bis zum nächsten Aufprall. Es kann immer nur eine Bombe ersetzt werden.",
"upgrades.passive_income.name": "Passives Einkommen", "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ückgesetzt", "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ückgesetzt",
"upgrades.passive_income.verbose_description": "Einige Vergünstigungen können den Bällen helfen, das zu tun, was du willst, ohne dass du etwas tun musst.", "upgrades.passive_income.verbose_description": "Einige Vergünstigungen können den Bällen helfen, das zu tun, was du willst, ohne dass du etwas tun musst.",
@ -408,6 +408,9 @@
"upgrades.soft_reset.name": "Weicher Reset", "upgrades.soft_reset.name": "Weicher Reset",
"upgrades.soft_reset.tooltip": "Combo-Rückstellungen halten {{percent}}%", "upgrades.soft_reset.tooltip": "Combo-Rückstellungen halten {{percent}}%",
"upgrades.soft_reset.verbose_description": "Begrenzen Sie die Auswirkungen eines Combo-Resets.", "upgrades.soft_reset.verbose_description": "Begrenzen Sie die Auswirkungen eines Combo-Resets.",
"upgrades.sticky_coins.name": "",
"upgrades.sticky_coins.tooltip": "",
"upgrades.sticky_coins.verbose_description": "",
"upgrades.streak_shots.name": "Glückssträhne", "upgrades.streak_shots.name": "Glückssträhne",
"upgrades.streak_shots.tooltip": "Mehr Münzen, wenn du viele Steine zerbrichst, bevor du auf das Paddel springst.", "upgrades.streak_shots.tooltip": "Mehr Münzen, wenn du viele Steine zerbrichst, bevor du auf das Paddel springst.",
"upgrades.streak_shots.verbose_description": "Jedes Mal, wenn du einen Stein zerbrichst, erhöht sich dein Combo um eins.\n\nSobald der Ball jedoch Ihr Paddel berührt, wird die Kombination auf ihren Standardwert zurückgesetzt.\n\nSobald deine Kombo den Basiswert übersteigt, wird dein Paddel rot umrandet, um dich daran zu erinnern, dass es deine Kombo zerstört, wenn du es mit dem Ball berührst.", "upgrades.streak_shots.verbose_description": "Jedes Mal, wenn du einen Stein zerbrichst, erhöht sich dein Combo um eins.\n\nSobald der Ball jedoch Ihr Paddel berührt, wird die Kombination auf ihren Standardwert zurückgesetzt.\n\nSobald deine Kombo den Basiswert übersteigt, wird dein Paddel rot umrandet, um dich daran zu erinnern, dass es deine Kombo zerstört, wenn du es mit dem Ball berührst.",
@ -421,6 +424,9 @@
"upgrades.telekinesis.name": "Telekinese", "upgrades.telekinesis.name": "Telekinese",
"upgrades.telekinesis.tooltip": "Das Paddel steuert die Flugbahn des Balls", "upgrades.telekinesis.tooltip": "Das Paddel steuert die Flugbahn des Balls",
"upgrades.telekinesis.verbose_description": "Du kontrollierst den Ball, während er nach oben fliegt.", "upgrades.telekinesis.verbose_description": "Du kontrollierst den Ball, während er nach oben fliegt.",
"upgrades.three_cushion.name": "Dreiband",
"upgrades.three_cushion.tooltip": "+1 Combo pro Treffer an den Seiten und von oben. Die Combo wird zurückgesetzt, wenn Sie einen Ziegel treffen, ohne vorher abzuprallen.",
"upgrades.three_cushion.verbose_description": "",
"upgrades.top_is_lava.name": "Der Himmel ist die Grenze", "upgrades.top_is_lava.name": "Der Himmel ist die Grenze",
"upgrades.top_is_lava.tooltip": "+{{lvl}} Combo pro Stein, wird zurückgesetzt, wenn die Spitze getroffen wird", "upgrades.top_is_lava.tooltip": "+{{lvl}} Combo pro Stein, wird zurückgesetzt, wenn die Spitze getroffen wird",
"upgrades.top_is_lava.verbose_description": "Jedes Mal, wenn du einen Stein zerbrichst, erhöht sich deine Kombo um eins. Allerdings wird deine Kombo zurückgesetzt, sobald dein Ball den oberen Rand des Bildschirms trifft.\n\nWenn deine Kombo über dem Minimum liegt, erscheint oben ein roter Balken, der dich daran erinnert, dass du es vermeiden solltest, ihn zu treffen.", "upgrades.top_is_lava.verbose_description": "Jedes Mal, wenn du einen Stein zerbrichst, erhöht sich deine Kombo um eins. Allerdings wird deine Kombo zurückgesetzt, sobald dein Ball den oberen Rand des Bildschirms trifft.\n\nWenn deine Kombo über dem Minimum liegt, erscheint oben ein roter Balken, der dich daran erinnert, dass du es vermeiden solltest, ihn zu treffen.",

View file

@ -408,6 +408,9 @@
"upgrades.soft_reset.name": "Soft reset", "upgrades.soft_reset.name": "Soft reset",
"upgrades.soft_reset.tooltip": "Combo resets keeps {{percent}}%", "upgrades.soft_reset.tooltip": "Combo resets keeps {{percent}}%",
"upgrades.soft_reset.verbose_description": "Limit the impact of a combo reset.", "upgrades.soft_reset.verbose_description": "Limit the impact of a combo reset.",
"upgrades.sticky_coins.name": "Dust bunnies",
"upgrades.sticky_coins.tooltip": "Coins stick to things, and can be dislodged by explosions",
"upgrades.sticky_coins.verbose_description": "",
"upgrades.streak_shots.name": "Hit streak", "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.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.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.",
@ -421,6 +424,9 @@
"upgrades.telekinesis.name": "Telekinesis", "upgrades.telekinesis.name": "Telekinesis",
"upgrades.telekinesis.tooltip": "Paddle controls the ball's trajectory", "upgrades.telekinesis.tooltip": "Paddle controls the ball's trajectory",
"upgrades.telekinesis.verbose_description": "You control the ball while it's going up. ", "upgrades.telekinesis.verbose_description": "You control the ball while it's going up. ",
"upgrades.three_cushion.name": "Three cushion",
"upgrades.three_cushion.tooltip": "+1 combo per hit on sides and top, up to +{{max}} per paddle bounce. Combo resets when you hit a brick without bouncing first. ",
"upgrades.three_cushion.verbose_description": "Every hit on a side will raise the combo by one, up to +3. After that, no combo will be gained until next paddle bounce. ",
"upgrades.top_is_lava.name": "Sky is the limit", "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.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.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. ",

View file

@ -408,6 +408,9 @@
"upgrades.soft_reset.name": "Restablecimiento progresivo", "upgrades.soft_reset.name": "Restablecimiento progresivo",
"upgrades.soft_reset.tooltip": "Al reiniciar el combo se conserva el {{percent}}% de los puntos", "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.soft_reset.verbose_description": "Limita el impacto de un reinicio de combo.",
"upgrades.sticky_coins.name": "",
"upgrades.sticky_coins.tooltip": "",
"upgrades.sticky_coins.verbose_description": "",
"upgrades.streak_shots.name": "Secuencia de destrucción", "upgrades.streak_shots.name": "Secuencia de destrucción",
"upgrades.streak_shots.tooltip": "Más piezas si rompes varios ladrillos a la vez.", "upgrades.streak_shots.tooltip": "Más 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á tu combo.", "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á tu combo.",
@ -421,6 +424,9 @@
"upgrades.telekinesis.name": "Telequinesis", "upgrades.telekinesis.name": "Telequinesis",
"upgrades.telekinesis.tooltip": "Control de la trayectoria del balón", "upgrades.telekinesis.tooltip": "Control de la trayectoria del balón",
"upgrades.telekinesis.verbose_description": "Controla la bola mientras sube.", "upgrades.telekinesis.verbose_description": "Controla la bola mientras sube.",
"upgrades.three_cushion.name": "",
"upgrades.three_cushion.tooltip": "",
"upgrades.three_cushion.verbose_description": "",
"upgrades.top_is_lava.name": "Icare", "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.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á en uno. Sin embargo, tu combo se reiniciará en cuanto tu bola llegue a la parte superior de la pantalla.\n\nCuando tu combo supere el mínimo, aparecerá una barra roja en la parte superior de la pantalla para recordarte que debes evitar golpearla.", "upgrades.top_is_lava.verbose_description": "Cada vez que rompas un ladrillo, tu combo aumentará en uno. Sin embargo, tu combo se reiniciará en cuanto tu bola llegue a la parte superior de la pantalla.\n\nCuando tu combo supere el mínimo, aparecerá una barra roja en la parte superior de la pantalla para recordarte que debes evitar golpearla.",

View file

@ -408,6 +408,9 @@
"upgrades.soft_reset.name": "Réinitialisation progressive", "upgrades.soft_reset.name": "Réinitialisation progressive",
"upgrades.soft_reset.tooltip": "La remise à zéro du combo conserve {{percent}}% des points", "upgrades.soft_reset.tooltip": "La remise à zéro du combo conserve {{percent}}% des points",
"upgrades.soft_reset.verbose_description": "Limite l'impact d'une réinitialisation du combo.", "upgrades.soft_reset.verbose_description": "Limite l'impact d'une réinitialisation du combo.",
"upgrades.sticky_coins.name": "",
"upgrades.sticky_coins.tooltip": "",
"upgrades.sticky_coins.verbose_description": "",
"upgrades.streak_shots.name": "Séquence de destruction", "upgrades.streak_shots.name": "Séquence de destruction",
"upgrades.streak_shots.tooltip": "Plus de pièces si vous cassez plusieurs briques à la fois.", "upgrades.streak_shots.tooltip": "Plus de pièces si vous cassez plusieurs briques à la fois.",
"upgrades.streak_shots.verbose_description": "Chaque fois que vous cassez une brique, votre combo augmente. Le combo est remis à zéro quand la balle touche la raquette. Une fois que votre combo dépasse la valeur de base, votre raquette devient rouge pour vous rappeler que le fait de la toucher avec la balle détruira votre combo.", "upgrades.streak_shots.verbose_description": "Chaque fois que vous cassez une brique, votre combo augmente. Le combo est remis à zéro quand la balle touche la raquette. Une fois que votre combo dépasse la valeur de base, votre raquette devient rouge pour vous rappeler que le fait de la toucher avec la balle détruira votre combo.",
@ -421,6 +424,9 @@
"upgrades.telekinesis.name": "Télékinésie", "upgrades.telekinesis.name": "Télékinésie",
"upgrades.telekinesis.tooltip": "Contrôler la trajectoire de la balle", "upgrades.telekinesis.tooltip": "Contrôler la trajectoire de la balle",
"upgrades.telekinesis.verbose_description": "Vous contrôlez la balle pendant qu'elle monte.", "upgrades.telekinesis.verbose_description": "Vous contrôlez la balle pendant qu'elle monte.",
"upgrades.three_cushion.name": "",
"upgrades.three_cushion.tooltip": "",
"upgrades.three_cushion.verbose_description": "",
"upgrades.top_is_lava.name": "Icare ", "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.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é. Cependant, votre combo sera réinitialisé dès que votre balle atteindra le haut de l'écran.\n\nLorsque votre combo est supérieur au minimum, une barre rouge apparaît en haut de l'écran pour vous rappeler que vous devez éviter de la frapper.", "upgrades.top_is_lava.verbose_description": "Chaque fois que vous cassez une brique, votre combo augmente d'une unité. Cependant, votre combo sera réinitialisé dès que votre balle atteindra le haut de l'écran.\n\nLorsque votre combo est supérieur au minimum, une barre rouge apparaît en haut de l'écran pour vous rappeler que vous devez éviter de la frapper.",

View file

@ -408,6 +408,9 @@
"upgrades.soft_reset.name": "Мягкий сброс", "upgrades.soft_reset.name": "Мягкий сброс",
"upgrades.soft_reset.tooltip": "Комбо-сброс сохраняет {{percent}}%", "upgrades.soft_reset.tooltip": "Комбо-сброс сохраняет {{percent}}%",
"upgrades.soft_reset.verbose_description": "Ограничьте влияние комбо-сброса.", "upgrades.soft_reset.verbose_description": "Ограничьте влияние комбо-сброса.",
"upgrades.sticky_coins.name": "",
"upgrades.sticky_coins.tooltip": "",
"upgrades.sticky_coins.verbose_description": "",
"upgrades.streak_shots.name": "Попадание в полосу", "upgrades.streak_shots.name": "Попадание в полосу",
"upgrades.streak_shots.tooltip": "Больше монет, если вы разобьете много кирпичей, прежде чем подпрыгнуть на лопатке.", "upgrades.streak_shots.tooltip": "Больше монет, если вы разобьете много кирпичей, прежде чем подпрыгнуть на лопатке.",
"upgrades.streak_shots.verbose_description": "Каждый раз, когда вы разбиваете кирпич, ваше комбо увеличивается на единицу.\n\nОднако как только мяч коснется вашего весла, комбо будет сброшено до стандартного значения.\n\nКак только ваше комбо поднимется выше базового значения, на лопатке появится красная рамка, напоминающая о том, что прикосновение мяча к ней уничтожит ваше комбо.", "upgrades.streak_shots.verbose_description": "Каждый раз, когда вы разбиваете кирпич, ваше комбо увеличивается на единицу.\n\nОднако как только мяч коснется вашего весла, комбо будет сброшено до стандартного значения.\n\nКак только ваше комбо поднимется выше базового значения, на лопатке появится красная рамка, напоминающая о том, что прикосновение мяча к ней уничтожит ваше комбо.",
@ -421,6 +424,9 @@
"upgrades.telekinesis.name": "Телекинез", "upgrades.telekinesis.name": "Телекинез",
"upgrades.telekinesis.tooltip": "Паддл управляет траекторией полета мяча", "upgrades.telekinesis.tooltip": "Паддл управляет траекторией полета мяча",
"upgrades.telekinesis.verbose_description": "Вы управляете мячом, пока он поднимается вверх.", "upgrades.telekinesis.verbose_description": "Вы управляете мячом, пока он поднимается вверх.",
"upgrades.three_cushion.name": "",
"upgrades.three_cushion.tooltip": "",
"upgrades.three_cushion.verbose_description": "",
"upgrades.top_is_lava.name": "Небо - это предел", "upgrades.top_is_lava.name": "Небо - это предел",
"upgrades.top_is_lava.tooltip": "+{{lvl}} комбо за кирпич, сбрасывается при ударе сверху", "upgrades.top_is_lava.tooltip": "+{{lvl}} комбо за кирпич, сбрасывается при ударе сверху",
"upgrades.top_is_lava.verbose_description": "Каждый раз, когда вы разбиваете кирпич, ваше комбо увеличивается на один. Однако, как только ваш мяч попадет в верхнюю часть экрана, комбо обнуляется.\n\nКогда ваше комбо превысит минимальное значение, вверху появится красная полоска, напоминающая о том, что вам следует избегать ударов.", "upgrades.top_is_lava.verbose_description": "Каждый раз, когда вы разбиваете кирпич, ваше комбо увеличивается на один. Однако, как только ваш мяч попадет в верхнюю часть экрана, комбо обнуляется.\n\nКогда ваше комбо превысит минимальное значение, вверху появится красная полоска, напоминающая о том, что вам следует избегать ударов.",

View file

@ -408,6 +408,9 @@
"upgrades.soft_reset.name": "Yumuşak sıfırlama", "upgrades.soft_reset.name": "Yumuşak sıfırlama",
"upgrades.soft_reset.tooltip": "Kombo sıfırlamaları % {{percent}}tutar", "upgrades.soft_reset.tooltip": "Kombo sıfırlamaları % {{percent}}tutar",
"upgrades.soft_reset.verbose_description": "Bir kombo sıfırlamanın etkisini sınırlayın.", "upgrades.soft_reset.verbose_description": "Bir kombo sıfırlamanın etkisini sınırlayın.",
"upgrades.sticky_coins.name": "",
"upgrades.sticky_coins.tooltip": "",
"upgrades.sticky_coins.verbose_description": "",
"upgrades.streak_shots.name": "Vuruş serisi", "upgrades.streak_shots.name": "Vuruş serisi",
"upgrades.streak_shots.tooltip": "Kürek çekmeden önce çok sayıda tuğla kırarsanız daha fazla para kazanırsınız.", "upgrades.streak_shots.tooltip": "Kürek çekmeden önce çok sayıda tuğla kırarsanız daha fazla para kazanırsınız.",
"upgrades.streak_shots.verbose_description": "Her tuğlayı kırdığınızda, kombonuz bir artar. \n\nAncak, top küreğinize değdiği anda kombo varsayılan değerine sıfırlanır.\n\nKombonuz temel değerin üzerine çıktığında, küreğinizin topla dokunduğunuzda kombonuzu yok edeceğini size hatırlatmak için kırmızı bir kenarı olacaktır.", "upgrades.streak_shots.verbose_description": "Her tuğlayı kırdığınızda, kombonuz bir artar. \n\nAncak, top küreğinize değdiği anda kombo varsayılan değerine sıfırlanır.\n\nKombonuz temel değerin üzerine çıktığında, küreğinizin topla dokunduğunuzda kombonuzu yok edeceğini size hatırlatmak için kırmızı bir kenarı olacaktır.",
@ -421,6 +424,9 @@
"upgrades.telekinesis.name": "Telekinezi", "upgrades.telekinesis.name": "Telekinezi",
"upgrades.telekinesis.tooltip": "Kürek topun yörüngesini kontrol eder", "upgrades.telekinesis.tooltip": "Kürek topun yörüngesini kontrol eder",
"upgrades.telekinesis.verbose_description": "Top yukarı doğru giderken onu kontrol ediyorsun.", "upgrades.telekinesis.verbose_description": "Top yukarı doğru giderken onu kontrol ediyorsun.",
"upgrades.three_cushion.name": "",
"upgrades.three_cushion.tooltip": "",
"upgrades.three_cushion.verbose_description": "",
"upgrades.top_is_lava.name": "Sınır gökyüzüdür", "upgrades.top_is_lava.name": "Sınır gökyüzüdür",
"upgrades.top_is_lava.tooltip": "Tuğla başına +{{lvl}} kombo, tepeye vurulduğunda sıfırlanır", "upgrades.top_is_lava.tooltip": "Tuğla başına +{{lvl}} kombo, tepeye vurulduğunda sıfırlanır",
"upgrades.top_is_lava.verbose_description": "Bir tuğlayı kırdığınızda, kombonuz bir artar. Ancak, topunuz ekranın tepesine çarptığı anda kombonuz sıfırlanır. \n\nKombonuz minimumun üzerinde olduğunda, ona çarpmamanız gerektiğini hatırlatmak için üstte kırmızı bir çubuk belirir.", "upgrades.top_is_lava.verbose_description": "Bir tuğlayı kırdığınızda, kombonuz bir artar. Ancak, topunuz ekranın tepesine çarptığı anda kombonuz sıfırlanır. \n\nKombonuz minimumun üzerinde olduğunda, ona çarpmamanız gerektiğini hatırlatmak için üstte kırmızı bir çubuk belirir.",

View file

@ -75,8 +75,11 @@ export function render(gameState: GameState) {
} }
const catchRate = gameState.levelSpawnedCoins const catchRate = gameState.levelSpawnedCoins
? (gameState.levelSpawnedCoins - gameState.levelLostCoins) / ?
gameState.levelSpawnedCoins (gameState.score - gameState.levelStartScore) /
(gameState.levelSpawnedCoins || 1)
// (gameState.levelSpawnedCoins - gameState.levelLostCoins) /
// gameState.levelSpawnedCoins
: 1; : 1;
startWork("render:scoreDisplay"); startWork("render:scoreDisplay");
scoreDisplay.innerHTML = scoreDisplay.innerHTML =
@ -496,6 +499,7 @@ export function render(gameState: GameState) {
if (gameState.offsetXRoundedDown) { if (gameState.offsetXRoundedDown) {
// draw outside of gaming area to avoid capturing borders in recordings // draw outside of gaming area to avoid capturing borders in recordings
if(gameState.perks.left_is_lava<2)
drawStraightLine( drawStraightLine(
ctx, ctx,
gameState, gameState,
@ -506,7 +510,7 @@ export function render(gameState: GameState) {
height, height,
1, 1,
); );
if(gameState.perks.right_is_lava<2)
drawStraightLine( drawStraightLine(
ctx, ctx,
gameState, gameState,
@ -518,6 +522,8 @@ export function render(gameState: GameState) {
1, 1,
); );
} else { } else {
if(gameState.perks.left_is_lava<2)
drawStraightLine( drawStraightLine(
ctx, ctx,
gameState, gameState,
@ -529,6 +535,7 @@ export function render(gameState: GameState) {
1, 1,
); );
if(gameState.perks.right_is_lava<2)
drawStraightLine( drawStraightLine(
ctx, ctx,
gameState, gameState,
@ -540,7 +547,8 @@ export function render(gameState: GameState) {
1, 1,
); );
} }
if (redTop)
if (redTop && gameState.perks.top_is_lava<2)
drawStraightLine( drawStraightLine(
ctx, ctx,
gameState, gameState,

1
src/types.d.ts vendored
View file

@ -103,6 +103,7 @@ export type Ball = {
hitSinceBounce: number; hitSinceBounce: number;
// Brick was really broken ,but could have been respawned as a bomb // Brick was really broken ,but could have been respawned as a bomb
brokenSinceBounce: number; brokenSinceBounce: number;
sidesHitsSinceBounce: number;
sapperUses: number; sapperUses: number;
destroyed?: boolean; destroyed?: boolean;
}; };

View file

@ -846,4 +846,25 @@ export const rawUpgrades = [
help: () =>t("upgrades.ottawa_treaty.tooltip"), help: () =>t("upgrades.ottawa_treaty.tooltip"),
fullHelp: t("upgrades.ottawa_treaty.verbose_description"), fullHelp: t("upgrades.ottawa_treaty.verbose_description"),
}, },
{
requires: "",
threshold: 230000,
gift: false,
id: "three_cushion",
max: 1,
name: t("upgrades.three_cushion.name"),
help: (lvl:number) =>t("upgrades.three_cushion.tooltip",{max:lvl*3}),
fullHelp: t("upgrades.three_cushion.verbose_description"),
},
{
requires: "",
threshold: 235000,
gift: false,
id: "sticky_coins",
max: 1,
name: t("upgrades.sticky_coins.name"),
help: (lvl:number) =>t("upgrades.sticky_coins.tooltip"),
fullHelp: t("upgrades.sticky_coins.verbose_description"),
},
] as const; ] as const;