mirror of
https://gitlab.com/lecarore/breakout71.git
synced 2025-04-21 20:46:14 -04:00
wip
This commit is contained in:
parent
8eb2e049c8
commit
e1c20627bc
15 changed files with 302 additions and 56 deletions
14
Readme.md
14
Readme.md
|
@ -30,13 +30,26 @@ Some upgrades currently are not really useful
|
|||
- add more upgrades to complement them
|
||||
- force users to try them to unlock levels
|
||||
|
||||
New players get confused as to which upgrades they have and why a side became red
|
||||
- show a fat popup with a detailed explanation of the perk the first time you have it
|
||||
- only unlock very simple perks from the start (like base_combo)
|
||||
|
||||
|
||||
# Changelog
|
||||
|
||||
## To do
|
||||
|
||||
- Explain the combo
|
||||
- As soon as level condition is reached, lock it in and tell the user
|
||||
|
||||
## Done
|
||||
|
||||
- Don't use "RAZ" in French explanations.
|
||||
- explain ghost coin's slow down effect
|
||||
- when there are only a few coins, make them brighter
|
||||
- Perk : [colin] minefield
|
||||
- clear scheduled sounds if sounds off
|
||||
- show unlocked levels above game stats in gameover screen
|
||||
- reduce resolution of lights even more (1/16)
|
||||
|
||||
## 29067205
|
||||
|
@ -257,6 +270,7 @@ Some upgrades currently are not really useful
|
|||
- experiment with showing the combo somewhere else, maybe top center, maybe instead of score.
|
||||
|
||||
## Easy perks ideas
|
||||
- "+1 coin for each brick within a small radius of the broken brick" ?
|
||||
- two for one : add a 2 for one upgrade combo to the choice lists
|
||||
- cash out : double last level's gains
|
||||
- snowball : Combo resets every 0.1s . +1 combo for each combo gained Since last reset.
|
||||
|
|
|
@ -29,8 +29,8 @@ android {
|
|||
applicationId = "me.lecaro.breakout"
|
||||
minSdk = 21
|
||||
targetSdk = 34
|
||||
versionCode = 29067292
|
||||
versionName = "29067292"
|
||||
versionCode = 29068232
|
||||
versionName = "29068232"
|
||||
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
|
||||
vectorDrawables {
|
||||
useSupportLibrary = true
|
||||
|
|
File diff suppressed because one or more lines are too long
59
dist/index.html
vendored
59
dist/index.html
vendored
File diff suppressed because one or more lines are too long
|
@ -1,5 +1,5 @@
|
|||
// The version of the cache.
|
||||
const VERSION = "29067292";
|
||||
const VERSION = "29068232";
|
||||
|
||||
// The name of the cache
|
||||
const CACHE_NAME = `breakout-71-${VERSION}`;
|
||||
|
|
|
@ -976,13 +976,6 @@
|
|||
"svg": null,
|
||||
"color": ""
|
||||
},
|
||||
{
|
||||
"name": "icon:side_kick",
|
||||
"size": 4,
|
||||
"bricks": "yyrryttryttryyrr",
|
||||
"svg": null,
|
||||
"color": ""
|
||||
},
|
||||
{
|
||||
"name": "icon:implosions",
|
||||
"size": 8,
|
||||
|
@ -1316,5 +1309,26 @@
|
|||
"bricks": "______________WyyyOOy_____WyyyOOy_____Wyy_OO______Wyy_OO______Wyy_OO__________OO__________OO__________OO__________OO__________OO__________OO____",
|
||||
"svg": null,
|
||||
"color": ""
|
||||
},
|
||||
{
|
||||
"name": "icon:minefield",
|
||||
"size": 7,
|
||||
"bricks": "W__W__W_W___W___W_W__W_____W_W___W____g_____ggg__",
|
||||
"svg": null,
|
||||
"color": ""
|
||||
},
|
||||
{
|
||||
"name": "icon:side_flip",
|
||||
"size": 7,
|
||||
"bricks": "________ttttt__rttty__rttty__rttty__ttttt________",
|
||||
"svg": null,
|
||||
"color": ""
|
||||
},
|
||||
{
|
||||
"name": "icon:side_kick",
|
||||
"size": 7,
|
||||
"bricks": "________ttttt__ytttr__ytttr__ytttr__ttttt________",
|
||||
"svg": null,
|
||||
"color": ""
|
||||
}
|
||||
]
|
||||
|
|
|
@ -1 +1 @@
|
|||
"29067292"
|
||||
"29068232"
|
||||
|
|
|
@ -14,8 +14,6 @@ import {
|
|||
import {
|
||||
brickCenterX,
|
||||
brickCenterY,
|
||||
// countBricksAbove,
|
||||
// countBricksBelow,
|
||||
currentLevelInfo,
|
||||
distance2,
|
||||
distanceBetween,
|
||||
|
@ -24,15 +22,14 @@ import {
|
|||
getRowColIndex,
|
||||
isMovingWhilePassiveIncome,
|
||||
isPickyEatingPossible,
|
||||
telekinesisEffectRate,
|
||||
yoyoEffectRate,
|
||||
makeEmptyPerksMap,
|
||||
max_levels,
|
||||
reachRedRowIndex,
|
||||
shouldPierceByColor,
|
||||
telekinesisEffectRate,
|
||||
yoyoEffectRate,
|
||||
} from "./game_utils";
|
||||
import { t } from "./i18n/i18n";
|
||||
import { icons, upgrades } from "./loadGameData";
|
||||
import { icons } from "./loadGameData";
|
||||
|
||||
import {
|
||||
addToTotalScore,
|
||||
|
@ -52,10 +49,7 @@ import {
|
|||
} from "./game";
|
||||
import { stopRecording } from "./recording";
|
||||
import { isOptionOn } from "./options";
|
||||
import { getRunLevels } from "./newGameState";
|
||||
import { requiredAsyncAlert } from "./asyncAlert";
|
||||
import { clamp, comboKeepingRate } from "./pure_functions";
|
||||
import { openCreativeModePerksPicker } from "./creative";
|
||||
|
||||
export function setMousePos(gameState: GameState, x: number) {
|
||||
gameState.puckPosition = x;
|
||||
|
@ -172,7 +166,16 @@ export function normalizeGameState(gameState: GameState) {
|
|||
}
|
||||
|
||||
export function baseCombo(gameState: GameState) {
|
||||
return 1 + gameState.perks.base_combo * 3 + gameState.perks.smaller_puck * 5;
|
||||
const mineFieldBonus =
|
||||
gameState.perks.minefield &&
|
||||
gameState.bricks.filter((b) => b === "black").length *
|
||||
gameState.perks.minefield;
|
||||
return (
|
||||
1 +
|
||||
gameState.perks.base_combo * 3 +
|
||||
gameState.perks.smaller_puck * 5 +
|
||||
mineFieldBonus
|
||||
);
|
||||
}
|
||||
|
||||
export function resetCombo(
|
||||
|
@ -229,6 +232,7 @@ export function increaseCombo(
|
|||
makeText(gameState, x, y, "#ffd300", "+" + by, 25, 400 + by);
|
||||
}
|
||||
}
|
||||
|
||||
export function decreaseCombo(
|
||||
gameState: GameState,
|
||||
by: number,
|
||||
|
@ -375,6 +379,9 @@ export function explodeBrick(
|
|||
// }
|
||||
setBrick(gameState, index, "");
|
||||
explosionAt(gameState, index, x, y, ball, 0);
|
||||
if (gameState.perks.minefield) {
|
||||
decreaseCombo(gameState, gameState.perks.minefield, x, y);
|
||||
}
|
||||
} else if (color) {
|
||||
// Even if it bounces we don't want to count that as a miss
|
||||
|
||||
|
@ -385,6 +392,10 @@ 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(
|
||||
|
@ -447,11 +458,30 @@ export function explodeBrick(
|
|||
ball.y,
|
||||
);
|
||||
|
||||
if (gameState.perks.side_kick) {
|
||||
if (ball.previousVX > 0) {
|
||||
increaseCombo(gameState, gameState.perks.side_kick, ball.x, ball.y);
|
||||
} else {
|
||||
decreaseCombo(gameState, gameState.perks.side_kick * 2, ball.x, ball.y);
|
||||
if (Math.abs(ball.y - y) < Math.abs(ball.x - x)) {
|
||||
if (gameState.perks.side_kick) {
|
||||
if (ball.previousVX > 0) {
|
||||
increaseCombo(gameState, gameState.perks.side_kick, ball.x, ball.y);
|
||||
} else {
|
||||
decreaseCombo(
|
||||
gameState,
|
||||
gameState.perks.side_kick * 2,
|
||||
ball.x,
|
||||
ball.y,
|
||||
);
|
||||
}
|
||||
}
|
||||
if (gameState.perks.side_flip) {
|
||||
if (ball.previousVX < 0) {
|
||||
increaseCombo(gameState, gameState.perks.side_flip, ball.x, ball.y);
|
||||
} else {
|
||||
decreaseCombo(
|
||||
gameState,
|
||||
gameState.perks.side_flip * 2,
|
||||
ball.x,
|
||||
ball.y,
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -552,6 +582,7 @@ export function schedulGameSound(
|
|||
vol: number,
|
||||
) {
|
||||
if (!vol) return;
|
||||
if (!isOptionOn("sound")) return;
|
||||
x ??= gameState.offsetX + gameState.gameZoneWidth / 2;
|
||||
const ex = gameState.aboutToPlaySound[sound] as { vol: number; x: number };
|
||||
|
||||
|
@ -672,6 +703,14 @@ function setBrick(gameState: GameState, index: number, color: string) {
|
|||
(color === "black" && 1) ||
|
||||
(color && 1 + gameState.perks.sturdy_bricks) ||
|
||||
0;
|
||||
if (gameState.perks.minefield && color === "black") {
|
||||
increaseCombo(
|
||||
gameState,
|
||||
gameState.perks.minefield,
|
||||
brickCenterX(gameState, index),
|
||||
brickCenterY(gameState, index),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
const rainbow = [
|
||||
|
@ -683,6 +722,7 @@ const rainbow = [
|
|||
"#7038ff",
|
||||
"#ff3de5",
|
||||
];
|
||||
|
||||
export function rainbowColor(): colorString {
|
||||
return rainbow[Math.floor(gameState.levelTime / 50) % rainbow.length];
|
||||
}
|
||||
|
@ -904,6 +944,8 @@ export function gameStateTick(
|
|||
gameState.combo,
|
||||
);
|
||||
|
||||
gameState.lastCombo = gameState.combo;
|
||||
|
||||
if (
|
||||
gameState.perks.addiction &&
|
||||
gameState.lastBrickBroken &&
|
||||
|
|
|
@ -3917,6 +3917,56 @@
|
|||
</concept_node>
|
||||
</children>
|
||||
</folder_node>
|
||||
<folder_node>
|
||||
<name>minefield</name>
|
||||
<children>
|
||||
<concept_node>
|
||||
<name>fullHelp</name>
|
||||
<description/>
|
||||
<comment/>
|
||||
<translations>
|
||||
<translation>
|
||||
<language>en-US</language>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>fr-FR</language>
|
||||
<approved>false</approved>
|
||||
</translation>
|
||||
</translations>
|
||||
</concept_node>
|
||||
<concept_node>
|
||||
<name>help</name>
|
||||
<description/>
|
||||
<comment/>
|
||||
<translations>
|
||||
<translation>
|
||||
<language>en-US</language>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>fr-FR</language>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
</translations>
|
||||
</concept_node>
|
||||
<concept_node>
|
||||
<name>name</name>
|
||||
<description/>
|
||||
<comment/>
|
||||
<translations>
|
||||
<translation>
|
||||
<language>en-US</language>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>fr-FR</language>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
</translations>
|
||||
</concept_node>
|
||||
</children>
|
||||
</folder_node>
|
||||
<folder_node>
|
||||
<name>multiball</name>
|
||||
<children>
|
||||
|
@ -4712,6 +4762,56 @@
|
|||
</concept_node>
|
||||
</children>
|
||||
</folder_node>
|
||||
<folder_node>
|
||||
<name>side_flip</name>
|
||||
<children>
|
||||
<concept_node>
|
||||
<name>fullHelp</name>
|
||||
<description/>
|
||||
<comment/>
|
||||
<translations>
|
||||
<translation>
|
||||
<language>en-US</language>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>fr-FR</language>
|
||||
<approved>false</approved>
|
||||
</translation>
|
||||
</translations>
|
||||
</concept_node>
|
||||
<concept_node>
|
||||
<name>help</name>
|
||||
<description/>
|
||||
<comment/>
|
||||
<translations>
|
||||
<translation>
|
||||
<language>en-US</language>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>fr-FR</language>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
</translations>
|
||||
</concept_node>
|
||||
<concept_node>
|
||||
<name>name</name>
|
||||
<description/>
|
||||
<comment/>
|
||||
<translations>
|
||||
<translation>
|
||||
<language>en-US</language>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>fr-FR</language>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
</translations>
|
||||
</concept_node>
|
||||
</children>
|
||||
</folder_node>
|
||||
<folder_node>
|
||||
<name>side_kick</name>
|
||||
<children>
|
||||
|
@ -4726,7 +4826,7 @@
|
|||
</translation>
|
||||
<translation>
|
||||
<language>fr-FR</language>
|
||||
<approved>true</approved>
|
||||
<approved>false</approved>
|
||||
</translation>
|
||||
</translations>
|
||||
</concept_node>
|
||||
|
|
|
@ -222,7 +222,7 @@
|
|||
"upgrades.fountain_toss.help": "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.name": "Fountain toss",
|
||||
"upgrades.ghost_coins.fullHelp": "It's not a bug, it's a feature ! Coins fly through bricks slowly. Higher levels let them move faster. ",
|
||||
"upgrades.ghost_coins.help": "Coins pass through bricks",
|
||||
"upgrades.ghost_coins.help": "Coins slowly pass through bricks",
|
||||
"upgrades.ghost_coins.name": "Ghost coins",
|
||||
"upgrades.helium.fullHelp": "This affects the coins and will let the float up until you are ready to pick them up.",
|
||||
"upgrades.helium.help": "Gravity reversed left and right of puck",
|
||||
|
@ -245,6 +245,9 @@
|
|||
"upgrades.metamorphosis.fullHelp": "With this perk, coins will be of the color of the brick they come from, and will color the first brick they touch in the same color. \n\nCoins spawn with the speed of the ball that broke them, which means you can aim a bit in the direction of the bricks you want to \"paint\".",
|
||||
"upgrades.metamorphosis.help": "Each coins can stain {{lvl}} brick(s) with its color",
|
||||
"upgrades.metamorphosis.name": "Metamorphosis",
|
||||
"upgrades.minefield.fullHelp": "Adds +lvl to the combo when a brick is place, -lvl when it is destroyed, and raises the base combo by the number of bricks times lvl",
|
||||
"upgrades.minefield.help": "+{{lvl}} combo per bomb brick on screen",
|
||||
"upgrades.minefield.name": "Minefield",
|
||||
"upgrades.multiball.fullHelp": "As soon as you drop the ball in Breakout 71, you loose. \n\nWith this perk, you get two balls, and so you can afford to lose one. \n\nThe lost balls come back on the next level. \n\nHaving more than one balls makes some further perks available, and of course clears the level faster.",
|
||||
"upgrades.multiball.help": "Start every levels with {{count}} balls.",
|
||||
"upgrades.multiball.name": "+1 ball",
|
||||
|
@ -293,7 +296,10 @@
|
|||
"upgrades.shunt.fullHelp": "If you also have hot start, the hot start is just added to the current combo",
|
||||
"upgrades.shunt.help": "Keep {{percent}}% of your combo between levels",
|
||||
"upgrades.shunt.name": "Shunt",
|
||||
"upgrades.side_kick.fullHelp": "When a brick get hit, the game checks the ball's horizontal velocity, and add +1 to the combo it is towards the right. The combo will decrease by 2 otherwise. The location of the impact on the brick is irrelevant. ",
|
||||
"upgrades.side_flip.fullHelp": "Impact the brick on its right side to gain one combo, but avoid hitting it on the left side as the would remove 2 combo. Hitting from the top and bottom has no effect. ",
|
||||
"upgrades.side_flip.help": "+{{lvl}} combo per brick broken from the right, -{{loss}} otherwise",
|
||||
"upgrades.side_flip.name": "Right handed",
|
||||
"upgrades.side_kick.fullHelp": "Impact the brick on its left side to gain one combo, but avoid hitting it on the right side as the would remove 2 combo. Hitting from the top and bottom has no effect. ",
|
||||
"upgrades.side_kick.help": "+{{lvl}} combo per brick broken from the left, -{{loss}} otherwise",
|
||||
"upgrades.side_kick.name": "Left handed",
|
||||
"upgrades.skip_last.fullHelp": "You need to break all bricks to go to the next level. However, it can be hard to get the last ones. \n\nClearing a level early brings extra choices when upgrading. Never missing the bricks is also very beneficial. \n\nSo if you find it difficult to break the last bricks, getting this perk a few time can help.",
|
||||
|
|
|
@ -39,7 +39,7 @@
|
|||
"lab.help": "Essayez n'importe quel build",
|
||||
"lab.instructions": "Sélectionnez les améliorations ci-dessous, puis choisissez le niveau à jouer. Les parties en mode créatif sont ignorées dans les déblocages, le meilleur score, le score total et les statistiques, et ne durent qu'un seul niveau.",
|
||||
"lab.menu_entry": "Mode créatif",
|
||||
"lab.reset": "RAZ toutes les améliorations",
|
||||
"lab.reset": "Retirer toutes les améliorations",
|
||||
"lab.select_level": "Sélectionnez un niveau sur lequel jouer",
|
||||
"lab.unlocks_at": "Déverrouillé à partir d'un score total de {{score}}",
|
||||
"level_up.after_buttons": "Vous venez de terminer le niveau {{level}}/{{max}}.",
|
||||
|
@ -164,7 +164,7 @@
|
|||
"unlocks.reached": "Votre meilleur score pour l'instant est {{reached}}.",
|
||||
"unlocks.title_upgrades": "Vous avez débloqué {{unlocked}} améliorations sur {{out_of}}",
|
||||
"upgrades.addiction.fullHelp": "Le décompte ne commence qu'à parti de la destruction de la première brique du niveau, et s'arrête dès qu'il n'y a plus de briques. ",
|
||||
"upgrades.addiction.help": "+{{lvl}} combo / brique, le combo RAZ après {{delay}}s sans casser de briques",
|
||||
"upgrades.addiction.help": "+{{lvl}} combo / brique, combo perdu après {{delay}}s sans casser de briques",
|
||||
"upgrades.addiction.name": "Addiction",
|
||||
"upgrades.asceticism.fullHelp": "Il faudra trouver un moyen de stocker les pièces pendant que le combo grandis. ",
|
||||
"upgrades.asceticism.help": "+{{combo}} combo par brique cassée, - {{combo}} quand une pièce est attrapée",
|
||||
|
@ -221,8 +221,8 @@
|
|||
"upgrades.fountain_toss.fullHelp": "",
|
||||
"upgrades.fountain_toss.help": "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.name": "Pièce dans la fontaine",
|
||||
"upgrades.ghost_coins.fullHelp": "Ce n'est pas une bug, c'est une fonctionnalité Les pièces passent à travers les briques doucement. ",
|
||||
"upgrades.ghost_coins.help": "Les pièces traversent les briques",
|
||||
"upgrades.ghost_coins.fullHelp": "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.ghost_coins.help": "Les pièces traversent les briques doucement",
|
||||
"upgrades.ghost_coins.name": "Pièces fantôme",
|
||||
"upgrades.helium.fullHelp": "Les pièces attendront d'être sous le palet pour tomber. ",
|
||||
"upgrades.helium.help": "Les pièce flottent au lieu de tomber autours du palet",
|
||||
|
@ -237,7 +237,7 @@
|
|||
"upgrades.instant_upgrade.help": "-{{lvl}} choix jusqu'à la fin de la partie.",
|
||||
"upgrades.instant_upgrade.name": "+2 améliorations maintenant",
|
||||
"upgrades.left_is_lava.fullHelp": "Chaque fois que vous cassez une brique, votre combo augmente d'une unité, ce qui vous permet d'obtenir une pièce de plus à chaque fois que vous cassez une brique.\n\nCependant, votre combinaison se réinitialise dès que votre balle touche le côté gauche.\n\nDès que votre combo augmente, le côté gauche devient rouge pour vous rappeler que vous devez éviter de le frapper.",
|
||||
"upgrades.left_is_lava.help": "+{{lvl}} combo par brique, RAZ en touchant le bord gauche",
|
||||
"upgrades.left_is_lava.help": "+{{lvl}} combo par brique, perdu en touchant le bord gauche",
|
||||
"upgrades.left_is_lava.name": "Éviter le côté gauche",
|
||||
"upgrades.limitless.fullHelp": "Choisir cet avantage augmente également sa propre limite d'un point, vous permettant de le choisir à nouveau.",
|
||||
"upgrades.limitless.help": "Augmenter le niveau maximum de toutes les mises à niveau de {{lvl}} ",
|
||||
|
@ -245,20 +245,23 @@
|
|||
"upgrades.metamorphosis.fullHelp": "Avec cette amélioration, les pièces seront de la couleur de la brique d'où elles proviennent et coloreront la première brique qu'elles toucheront. \n\nLes pièces apparaissent à la vitesse de la balle qui les a cassées, ce qui signifie que vous pouvez viser un peu dans la direction des briques que vous voulez \"peindre\".",
|
||||
"upgrades.metamorphosis.help": "Chaque pièces peut tacher {{lvl}} brique(s) avec sa couleur",
|
||||
"upgrades.metamorphosis.name": "Métamorphose",
|
||||
"upgrades.minefield.fullHelp": "Ajoute +lvl au combo lorsqu'une brique est placée, -lvl lorsqu'elle est détruite et augmente le combo de base du nombre de briques multiplié par le niveau",
|
||||
"upgrades.minefield.help": "+{{lvl}} combo par brique explosive à l'écran",
|
||||
"upgrades.minefield.name": "Terrain miné",
|
||||
"upgrades.multiball.fullHelp": "Dès que vous laissez tomber la balle dans Breakout 71, vous perdez. \n\nAvec cet avantage, vous obtenez deux balles, et vous pouvez donc vous permettre d'en perdre une.\n\nLes balles perdues reviennent au niveau suivant. \n\nLe fait d'avoir plus d'une balle permet d'obtenir d'autres avantages et, bien sûr, de franchir le niveau plus rapidement.",
|
||||
"upgrades.multiball.help": "Chaque niveau commence avec {{count}} balles.",
|
||||
"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.help": "Frappez exactement {{lvl}} briques par rebond pour +{{lvl}} combo, sinon RAZ",
|
||||
"upgrades.nbricks.help": "Frappez exactement {{lvl}} briques par rebond pour +{{lvl}} combo, sinon combo perdu",
|
||||
"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.help": "Les niveaux suivants offriront {{lvl}} option(s) supplémentaire(s) dans la liste d'améliorations.",
|
||||
"upgrades.one_more_choice.name": "+1 choix",
|
||||
"upgrades.passive_income.fullHelp": "Certaines amélioration font bouger les balles sans avoir besoin de mettre le palet en mouvement.",
|
||||
"upgrades.passive_income.help": "+{{lvl}} combo / brique, sauf si le palet à bougé dans les {{time}} dernières secondes, RAZ dans ce cas",
|
||||
"upgrades.passive_income.help": "+{{lvl}} combo / brique, sauf si le palet à bougé dans les {{time}} dernières secondes, combo perdu dans ce cas",
|
||||
"upgrades.passive_income.name": "Revenu passif",
|
||||
"upgrades.picky_eater.fullHelp": "Chaque fois que vous cassez une brique de la même couleur que votre balle, votre combo augmente d'une unité.\n\nS'il s'agit d'une couleur différente, la balle adopte cette nouvelle couleur, mais la combinaison est réinitialisée, sauf s'il n'y avais plus aucune brique de la couleur de la balle.\n\nLes briques de la mauvaise couleur sont entourées en rouge.\n\nSi vous avez plus d'une balle, elles changent toutes de couleur en même temps lorsque l'une d'entre elles touche une brique.",
|
||||
"upgrades.picky_eater.help": "+{{lvl}} combo par brique cassée la couleur de la balle, RAZ sinon",
|
||||
"upgrades.picky_eater.help": "+{{lvl}} combo par brique cassée la couleur de la balle, combo perdu sinon",
|
||||
"upgrades.picky_eater.name": "Mangeur par couleur",
|
||||
"upgrades.pierce.fullHelp": "Normalement , la balle rebondit dès qu'elle touche une brique. Avec cette caractéristique, elle continuera sa trajectoire jusqu'à 3 briques cassées.\n\nAprès cela, elle rebondira sur la quatrième brique et vous devez toucher le palet pour remettre le compteur à zéro.",
|
||||
"upgrades.pierce.help": "La balle perce {{count}} briques après chaque rebond sur le palet",
|
||||
|
@ -271,13 +274,13 @@
|
|||
"upgrades.puck_repulse_ball.help_plural": "La force de répulsion est plus grande",
|
||||
"upgrades.puck_repulse_ball.name": "Atterrissage en douceur",
|
||||
"upgrades.reach.fullHelp": "S'il n'y a qu'une seule rangée de briques, ou si la rangée la plus basse couvre toute la largeur du jeu, cet avantage est sans effet. Sinon, briser cette rangée la plus basse réinitialise le combo ; briser toute autre rangée augmente le combo du nombre de briques présentes sur cette rangée.\n\nLa rangée de briques du bas sera entourée en rouge pour vous rappeler de ne pas la toucher. ",
|
||||
"upgrades.reach.help": "Casser une des N briques de la ligne la plus basse RAZ le combo. Sinon, +N combo.",
|
||||
"upgrades.reach.help": "Casser une des N briques de la ligne la plus basse détruit le combo. Sinon, +N combo.",
|
||||
"upgrades.reach.name": "Attaque aérienne",
|
||||
"upgrades.respawn.fullHelp": "Des effets de particules vous indiqueront où les briques apparaîtront. ",
|
||||
"upgrades.respawn.help": "{{percent}}% des briques réapparaissent après {{delay}}s.",
|
||||
"upgrades.respawn.name": "Réapparition ",
|
||||
"upgrades.right_is_lava.fullHelp": "Chaque fois que vous cassez une brique, votre combo augmente d'une unité, ce qui vous permet d'obtenir une pièce de plus à chaque fois que vous cassez les briques suivantes.\n\nCependant, votre combinaison se réinitialise dès que votre balle touche le côté droit de la zone de jeu.\n\nDès que votre combo augmente, le côté droit devient rouge pour vous rappeler que vous devez éviter de le frapper.",
|
||||
"upgrades.right_is_lava.help": "+{{lvl}} combo par brique, RAZ en cas de choc avec le coté droit",
|
||||
"upgrades.right_is_lava.help": "+{{lvl}} combo par brique, perdu en cas de choc avec le coté droit",
|
||||
"upgrades.right_is_lava.name": "Éviter le côté droit",
|
||||
"upgrades.sacrifice.fullHelp": "Le combo pourrait monter assez haut.",
|
||||
"upgrades.sacrifice.help_l1": "Perdre une vie détruit toutes les briques",
|
||||
|
@ -293,8 +296,11 @@
|
|||
"upgrades.shunt.fullHelp": "Démarrage à chaud sera simplement ajouté au combo actuel",
|
||||
"upgrades.shunt.help": "Garer {{percent}}% du combo au changement de niveau ",
|
||||
"upgrades.shunt.name": "Shunt",
|
||||
"upgrades.side_kick.fullHelp": "Lorsqu'une brique est touchée, le jeu vérifie la vitesse horizontale de la balle et ajoute +1 au combo si sa direction sur l'axe horizontale est vers la droite. Dans le cas contraire, le combo diminuera de deux points. L'emplacement de l'impact sur la brique n'a aucune importance.",
|
||||
"upgrades.side_kick.help": "+{{lvl}} combo par brique cassé horizontalement, -{{loss}} sinon",
|
||||
"upgrades.side_flip.fullHelp": "Impactez la brique sur son côté droit pour obtenir un combo, mais évitez de la frapper sur son côté gauche, car cela annulerait deux combos. Frapper du haut et du bas n'a aucun effet.",
|
||||
"upgrades.side_flip.help": "+{{lvl}} combo par brique cassé de la droite, -{{loss}} sinon",
|
||||
"upgrades.side_flip.name": "Droitier",
|
||||
"upgrades.side_kick.fullHelp": "Impactez la brique sur son côté gauche pour obtenir un combo, mais évitez de la frapper sur son côté droit, car cela annulerait deux combos. Frapper du haut et du bas n'a aucun effet.",
|
||||
"upgrades.side_kick.help": "+{{lvl}} combo par brique cassé de la gauche, -{{loss}} sinon",
|
||||
"upgrades.side_kick.name": "Gaucher",
|
||||
"upgrades.skip_last.fullHelp": "Vous devez casser toutes les briques pour passer au niveau suivant. \n\nCependant, il peut être difficile d'obtenir les dernières briques.\n\nTerminer un niveau plus tôt permet d'obtenir des choix supplémentaires lors de la mise à niveau. \n\nNe jamais manquer de briques est également très avantageux.\n\nDonc, si vous avez du mal à casser les dernières briques, obtenir cet avantage plusieurs fois peut vous aider.",
|
||||
"upgrades.skip_last.help": "La dernière brique s'autodétruit.",
|
||||
|
@ -321,7 +327,7 @@
|
|||
"upgrades.telekinesis.help_plural": "Effet plus fort sur la balle",
|
||||
"upgrades.telekinesis.name": "Télékinésie",
|
||||
"upgrades.top_is_lava.fullHelp": "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.help": "+{{lvl}} combo par brique, RAZ en cas de rebond au plafond",
|
||||
"upgrades.top_is_lava.help": "+{{lvl}} combo par brique, perdu en cas de rebond au plafond",
|
||||
"upgrades.top_is_lava.name": "Icare ",
|
||||
"upgrades.trampoline.fullHelp": "Une des rares améliorations à ne pas avoir de condition de remise à zéro",
|
||||
"upgrades.trampoline.help": "+{{lvl}} combo à chaque rebond d'une balle sur le palet,-{{lvl}} combo à chaque rebond sur un bord ",
|
||||
|
|
|
@ -68,6 +68,7 @@ export function newGameState(params: RunParams): GameState {
|
|||
puckWidth: 200,
|
||||
baseSpeed: 12,
|
||||
combo: 1,
|
||||
lastCombo: 1,
|
||||
gridSize: 12,
|
||||
running: false,
|
||||
isGameOver: false,
|
||||
|
|
|
@ -100,7 +100,8 @@ export function render(gameState: GameState) {
|
|||
const brightness = isOptionOn("extra_bright") ? 3 : 1;
|
||||
|
||||
haloCanvasCtx.globalCompositeOperation = "lighten";
|
||||
haloCanvasCtx.globalAlpha = 0.1;
|
||||
haloCanvasCtx.globalAlpha =
|
||||
0.1 + (0.5 * 10) / (liveCount(gameState.coins) + 10);
|
||||
forEachLiveOne(gameState.coins, (coin) => {
|
||||
const color = getCoinRenderColor(gameState, coin);
|
||||
drawFuzzyBall(
|
||||
|
|
2
src/types.d.ts
vendored
2
src/types.d.ts
vendored
|
@ -201,6 +201,8 @@ export type GameState = {
|
|||
baseSpeed: number;
|
||||
// Score multiplier
|
||||
combo: number;
|
||||
// Combo at the start of the tick
|
||||
lastCombo: number;
|
||||
// Whether the game is running or paused
|
||||
running: boolean;
|
||||
isGameOver: boolean;
|
||||
|
|
|
@ -541,7 +541,7 @@ export const rawUpgrades = [
|
|||
threshold: 120000,
|
||||
giftable: false,
|
||||
id: "ghost_coins",
|
||||
max: 1,
|
||||
max: 3,
|
||||
name: t("upgrades.ghost_coins.name"),
|
||||
help: (lvl: number) => t("upgrades.ghost_coins.help", { lvl }),
|
||||
fullHelp: t("upgrades.ghost_coins.fullHelp"),
|
||||
|
@ -611,6 +611,17 @@ export const rawUpgrades = [
|
|||
help: (lvl: number) => t("upgrades.side_kick.help", { lvl, loss: lvl * 2 }),
|
||||
fullHelp: t("upgrades.side_kick.fullHelp"),
|
||||
},
|
||||
{
|
||||
requires: "",
|
||||
|
||||
threshold: 150000,
|
||||
giftable: true,
|
||||
id: "side_flip",
|
||||
max: 3,
|
||||
name: t("upgrades.side_flip.name"),
|
||||
help: (lvl: number) => t("upgrades.side_flip.help", { lvl, loss: lvl * 2 }),
|
||||
fullHelp: t("upgrades.side_flip.fullHelp"),
|
||||
},
|
||||
{
|
||||
requires: "",
|
||||
threshold: 155000,
|
||||
|
@ -663,4 +674,14 @@ export const rawUpgrades = [
|
|||
help: (lvl: number) => t("upgrades.limitless.help", { lvl }),
|
||||
fullHelp: t("upgrades.limitless.fullHelp"),
|
||||
},
|
||||
{
|
||||
requires: "",
|
||||
threshold: 180000,
|
||||
giftable: false,
|
||||
id: "minefield",
|
||||
max: 3,
|
||||
name: t("upgrades.minefield.name"),
|
||||
help: (lvl: number) => t("upgrades.minefield.help", { lvl }),
|
||||
fullHelp: t("upgrades.minefield.fullHelp"),
|
||||
},
|
||||
] as const;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue