Build 29060255

This commit is contained in:
Renan LE CARO 2025-04-02 19:36:03 +02:00
parent 5ce309d59f
commit b7dacaba0a
11 changed files with 143 additions and 184 deletions

View file

@ -17,11 +17,11 @@ Break colourful bricks, catch bouncing coins and select powerful upgrades !
## Todo ## Todo
- build an apk every time
- ./gradlew tasks
## Next release ## Next release
- publish an apk to itch.io with every build
- Strict sample size : count hits, not destroyed bricks
- passive_income : lastPuckMove was not cleared between levels
- simple game data migration system - simple game data migration system
- high score issues - high score issues

View file

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

File diff suppressed because one or more lines are too long

252
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. // The version of the cache.
const VERSION = "29060245"; const VERSION = "29060255";
// The name of the cache // The name of the cache
const CACHE_NAME = `breakout-71-${VERSION}`; const CACHE_NAME = `breakout-71-${VERSION}`;

View file

@ -1 +1 @@
"29060245" "29060255"

View file

@ -22,6 +22,7 @@ import {
getMajorityValue, getMajorityValue,
getPossibleUpgrades, getPossibleUpgrades,
getRowColIndex, getRowColIndex,
isMovingWhilePassiveIncome,
isPickyEatingPossible, isPickyEatingPossible,
isTelekinesisActive, isTelekinesisActive,
isYoyoActive, isYoyoActive,
@ -451,18 +452,13 @@ export function explodeBrick(
} }
} }
if ( if (isMovingWhilePassiveIncome(gameState)) {
gameState.lastPuckMove &&
gameState.perks.passive_income &&
gameState.lastPuckMove >
gameState.levelTime - 250 * gameState.perks.passive_income
) {
resetCombo(gameState, x, y); resetCombo(gameState, x, y);
} }
if ( if (
gameState.perks.nbricks && gameState.perks.nbricks &&
ball.brokenSinceBounce > gameState.perks.nbricks ball.hitSinceBounce > gameState.perks.nbricks
) { ) {
// We need to reset at each hit, otherwise it's just an OP version of single puck hit streak // We need to reset at each hit, otherwise it's just an OP version of single puck hit streak
resetCombo(gameState, ball.x, ball.y); resetCombo(gameState, ball.x, ball.y);
@ -685,6 +681,7 @@ export async function setLevel(gameState: GameState, l: number) {
gameState.levelTime = 0; gameState.levelTime = 0;
gameState.winAt = 0; gameState.winAt = 0;
gameState.levelWallBounces = 0; gameState.levelWallBounces = 0;
gameState.lastPuckMove = 0;
gameState.autoCleanUses = 0; gameState.autoCleanUses = 0;
gameState.lastTickDown = gameState.levelTime; gameState.lastTickDown = gameState.levelTime;
gameState.levelStartScore = gameState.score; gameState.levelStartScore = gameState.score;
@ -1544,7 +1541,7 @@ export function ballTick(gameState: GameState, ball: Ball, delta: number) {
} }
if ( if (
gameState.perks.nbricks && gameState.perks.nbricks &&
ball.brokenSinceBounce < gameState.perks.nbricks ball.hitSinceBounce < gameState.perks.nbricks
) { ) {
resetCombo(gameState, ball.x, ball.y); resetCombo(gameState, ball.x, ball.y);
} }

View file

@ -234,28 +234,15 @@ export function shouldPierceByColor(
return true; return true;
} }
// export function countBricksAbove(gameState: GameState, index: number) { export function isMovingWhilePassiveIncome(gameState: GameState) {
// const col = index % gameState.gridSize; return !!(
// const row = Math.floor(index / gameState.gridSize); gameState.lastPuckMove &&
// let count = 0; gameState.perks.passive_income &&
// for (let y = 0; y < row; y++) { gameState.lastPuckMove >
// if (gameState.bricks[col + y * gameState.gridSize]) { gameState.levelTime - 250 * gameState.perks.passive_income
// count++; );
// } }
// }
// return count;
// }
// export function countBricksBelow(gameState: GameState, index: number) {
// const col = index % gameState.gridSize;
// const row = Math.floor(index / gameState.gridSize);
// let count = 0;
// for (let y = row + 1; y < gameState.gridSize; y++) {
// if (gameState.bricks[col + y * gameState.gridSize]) {
// count++;
// }
// }
// return count;
// }
export function highScoreForMode(mode: GameState["mode"]) { export function highScoreForMode(mode: GameState["mode"]) {
try { try {
const score = parseInt( const score = parseInt(

View file

@ -219,7 +219,7 @@
"upgrades.multiball.help": "Start every levels with {{count}} balls.", "upgrades.multiball.help": "Start every levels with {{count}} balls.",
"upgrades.multiball.name": "+1 ball", "upgrades.multiball.name": "+1 ball",
"upgrades.nbricks.fullHelp": "You don't necessarily need to destroy those bricks, but you need to hit them. Bricks destroyed by explosions don't count", "upgrades.nbricks.fullHelp": "You don't necessarily need to destroy those bricks, but you need to hit them. Bricks destroyed by explosions don't count",
"upgrades.nbricks.help": "Destroy exactly {{lvl}} bricks per puck bounce for +{{lvl}} combo, otherwise it resets", "upgrades.nbricks.help": "Hit exactly {{lvl}} bricks per puck bounce for +{{lvl}} combo, otherwise it resets",
"upgrades.nbricks.name": "Strict sample size", "upgrades.nbricks.name": "Strict sample size",
"upgrades.one_more_choice.fullHelp": "Every upgrade menu will have one more option. Doesn't increase the number of upgrades you can pick.", "upgrades.one_more_choice.fullHelp": "Every upgrade menu will have one more option. Doesn't increase the number of upgrades you can pick.",
"upgrades.one_more_choice.help": "Further level ups will offer {{lvl}} more option(s) in the list", "upgrades.one_more_choice.help": "Further level ups will offer {{lvl}} more option(s) in the list",

View file

@ -219,7 +219,7 @@
"upgrades.multiball.help": "Chaque niveau commence avec {{count}} balles.", "upgrades.multiball.help": "Chaque niveau commence avec {{count}} balles.",
"upgrades.multiball.name": "+1 balle", "upgrades.multiball.name": "+1 balle",
"upgrades.nbricks.fullHelp": "Si votre balle rebondis sans casser une brique, ça compte quand même comme une frappe. Les briques détruites par des explosions ne comptent pas.", "upgrades.nbricks.fullHelp": "Si votre balle rebondis sans casser une brique, ça compte quand même comme une frappe. Les briques détruites par des explosions ne comptent pas.",
"upgrades.nbricks.help": "Détruisez exactement {{lvl}} briques par rebond pour +{{lvl}} combo, sinon RAZ", "upgrades.nbricks.help": "Frappez exactement {{lvl}} briques par rebond pour +{{lvl}} combo, sinon RAZ",
"upgrades.nbricks.name": "Prélèvement", "upgrades.nbricks.name": "Prélèvement",
"upgrades.one_more_choice.fullHelp": "Chaque menu d'amélioration comportera une option supplémentaire. Cela n'augmente pas le nombre d'améliorations que vous pouvez choisir, mais vous aide à créer le profile idéal. ", "upgrades.one_more_choice.fullHelp": "Chaque menu d'amélioration comportera une option supplémentaire. Cela n'augmente pas le nombre d'améliorations que vous pouvez choisir, mais vous aide à créer le profile idéal. ",
"upgrades.one_more_choice.help": "Les niveaux suivants offriront {{lvl}} option(s) supplémentaire(s) dans la liste d'améliorations.", "upgrades.one_more_choice.help": "Les niveaux suivants offriront {{lvl}} option(s) supplémentaire(s) dans la liste d'améliorations.",

View file

@ -5,6 +5,7 @@ import {
// countBricksAbove, // countBricksAbove,
// countBricksBelow, // countBricksBelow,
currentLevelInfo, currentLevelInfo,
isMovingWhilePassiveIncome,
isPickyEatingPossible, isPickyEatingPossible,
isTelekinesisActive, isTelekinesisActive,
isYoyoActive, isYoyoActive,
@ -542,13 +543,7 @@ export function renderAllBricks() {
const redBorderOnBricksWithWrongColor = const redBorderOnBricksWithWrongColor =
hasCombo && gameState.perks.picky_eater && isPickyEatingPossible(gameState); hasCombo && gameState.perks.picky_eater && isPickyEatingPossible(gameState);
const redColorOnAllBricks = !!( const redColorOnAllBricks = hasCombo && isMovingWhilePassiveIncome(gameState);
gameState.lastPuckMove &&
gameState.perks.passive_income &&
hasCombo &&
gameState.lastPuckMove >
gameState.levelTime - 250 * gameState.perks.passive_income
);
const redRowReach = reachRedRowIndex(gameState); const redRowReach = reachRedRowIndex(gameState);