Build 29088680

This commit is contained in:
Renan LE CARO 2025-04-22 13:20:36 +02:00
parent 2c8a710aab
commit 3d3e7805d6
17 changed files with 232 additions and 66 deletions

View file

@ -17,7 +17,9 @@ Break colourful bricks, catch bouncing coins and select powerful upgrades !
## Done
- zen : combo increases every 3 seconds, resets on explosion
- new perk: happy family: + lvl points per paddle bounce per extra ball, reset on ball lost
- nerfed perk : sticky coins : stick to same color at level 1, any color at level 2+
- nerfed perk: zen : combo increases every 3 seconds, resets on explosion
## 29088513

View file

@ -29,8 +29,8 @@ android {
applicationId = "me.lecaro.breakout"
minSdk = 21
targetSdk = 34
versionCode = 29088513
versionName = "29088513"
versionCode = 29088680
versionName = "29088680"
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables {
useSupportLibrary = true

File diff suppressed because one or more lines are too long

45
dist/index.html vendored

File diff suppressed because one or more lines are too long

View file

@ -1,5 +1,5 @@
// The version of the cache.
const VERSION = "29088513";
const VERSION = "29088680";
// The name of the cache
const CACHE_NAME = `breakout-71-${VERSION}`;

View file

@ -1401,5 +1401,12 @@
"bricks": "ggggggggggbbbgbbbggbgggggbggbgbgbgbgggggggggggbgbgbgbggbgggggbggbbbgbbbgggggggggg",
"svg": null,
"color": ""
},
{
"name": "icon:happy_family",
"size": 9,
"bricks": "___________tt_tt____tt_tt____tt_tt__W_tt_tt_W__________W_____W____W_W____________",
"svg": null,
"color": ""
}
]

View file

@ -1 +1 @@
"29088513"
"29088680"

View file

@ -403,7 +403,7 @@ export function explosionAt(
gameState.runStatistics.bricks_broken++;
if (gameState.perks.zen) {
gameState.lastZenComboIncrease = gameState.levelTime
gameState.lastZenComboIncrease = gameState.levelTime;
resetCombo(gameState, x, y);
}
}
@ -482,7 +482,6 @@ export function explodeBrick(
);
}
increaseCombo(
gameState,
gameState.perks.streak_shots +
@ -988,7 +987,7 @@ export function gameStateTick(
gameState.combo,
);
gameState.lastCombo = gameState.combo;
zenTick(gameState)
zenTick(gameState);
if (
gameState.perks.addiction &&
@ -1276,7 +1275,7 @@ export function gameStateTick(
(clamp(speed, 20, 100) / 100) * 0.2,
);
if (gameState.perks.compound_interest) {
resetCombo(gameState, coin.x, gameState.gameZoneHeight - 20);
resetCombo(gameState, coin.x, coin.y);
}
if (!isOptionOn("basic")) {
makeParticle(
@ -1317,17 +1316,12 @@ 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),
);
increaseCombo(gameState, 1, coin.x, coin.y);
}
}
const positionBeforeBrickBounceX=coin.x
const positionBeforeBrickBounceY=coin.y
const positionBeforeBrickBounceX = coin.x;
const positionBeforeBrickBounceY = coin.y;
const hitBrick = coinBrickHitCheck(gameState, coin);
if (gameState.perks.metamorphosis && typeof hitBrick !== "undefined") {
if (
@ -1354,19 +1348,18 @@ export function gameStateTick(
}
}
if (gameState.perks.sticky_coins &&
typeof hitBrick !== "undefined" &&
(
coin.color === gameState.bricks[hitBrick] ||
gameState.perks.sticky_coins>1
)) {
if (
gameState.perks.sticky_coins &&
typeof hitBrick !== "undefined" &&
(coin.color === gameState.bricks[hitBrick] ||
gameState.perks.sticky_coins > 1)
) {
if (coin.collidedLastFrame) {
coin.x = coin.previousX;
coin.y = coin.previousY;
}else{
coin.x=positionBeforeBrickBounceX
coin.y=positionBeforeBrickBounceY
} else {
coin.x = positionBeforeBrickBounceX;
coin.y = positionBeforeBrickBounceY;
}
coin.vx = 0;
coin.vy = 0;
@ -1805,15 +1798,10 @@ export function ballTick(gameState: GameState, ball: Ball, frames: number) {
}
if (gameState.perks.top_is_lava && borderHitCode >= 2) {
resetCombo(gameState, ball.x, ball.y + gameState.ballSize * 3);
resetCombo(gameState, ball.x, ball.y);
}
if (gameState.perks.trampoline) {
decreaseCombo(
gameState,
gameState.perks.trampoline,
ball.x,
ball.y + gameState.ballSize,
);
decreaseCombo(gameState, gameState.perks.trampoline, ball.x, ball.y);
}
schedulGameSound(gameState, "wallBeep", ball.x, 1);
@ -1855,9 +1843,15 @@ export function ballTick(gameState: GameState, ball: Ball, frames: number) {
if (gameState.perks.streak_shots) {
resetCombo(gameState, ball.x, ball.y);
}
if (gameState.perks.trampoline) {
increaseCombo(gameState, gameState.perks.trampoline, ball.x, ball.y);
}
increaseCombo(
gameState,
gameState.perks.trampoline +
gameState.perks.happy_family * Math.max(0, gameState.balls.length - 1),
ball.x,
ball.y,
);
if (
gameState.perks.nbricks &&
ball.hitSinceBounce < gameState.perks.nbricks
@ -1872,7 +1866,7 @@ export function ballTick(gameState: GameState, ball: Ball, frames: number) {
(gameState.levelMisses / 10 / gameState.perks.forgiving) *
(gameState.combo - baseCombo(gameState)),
);
decreaseCombo(gameState, loss, ball.x, ball.y - gameState.ballSize);
decreaseCombo(gameState, loss, ball.x, ball.y);
} else {
resetCombo(gameState, ball.x, ball.y);
}
@ -1904,6 +1898,9 @@ export function ballTick(gameState: GameState, ball: Ball, frames: number) {
) {
ball.destroyed = true;
gameState.runStatistics.balls_lost++;
if (gameState.perks.happy_family) {
resetCombo(gameState, ball.x, ball.y);
}
if (!gameState.balls.find((b) => !b.destroyed)) {
if (gameState.startParams.computer_controlled) {
startComputerControlledGame(gameState.startParams.stress);
@ -2147,8 +2144,12 @@ function makeText(
) {
append(gameState.texts, (p: Partial<TextFlash>) => {
p.time = gameState.levelTime;
p.x = x;
p.y = y;
p.x = clamp(x, 20, gameState.canvasWidth - 20);
p.y = clamp(
y,
40,
gameState.gameZoneHeight - gameState.puckHeight - gameState.ballSize,
);
p.color = color;
p.size = size;
p.duration = clamp(duration, 400, 2000);
@ -2318,11 +2319,15 @@ function applyOttawaTreatyPerk(
return;
}
export function zenTick(gameState:GameState){
if (!gameState.perks.zen) return
if(gameState.levelTime>gameState.lastZenComboIncrease +3000){
gameState.lastZenComboIncrease=gameState.levelTime
increaseCombo(gameState, gameState.perks.zen, gameState.puckPosition, gameState.gameZoneHeight- gameState.puckHeight)
}
}
export function zenTick(gameState: GameState) {
if (!gameState.perks.zen) return;
if (gameState.levelTime > gameState.lastZenComboIncrease + 3000) {
gameState.lastZenComboIncrease = gameState.levelTime;
increaseCombo(
gameState,
gameState.perks.zen,
gameState.puckPosition,
gameState.gameZoneHeight - gameState.puckHeight,
);
}
}

View file

@ -313,6 +313,9 @@
"upgrades.ghost_coins.name": "عملات الأشباح",
"upgrades.ghost_coins.tooltip": "تمر العملات المعدنية ببطء عبر الطوب",
"upgrades.ghost_coins.verbose_description": "إنها ليست مشكلة، بل ميزة! تتحرك العملات المعدنية ببطء عبر الطوب. المستويات الأعلى تسمح لها بالتحرك بشكل أسرع.",
"upgrades.happy_family.name": "",
"upgrades.happy_family.tooltip": "",
"upgrades.happy_family.verbose_description": "",
"upgrades.helium.name": "الهيليوم",
"upgrades.helium.tooltip": "انعكست الجاذبية إلى اليسار واليمين من المجداف",
"upgrades.helium.verbose_description": "يؤثر هذا على العملات المعدنية وسيسمح لها بالطفو حتى تصبح جاهزًا لالتقاطها.",

View file

@ -11222,6 +11222,116 @@
</concept_node>
</children>
</folder_node>
<folder_node>
<name>happy_family</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>
<name>helium</name>
<children>

View file

@ -313,6 +313,9 @@
"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.",
"upgrades.happy_family.name": "",
"upgrades.happy_family.tooltip": "",
"upgrades.happy_family.verbose_description": "",
"upgrades.helium.name": "Helium",
"upgrades.helium.tooltip": "Umgekehrte Schwerkraft links und rechts des Paddels",
"upgrades.helium.verbose_description": "Dies wirkt sich auf die Münzen aus und lässt sie nach oben treiben, bis Sie bereit sind, sie aufzuheben.",

View file

@ -313,6 +313,9 @@
"upgrades.ghost_coins.name": "Ghost coins",
"upgrades.ghost_coins.tooltip": "Coins slowly pass through bricks",
"upgrades.ghost_coins.verbose_description": "It's not a bug, it's a feature ! Coins fly through bricks slowly. Higher levels let them move faster. ",
"upgrades.happy_family.name": "Happy family",
"upgrades.happy_family.tooltip": "+1 combo per extra ball for each paddle bounce. Combo resets when a ball is lost. ",
"upgrades.happy_family.verbose_description": "Only the ball above 1 give combo.",
"upgrades.helium.name": "Helium",
"upgrades.helium.tooltip": "Gravity reversed left and right of paddle",
"upgrades.helium.verbose_description": "This affects the coins and will let the float up until you are ready to pick them up.",

View file

@ -313,6 +313,9 @@
"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.",
"upgrades.happy_family.name": "",
"upgrades.happy_family.tooltip": "",
"upgrades.happy_family.verbose_description": "",
"upgrades.helium.name": "Helio",
"upgrades.helium.tooltip": "Las piezas flotan en lugar de caer alrededor de la raqueta.",
"upgrades.helium.verbose_description": "Las monedas esperarán a estar debajo de la raqueta para caer.",

View file

@ -313,6 +313,9 @@
"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.",
"upgrades.happy_family.name": "",
"upgrades.happy_family.tooltip": "",
"upgrades.happy_family.verbose_description": "",
"upgrades.helium.name": "Hélium",
"upgrades.helium.tooltip": "Les pièce flottent au lieu de tomber autours de la raquette.",
"upgrades.helium.verbose_description": "Les pièces attendront d'être sous la raquette pour tomber. ",

View file

@ -313,6 +313,9 @@
"upgrades.ghost_coins.name": "Призрачные монеты",
"upgrades.ghost_coins.tooltip": "Монеты медленно проходят сквозь кирпичи",
"upgrades.ghost_coins.verbose_description": "Это не ошибка, это особенность! Монеты пролетают сквозь кирпичи медленно. На более высоких уровнях они движутся быстрее.",
"upgrades.happy_family.name": "",
"upgrades.happy_family.tooltip": "",
"upgrades.happy_family.verbose_description": "",
"upgrades.helium.name": "Гелий",
"upgrades.helium.tooltip": "Гравитация изменяется слева и справа от весла",
"upgrades.helium.verbose_description": "Это повлияет на монеты и позволит им плавать до тех пор, пока вы не соберете их.",

View file

@ -313,6 +313,9 @@
"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.",
"upgrades.happy_family.name": "",
"upgrades.happy_family.tooltip": "",
"upgrades.happy_family.verbose_description": "",
"upgrades.helium.name": "Helyum",
"upgrades.helium.tooltip": "Yerçekimi küreğin solunda ve sağında tersine döndü",
"upgrades.helium.verbose_description": "Bu, paraları etkileyecek ve siz onları almaya hazır olana kadar paraların havada asılı kalmasına neden olacaktır.",

View file

@ -896,4 +896,14 @@ export const rawUpgrades = [
help: () => t("upgrades.wrap_right.tooltip"),
fullHelp: t("upgrades.wrap_right.verbose_description"),
},
{
requires: "multiball",
threshold: 245000,
gift: false,
id: "happy_family",
max: 1,
name: t("upgrades.happy_family.name"),
help: () => t("upgrades.happy_family.tooltip"),
fullHelp: t("upgrades.happy_family.verbose_description"),
},
] as const;