This commit is contained in:
Renan LE CARO 2025-04-21 13:16:16 +02:00
parent 6b6e393d3b
commit 5ba93500b4
14 changed files with 548 additions and 561 deletions

View file

@ -24,6 +24,7 @@ Other translation are very welcome, contact me if you'd like to submit one.
## To do
## Done
- new perk : sticky coins (coins stick to bricks)
- 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

868
dist/index.html vendored

File diff suppressed because one or more lines are too long

View file

@ -50,7 +50,7 @@ import {
} from "./game";
import {stopRecording} from "./recording";
import {isOptionOn} from "./options";
import {clamp, comboKeepingRate} from "./pure_functions";
import {clamp, coinsBoostedCombo, comboKeepingRate, shouldCoinsStick} from "./pure_functions";
import {addToTotalScore} from "./addToTotalScore";
import {hashCode} from "./getLevelBackground";
@ -219,7 +219,6 @@ export function baseCombo(gameState: GameState) {
return (
1 +
gameState.perks.base_combo * 3 +
gameState.perks.smaller_puck * 5 +
mineFieldBonus
);
}
@ -385,7 +384,7 @@ export function explosionAt(
c.vx += (((dx / d2) * 10 * size) / c.weight) * factor;
c.vy += (((dy / d2) * 10 * size) / c.weight) * factor;
});
gameState.lastExplosion = Date.now();
gameState.lastExplosion = gameState.levelTime;
if (gameState.perks.implosions) {
spawnImplosion(gameState, 7 * size, x, y, "#FFFFFF");
@ -419,10 +418,6 @@ export function explodeBrick(
const x = brickCenterX(gameState, index),
y = 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) {
@ -437,25 +432,7 @@ export function explodeBrick(
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 +
(ballTransparency(ball, gameState) * gameState.perks.transparency) /
2),
);
}
let coinsToSpawn = coinsBoostedCombo(gameState)
gameState.levelSpawnedCoins += coinsToSpawn;
gameState.runStatistics.coins_spawned += coinsToSpawn;
@ -565,7 +542,7 @@ export function explodeBrick(
resetCombo(gameState, ball.x, ball.y);
}
schedulGameSound(gameState, "colorChange", ball.x, 0.8);
gameState.lastExplosion = gameState.levelTime;
// gameState.lastExplosion = gameState.levelTime;
gameState.ballsColor = color;
if (!isOptionOn("basic")) {
gameState.balls.forEach((ball) => {
@ -905,34 +882,41 @@ export function coinBrickHitCheck(gameState: GameState, coin: Coin) {
hitsSomething(x, y, radius)) ||
undefined;
if (gameState.perks.ghost_coins) {
// slow down
if (typeof (vhit ?? hhit ?? chit) !== "undefined") {
if (typeof (vhit ?? hhit ?? chit) !== "undefined") {
if (shouldCoinsStick(gameState)) {
if(coin.collidedLastFrame) {
coin.x = previousX
coin.y = previousY
}
coin.vx = 0
coin.vy = 0
} else if (gameState.perks.ghost_coins) {
// slow down
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;
} else {
if (typeof vhit !== "undefined" || typeof chit !== "undefined") {
coin.y = coin.previousY;
coin.vy *= -1;
// Roll on corners
const leftHit = gameState.bricks[brickIndex(x - radius, y + radius)];
const rightHit = gameState.bricks[brickIndex(x + radius, y + radius)];
// Roll on corners
const leftHit = gameState.bricks[brickIndex(x - radius, y + radius)];
const rightHit = gameState.bricks[brickIndex(x + radius, y + radius)];
if (leftHit && !rightHit) {
coin.vx += 1;
coin.sa -= 1;
if (leftHit && !rightHit) {
coin.vx += 1;
coin.sa -= 1;
}
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;
}
}
if (typeof hhit !== "undefined" || typeof chit !== "undefined") {
coin.x = coin.previousX;
coin.vx *= -1;
}
}
return vhit ?? hhit ?? chit;
}
@ -985,6 +969,7 @@ export function bordersHitCheck(
hhit = 1;
}
return hhit + vhit * 2;
}
@ -1227,7 +1212,10 @@ export function gameStateTick(
}
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 &&
@ -1282,8 +1270,8 @@ export function gameStateTick(
Math.random() / coin.points < (1 / gameState.combo) * gameState.perks.fountain_toss
) {
increaseCombo(gameState, 1,
clamp(coin.x,20, gameState.canvasWidth-20 ),
clamp(coin.y,20, gameState.gameZoneHeight-20 )
clamp(coin.x, 20, gameState.canvasWidth - 20),
clamp(coin.y, 20, gameState.gameZoneHeight - 20)
);
}
}
@ -1314,6 +1302,7 @@ export function gameStateTick(
}
}
// Sound and slow down
if (
(!gameState.perks.ghost_coins && typeof hitBrick !== "undefined") ||
hitBorder
@ -1328,10 +1317,12 @@ export function gameStateTick(
if (speed > 20 && !coin.collidedLastFrame) {
schedulGameSound(gameState, "coinBounce", coin.x, 0.2);
}
coin.collidedLastFrame = true;
} else {
coin.collidedLastFrame = false;
}
// remember collision
coin.collidedLastFrame = !!(
typeof hitBrick !== "undefined" ||
hitBorder
)
});
gameState.balls.forEach((ball) => ballTick(gameState, ball, frames));

View file

@ -303,7 +303,7 @@
"upgrades.forgiving.verbose_description": "أول خطأ في كل مستوى مجاني، ثم 10% من المجموعة، ثم 20% ..",
"upgrades.fountain_toss.name": "رمي النافورة",
"upgrades.fountain_toss.tooltip": "احصل على بعض المجموعات عندما تفوت بعض العملات المعدنية.",
"upgrades.fountain_toss.verbose_description": "عندما تفوتك عملة معدنية وكان مجموعتك أقل من {{max}}، فإن مجموعتك لديها احتمالية {{lvl}}/مجموعة لتنمو بمقدار واحد.",
"upgrades.fountain_toss.verbose_description": "",
"upgrades.ghost_coins.name": "عملات الأشباح",
"upgrades.ghost_coins.tooltip": "تمر العملات المعدنية ببطء عبر الطوب",
"upgrades.ghost_coins.verbose_description": "إنها ليست مشكلة، بل ميزة! تتحرك العملات المعدنية ببطء عبر الطوب. المستويات الأعلى تسمح لها بالتحرك بشكل أسرع.",
@ -401,10 +401,9 @@
"upgrades.slow_down.name": "كرة أبطأ",
"upgrades.slow_down.tooltip": "الكرة تتحرك بشكل أبطأ",
"upgrades.slow_down.verbose_description": "تبدأ الكرة ببطء نسبيًا، لكنها ستتسارع قليلًا مع كل مستوى.\n\nكما ستتسارع إذا قضيت وقتًا طويلًا في مستوى واحد.\n\nهذه الميزة تجعلها أسهل في التحكم.\n\nيمكنك الحصول عليها في البداية دائمًا بتفعيل وضع الأطفال في القائمة.",
"upgrades.smaller_puck.help_plural": "مجموعة مجداف أصغر وقاعدة أعلى",
"upgrades.smaller_puck.name": "مجداف أصغر",
"upgrades.smaller_puck.tooltip": "يمنح أيضًا +5 مجموعة أساسية",
"upgrades.smaller_puck.verbose_description": "هذا يُصغّر حجم المجداف، مما يُسهّل نظريًا بعض الضربات الزاوية، ولكنه في الواقع يزيد من الصعوبة.\n\nلهذا السبب ستحصل أيضًا على مكافأة رائعة قدرها +٥ عملات لكل طوبة تُكسرها بعد التقاط هذا.",
"upgrades.smaller_puck.tooltip": "",
"upgrades.smaller_puck.verbose_description": "",
"upgrades.soft_reset.name": "إعادة الضبط الناعمة",
"upgrades.soft_reset.tooltip": "إعادة تعيين المجموعة تحافظ على {{percent}}%",
"upgrades.soft_reset.verbose_description": "الحد من تأثير إعادة تعيين المجموعة.",
@ -434,7 +433,7 @@
"upgrades.trampoline.tooltip": "+{{lvl}} مجموعة لكل ارتداد للمضرب، -{{lvl}} مجموعة لكل ارتداد على أي حدود",
"upgrades.trampoline.verbose_description": "أحد ترقيات المجموعات النادرة التي لا تضيف شرط إعادة الضبط",
"upgrades.transparency.name": "الشفافية",
"upgrades.transparency.tooltip": "كلما كانت الكرة أعلى على الشاشة، زادت شفافيتها. وكلما زادت شفافيتها، زادت العملات التي تنتجها.",
"upgrades.transparency.tooltip": "",
"upgrades.transparency.verbose_description": "المستويات الأعلى تجعل الكرة شفافة بشكل أسرع وتزيد من مكافأة النقاط.",
"upgrades.trickledown.name": "اقتصاد التسرب",
"upgrades.trickledown.tooltip": "تظهر العملات المعدنية في الجزء العلوي من الشاشة.",

View file

@ -14450,41 +14450,6 @@
<folder_node>
<name>smaller_puck</name>
<children>
<concept_node>
<name>help_plural</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>true</approved>
</translation>
<translation>
<language>es-CL</language>
<approved>false</approved>
</translation>
<translation>
<language>fr-FR</language>
<approved>true</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>name</name>
<description/>
@ -15678,7 +15643,7 @@
</translation>
<translation>
<language>fr-FR</language>
<approved>true</approved>
<approved>false</approved>
</translation>
<translation>
<language>ru-RU</language>

View file

@ -303,7 +303,7 @@
"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ünzen verpassen.",
"upgrades.fountain_toss.verbose_description": "Wenn du eine Münze verpasst und deine Combo unter {{max}}war, hat deine Combo eine Wahrscheinlichkeit von {{lvl}}/Combo um eins zu erhöhen.",
"upgrades.fountain_toss.verbose_description": "",
"upgrades.ghost_coins.name": "Geistermünzen",
"upgrades.ghost_coins.tooltip": "Münzen gehen langsam durch Ziegelsteine",
"upgrades.ghost_coins.verbose_description": "Das ist kein Bug, sondern ein Feature! Die Münzen fliegen nur langsam durch die Ziegel. Höhere Stufen lassen sie schneller fliegen.",
@ -401,10 +401,9 @@
"upgrades.slow_down.name": "Langsamer Ball",
"upgrades.slow_down.tooltip": "Der Ball bewegt sich langsamer",
"upgrades.slow_down.verbose_description": "Der Ball fängt 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 überschaubarer.\n\nDu kannst ihn jedes Mal beim Start erhalten, indem du den Kindermodus im Menü aktivierst.",
"upgrades.smaller_puck.help_plural": "Noch kleineres Paddel und höhere 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üsse einfacher macht, aber eigentlich nur den Schwierigkeitsgrad erhöht.\n\nDeshalb gibt es auch einen netten Bonus von +5 Münzen pro Ziegelstein für alle Ziegelsteine, die du nach der Auswahl dieser Option zerstörst.",
"upgrades.smaller_puck.tooltip": "",
"upgrades.smaller_puck.verbose_description": "",
"upgrades.soft_reset.name": "Weicher Reset",
"upgrades.soft_reset.tooltip": "Combo-Rückstellungen halten {{percent}}%",
"upgrades.soft_reset.verbose_description": "Begrenzen Sie die Auswirkungen eines Combo-Resets.",
@ -434,7 +433,7 @@
"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ücksetzbedingung hinzufügen",
"upgrades.transparency.name": "Transparenz",
"upgrades.transparency.tooltip": "Je höher der Ball auf dem Bildschirm ist, desto transparenter wird er. Je transparenter sie ist, desto mehr Münzen produziert sie.",
"upgrades.transparency.tooltip": "",
"upgrades.transparency.verbose_description": "Je höher die Stufe, desto eher wird der Ball transparent und desto höher ist der Punktebonus.",
"upgrades.trickledown.name": "Trickle down economics",
"upgrades.trickledown.tooltip": "Die Münzen erscheinen am oberen Rand des Bildschirms.",

View file

@ -303,7 +303,7 @@
"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.fountain_toss.verbose_description": "When you miss a coin and your combo was under level*30, your combo has a probability of level/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. ",
@ -401,15 +401,14 @@
"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.smaller_puck.tooltip": "Also gives +{{percent}}% coins",
"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 +50% coins spawn.",
"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.sticky_coins.name": "Dust bunnies",
"upgrades.sticky_coins.tooltip": "Coins stick to things, and can be dislodged by explosions",
"upgrades.sticky_coins.name": "Sticky coins",
"upgrades.sticky_coins.tooltip": "Coins stick to bricks, and can be dislodged by explosions",
"upgrades.sticky_coins.verbose_description": "",
"upgrades.streak_shots.name": "Hit streak",
"upgrades.streak_shots.tooltip": "More coins if you break many bricks before bouncing on the paddle.",
@ -434,7 +433,7 @@
"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.tooltip": "Ball becomes transparent at the top of the screen. +{{percent}} % coins when all balls are 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.",

View file

@ -303,7 +303,7 @@
"upgrades.forgiving.verbose_description": " El primer ladrillo perdido por nivel no cuesta nada, el siguiente 10%, 20% y así sucesivamente.",
"upgrades.fountain_toss.name": "Moneda en la fuente",
"upgrades.fountain_toss.tooltip": "A veces ganas un pequeño 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.fountain_toss.verbose_description": "",
"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, ¡es una característica! Las piezas atraviesan los ladrillos lentamente. Los niveles más altos permiten que las monedas pasen más rápido a través de los ladrillos.",
@ -401,10 +401,9 @@
"upgrades.slow_down.name": "Bola lenta",
"upgrades.slow_down.tooltip": "El balón se mueve más despacio",
"upgrades.slow_down.verbose_description": "La bola empieza relativamente despacio, pero con cada nivel del juego empieza un poco más rápido, y también se acelera si pasas mucho tiempo en un nivel.\n\nEsta ventaja hace que la bola sea más fácil de manejar.\n\nPuedes conseguirla al principio de cada partida activando el modo niño en el menú.",
"upgrades.smaller_puck.help_plural": "La raqueta se encoge aún más y el combo vuelve a aumentar.",
"upgrades.smaller_puck.name": "Raqueta más pequeña",
"upgrades.smaller_puck.tooltip": "También da +5 combo",
"upgrades.smaller_puck.verbose_description": "Recibes una bonificación de combo permanente de +5 por elegir esta mejora.",
"upgrades.smaller_puck.tooltip": "",
"upgrades.smaller_puck.verbose_description": "",
"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.",
@ -434,7 +433,7 @@
"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ón de reinicio",
"upgrades.transparency.name": "Transparencia",
"upgrades.transparency.tooltip": "Cuanto más alta esté la bola en la pantalla, más transparente se volverá. Cuanto más transparente sea, más monedas producirá.",
"upgrades.transparency.tooltip": "",
"upgrades.transparency.verbose_description": "Los niveles más altos hacen que la pelota se vuelva transparente más rápidamente y aumentan la bonificación de puntos.",
"upgrades.trickledown.name": "Escorrentía",
"upgrades.trickledown.tooltip": "Las monedas aparecen en la parte superior de la pantalla.",

View file

@ -303,7 +303,7 @@
"upgrades.forgiving.verbose_description": " La première brique ratée par niveau ne coûte rien, la suivante 10%, 20%, etc.",
"upgrades.fountain_toss.name": "Pièce dans la fontaine",
"upgrades.fountain_toss.tooltip": "Gagnez parfois un peu de combo quand vous perdez des pièces.",
"upgrades.fountain_toss.verbose_description": "Quand une pièce est perdue alors que votre combo était en dessous de {{max}}, votre combo à une probabilité de {{lvl}}/combo d'être incrémenté",
"upgrades.fountain_toss.verbose_description": "",
"upgrades.ghost_coins.name": "Pièces fantôme",
"upgrades.ghost_coins.tooltip": "Les pièces traversent les briques doucement",
"upgrades.ghost_coins.verbose_description": "Ce n'est pas une bug, c'est une fonctionnalité ! Les pièces passent à travers les briques doucement. Les niveaux plus élevés permettent aux pièce de traverser les briques plus vite.",
@ -401,10 +401,9 @@
"upgrades.slow_down.name": "Balle lente",
"upgrades.slow_down.tooltip": "La balle se déplace plus lentement",
"upgrades.slow_down.verbose_description": "La balle démarre relativement lentement, mais à chaque niveau de votre partie, elle démarre un peu plus vite, et elle accélère également si vous passez beaucoup de temps dans un niveau.\n\nCet avantage rend la balle plus facile à gérer. \n\nVous pouvez l'obtenir au début de chaque partie en activant le mode enfant dans le menu.",
"upgrades.smaller_puck.help_plural": "La raquette rétrécie 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énéficiez d'un bonus permanent de +5 combo pour avoir choisi cette amélioration.",
"upgrades.smaller_puck.tooltip": "",
"upgrades.smaller_puck.verbose_description": "",
"upgrades.soft_reset.name": "Réinitialisation progressive",
"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.",
@ -434,7 +433,7 @@
"upgrades.trampoline.tooltip": "+{{lvl}} combo à chaque rebond d'une balle sur la raquette,-{{lvl}} combo à chaque rebond sur un des bords",
"upgrades.trampoline.verbose_description": "Une des rares améliorations à ne pas avoir de condition de remise à zéro",
"upgrades.transparency.name": "Camouflage",
"upgrades.transparency.tooltip": "Plus la balle est haut à l'écran, plus elle devient transparente et plus elle produit de pièces (+{{percent}} % à transparence maximum).",
"upgrades.transparency.tooltip": "",
"upgrades.transparency.verbose_description": "Les niveaux plus élevés rendent la balle transparente plus tôt et augmentent le bonus de points.",
"upgrades.trickledown.name": "Ruissellement",
"upgrades.trickledown.tooltip": "Les pièces apparaissent en haut de l'écran.",

View file

@ -303,7 +303,7 @@
"upgrades.forgiving.verbose_description": "Первый промах за уровень - бесплатно, затем 10% от комбо, затем 20%.",
"upgrades.fountain_toss.name": "Бросок фонтана",
"upgrades.fountain_toss.tooltip": "Получите несколько комбо, когда пропустите несколько монет.",
"upgrades.fountain_toss.verbose_description": "Если вы пропустили монету и ваша комбо была меньше {{max}}, то вероятность того, что ваша комбо вырастет на {{lvl}}/ комбо вырастет на единицу.",
"upgrades.fountain_toss.verbose_description": "",
"upgrades.ghost_coins.name": "Призрачные монеты",
"upgrades.ghost_coins.tooltip": "Монеты медленно проходят сквозь кирпичи",
"upgrades.ghost_coins.verbose_description": "Это не ошибка, это особенность! Монеты пролетают сквозь кирпичи медленно. На более высоких уровнях они движутся быстрее.",
@ -401,10 +401,9 @@
"upgrades.slow_down.name": "Медленный мяч",
"upgrades.slow_down.tooltip": "Мяч движется медленнее",
"upgrades.slow_down.verbose_description": "Мяч стартует относительно медленно, но с каждым уровнем вашей игры он будет стартовать все быстрее.\n\nОн также ускорится, если вы проведете много времени на одном уровне.\n\nЭто преимущество делает его более управляемым.\n\nВы можете получать его каждый раз в начале игры, включив детский режим в меню.",
"upgrades.smaller_puck.help_plural": "Еще меньшее весло и более высокий базовый комбо",
"upgrades.smaller_puck.name": "Маленькое весло",
"upgrades.smaller_puck.tooltip": "Также дает +5 базовых комбо",
"upgrades.smaller_puck.verbose_description": "Это уменьшает размер лепестка, что теоретически облегчает некоторые угловые удары, но на самом деле лишь повышает сложность игры.\n\nПоэтому вы также получите приятный бонус в виде +5 монет за кирпич за все кирпичи, которые вы разобьете после этого.",
"upgrades.smaller_puck.tooltip": "",
"upgrades.smaller_puck.verbose_description": "",
"upgrades.soft_reset.name": "Мягкий сброс",
"upgrades.soft_reset.tooltip": "Комбо-сброс сохраняет {{percent}}%",
"upgrades.soft_reset.verbose_description": "Ограничьте влияние комбо-сброса.",
@ -434,7 +433,7 @@
"upgrades.trampoline.tooltip": "+{{lvl}} комбо за отскок, -{{lvl}} комбо за отскок на любой границе",
"upgrades.trampoline.verbose_description": "Одно из редких комбо-улучшений, которое не добавляет условие сброса.",
"upgrades.transparency.name": "Прозрачность",
"upgrades.transparency.tooltip": "Чем выше шарик находится на экране, тем прозрачнее он становится. Чем прозрачнее шар, тем больше монет он приносит.",
"upgrades.transparency.tooltip": "",
"upgrades.transparency.verbose_description": "Более высокие уровни делают шар прозрачным быстрее и увеличивают бонус за очки.",
"upgrades.trickledown.name": "Экономика по принципу \"копеечной монеты",
"upgrades.trickledown.tooltip": "Монеты появляются в верхней части экрана.",

View file

@ -303,7 +303,7 @@
"upgrades.forgiving.verbose_description": "Her seviyede ilk ıskalama bedava, sonra kombonun %10'u, sonra %20'si...",
"upgrades.fountain_toss.name": "Çeşme atışı",
"upgrades.fountain_toss.tooltip": "Birkaç jetonu kaçırdığınızda bir miktar kombo kazanın.",
"upgrades.fountain_toss.verbose_description": "Bir jetonu kaçırdığınızda ve kombonuz {{max}}altındaysa, kombonuzun bir artma olasılığı {{lvl}}/ kombodur.",
"upgrades.fountain_toss.verbose_description": "",
"upgrades.ghost_coins.name": "Hayalet paralar",
"upgrades.ghost_coins.tooltip": "Madeni paralar yavaşça tuğlaların arasından geçiyor",
"upgrades.ghost_coins.verbose_description": "Bu bir hata değil, bir özellik! Madeni paralar tuğlaların içinden yavaşça uçar. Daha yüksek seviyeler daha hızlı hareket etmelerini sağlar.",
@ -401,10 +401,9 @@
"upgrades.slow_down.name": "Daha yavaş top",
"upgrades.slow_down.tooltip": "Top daha yavaş hareket ediyor",
"upgrades.slow_down.verbose_description": "Top nispeten yavaş başlar, ancak oyununuzun her seviyesinde biraz daha hızlı başlayacaktır. \n\nAyrıca bir seviyede çok zaman geçirirseniz hızlanacaktır. \n\nBu avantaj onu daha yönetilebilir hale getirir. \n\nMenüde çocuk modunu etkinleştirerek her seferinde başlangıçta alabilirsiniz.",
"upgrades.smaller_puck.help_plural": "Daha küçük kürek ve daha yüksek taban kombinasyonu",
"upgrades.smaller_puck.name": "Daha küçük kürek",
"upgrades.smaller_puck.tooltip": "Ayrıca +5 temel kombo verir",
"upgrades.smaller_puck.verbose_description": "Bu, küreği daha küçük yapar, bu da teoride bazı köşe vuruşlarını kolaylaştırır, ancak gerçekte sadece zorluğu artırır.\n\nBu yüzden, bunu seçtikten sonra kıracağınız tüm tuğlalar için tuğla başına +5 jetonluk güzel bir bonus da alırsınız.",
"upgrades.smaller_puck.tooltip": "",
"upgrades.smaller_puck.verbose_description": "",
"upgrades.soft_reset.name": "Yumuşak sıfırlama",
"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.",
@ -434,7 +433,7 @@
"upgrades.trampoline.tooltip": "+ kürek sıçraması başına{{lvl}} kombo,- herhangi bir sınırda sıçrama başına{{lvl}} kombo",
"upgrades.trampoline.verbose_description": "Sıfırlama koşulu eklemeyen nadir kombo yükseltmelerinden biri",
"upgrades.transparency.name": "Şeffaflık",
"upgrades.transparency.tooltip": "Top ekranda ne kadar yüksekteyse o kadar şeffaf olur. Ne kadar şeffafsa o kadar çok jeton üretir.",
"upgrades.transparency.tooltip": "",
"upgrades.transparency.verbose_description": "Daha yüksek seviyeler topun daha çabuk şeffaf olmasını sağlar ve puan bonusunu artırır.",
"upgrades.trickledown.name": "Sızma ekonomisi",
"upgrades.trickledown.tooltip": "Paralar ekranın üst kısmında görünür.",

View file

@ -1,4 +1,6 @@
import { getSettingValue } from "./settings";
import {GameState} from "./types";
import {ballTransparency} from "./game_utils";
export function clamp(value: number, min: number, max: number) {
return Math.max(min, Math.min(value, max));
@ -17,6 +19,26 @@ export function hoursSpentPlaying() {
}
}
export function shouldCoinsStick(gameState:GameState){
return gameState.perks.sticky_coins && (!gameState.lastExplosion || gameState.lastExplosion < gameState.levelTime - 300 * gameState.perks.sticky_coins)
}
export function coinsBoostedCombo(gameState:GameState){
let boost = 1+gameState.perks.sturdy_bricks / 2 + gameState.perks.smaller_puck/2
if(gameState.perks.transparency){
let min=1;
gameState.balls.forEach(ball=>{
const bt=ballTransparency(ball, gameState)
if(bt<min){
min=bt
}
})
boost+=min*gameState.perks.transparency / 2
}
return Math.ceil(Math.max(gameState.combo,gameState.lastCombo) * boost)
}
export function miniMarkDown(md: string) {
let html: { tagName: string; text: string }[] = [];
let lastNode: { tagName: string; text: string } | null = null;

View file

@ -19,7 +19,7 @@ import { gameState, lastMeasuredFPS, startWork } from "./game";
import { isOptionOn } from "./options";
import {
catchRateBest,
catchRateGood,
catchRateGood, coinsBoostedCombo,
levelTimeBest,
levelTimeGood,
missesBest,
@ -270,7 +270,7 @@ export function render(gameState: GameState) {
startWork("render:explosionshake");
ctx.globalAlpha = 1;
ctx.globalCompositeOperation = "source-over";
const lastExplosionDelay = Date.now() - gameState.lastExplosion + 5;
const lastExplosionDelay = gameState.levelTime - gameState.lastExplosion + 5;
const shaked = lastExplosionDelay < 200 && !isOptionOn("basic");
if (shaked) {
const amplitude =
@ -440,11 +440,12 @@ export function render(gameState: GameState) {
);
startWork("render:combotext");
if (gameState.combo > 1) {
const spawns=coinsBoostedCombo(gameState)
if (spawns > 1) {
ctx.globalCompositeOperation = "source-over";
ctx.globalAlpha = 1;
const comboText = "x " + gameState.combo;
const comboText = spawns.toString();
const comboTextWidth = (comboText.length * gameState.puckHeight) / 1.8;
const totalWidth = comboTextWidth + gameState.coinSize * 2;
const left = gameState.puckPosition - totalWidth / 2;

View file

@ -189,10 +189,7 @@ export const rawUpgrades = [
id: "smaller_puck",
max: 2,
name: t("upgrades.smaller_puck.name"),
help: (lvl: number) =>
lvl == 1
? t("upgrades.smaller_puck.tooltip")
: t("upgrades.smaller_puck.help_plural"),
help: (lvl: number) => t("upgrades.smaller_puck.tooltip", {percent:50*lvl}),
fullHelp: t("upgrades.smaller_puck.verbose_description"),
},
{
@ -721,8 +718,7 @@ export const rawUpgrades = [
id: "fountain_toss",
max: 7,
name: t("upgrades.fountain_toss.name"),
help: (lvl: number) =>
t("upgrades.fountain_toss.tooltip", { lvl, max: lvl * 30 }),
help: () => t("upgrades.fountain_toss.tooltip"),
fullHelp: t("upgrades.fountain_toss.verbose_description"),
},
{