This commit is contained in:
Renan LE CARO 2025-03-20 21:24:25 +01:00
parent 775ca54b49
commit 322e927589
10 changed files with 28 additions and 28 deletions

View file

@ -142,6 +142,7 @@ There's also an easy mode for kids (slower ball).
- [colin] perk: analyzer - permet de voir les caractéristiques cachées des blocs (sturdy…) - [colin] perk: analyzer - permet de voir les caractéristiques cachées des blocs (sturdy…)
- [colin] perk: roulette - gagne instantanément 2 perks aléatoires - [colin] perk: roulette - gagne instantanément 2 perks aléatoires
- combo climbs every time a ball bounces on puck (but bounce is random?) - combo climbs every time a ball bounces on puck (but bounce is random?)
- combo climbs by 1 every 2 second, unless no coin was caught, then it resets
# extra levels # extra levels

View file

@ -11,8 +11,8 @@ android {
applicationId = "me.lecaro.breakout" applicationId = "me.lecaro.breakout"
minSdk = 21 minSdk = 21
targetSdk = 34 targetSdk = 34
versionCode = 29041687 versionCode = 29041704
versionName = "29041687" versionName = "29041704"
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

19
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 = "29041687"; const VERSION = "29041704";
// 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 @@
"29041687" "29041704"

View file

@ -520,7 +520,7 @@ export async function setLevel(gameState: GameState, l: number) {
gameState.combo += Math.round( gameState.combo += Math.round(
Math.max( Math.max(
0, 0,
((finalCombo - gameState.combo) * 25 * gameState.perks.shunt) / 100, ((finalCombo - gameState.combo) * 20 * gameState.perks.shunt) / 100,
), ),
); );
} }
@ -1364,16 +1364,16 @@ export function ballTick(gameState: GameState, ball: Ball, delta: number) {
ball.hitItem = []; ball.hitItem = [];
if (!ball.hitSinceBounce) { if (!ball.hitSinceBounce) {
gameState.runStatistics.misses++; gameState.runStatistics.misses++;
gameState.levelMisses++;
if (gameState.perks.forgiving) { if (gameState.perks.forgiving) {
const indexes = gameState.bricks const loss = Math.floor(
.map((b, i) => (b ? i : -1)) (gameState.levelMisses / 10) *
.filter((i) => i > -1); (gameState.combo - baseCombo(gameState)),
const pick = sample(indexes); );
explodeBrick(gameState, pick, ball, false); decreaseCombo(gameState, loss, ball.x, ball.y - gameState.ballSize);
} else { } else {
resetCombo(gameState, ball.x, ball.y); resetCombo(gameState, ball.x, ball.y);
} }
gameState.levelMisses++;
makeText( makeText(
gameState, gameState,
gameState.puckPosition, gameState.puckPosition,

View file

@ -138,8 +138,8 @@
"upgrades.extra_life.help": "The ball will bounce once on the bottom line before being lost.", "upgrades.extra_life.help": "The ball will bounce once on the bottom line before being lost.",
"upgrades.extra_life.help_plural": "The ball will bounce on the bottom {{lvl}} times before being lost.", "upgrades.extra_life.help_plural": "The ball will bounce on the bottom {{lvl}} times before being lost.",
"upgrades.extra_life.name": "+1 life", "upgrades.extra_life.name": "+1 life",
"upgrades.forgiving.fullHelp": "The brick destruction is to avoid infinite combo farming combined with \"Trampoline\"", "upgrades.forgiving.fullHelp": "The first miss per level is free, then 10% of the combo, then 20% .. ",
"upgrades.forgiving.help": "Missing breaks a random brick but does not reset combo", "upgrades.forgiving.help": "Missing breaks reduces combo progressively instead of all at once.",
"upgrades.forgiving.name": "Forgiving", "upgrades.forgiving.name": "Forgiving",
"upgrades.ghost_coins.fullHelp": "It's not a bug, it's a feature ! ", "upgrades.ghost_coins.fullHelp": "It's not a bug, it's a feature ! ",
"upgrades.ghost_coins.help": "Coins pass through bricks", "upgrades.ghost_coins.help": "Coins pass through bricks",

View file

@ -138,8 +138,8 @@
"upgrades.extra_life.help": "La balle rebondit une fois avant d'être perdue.", "upgrades.extra_life.help": "La balle rebondit une fois avant d'être perdue.",
"upgrades.extra_life.help_plural": "La balle rebondit {{lvl}} fois avant d'être perdue.", "upgrades.extra_life.help_plural": "La balle rebondit {{lvl}} fois avant d'être perdue.",
"upgrades.extra_life.name": "+1 vie", "upgrades.extra_life.name": "+1 vie",
"upgrades.forgiving.fullHelp": "La destruction de la brique évite le combo infini si on combine ça avec trampoline", "upgrades.forgiving.fullHelp": " La première brique ratée par niveau ne coûte rien, la suivante 10%, 20%, etc.",
"upgrades.forgiving.help": "Rater les briques en supprime une au hasard mais ne RAZ par le combo", "upgrades.forgiving.help": "Rater les briques fait perdre un portion progressivement plu importante du combo",
"upgrades.forgiving.name": "L'erreur est humaine", "upgrades.forgiving.name": "L'erreur est humaine",
"upgrades.ghost_coins.fullHelp": "Ce n'est pas une bug, c'est une fonctionnalité", "upgrades.ghost_coins.fullHelp": "Ce n'est pas une bug, c'est une fonctionnalité",
"upgrades.ghost_coins.help": "Les pièces traversent les briques", "upgrades.ghost_coins.help": "Les pièces traversent les briques",

View file

@ -443,7 +443,7 @@ export const rawUpgrades = [
id: "shunt", id: "shunt",
max: 3, max: 3,
name: t("upgrades.shunt.name"), name: t("upgrades.shunt.name"),
help: (lvl: number) => t("upgrades.shunt.help", { percent: lvl * 25 }), help: (lvl: number) => t("upgrades.shunt.help", { percent: lvl * 20 }),
fullHelp: t("upgrades.shunt.fullHelp"), fullHelp: t("upgrades.shunt.fullHelp"),
}, },
{ {
@ -516,7 +516,7 @@ export const rawUpgrades = [
threshold: 115000, threshold: 115000,
giftable: false, giftable: false,
id: "trampoline", id: "trampoline",
max: 3, max: 1,
name: t("upgrades.trampoline.name"), name: t("upgrades.trampoline.name"),
help: (lvl: number) => t("upgrades.trampoline.help", { lvl }), help: (lvl: number) => t("upgrades.trampoline.help", { lvl }),
fullHelp: t("upgrades.trampoline.fullHelp"), fullHelp: t("upgrades.trampoline.fullHelp"),