mirror of
https://gitlab.com/lecarore/breakout71.git
synced 2025-04-20 04:05:06 -04:00
See fixes in readme
This commit is contained in:
parent
92a0edabef
commit
9958717260
10 changed files with 210 additions and 89 deletions
13
Readme.md
13
Readme.md
|
@ -16,18 +16,20 @@ Break colourful bricks, catch bouncing coins and select powerful upgrades !
|
|||
# changelog
|
||||
|
||||
## next goals
|
||||
- [jaceys] Move the restart button out of the menu, so that it is more easily accessible
|
||||
- [jaceys] A visual indication of whether a ball has hit a brick this serve
|
||||
- choose starting perks
|
||||
- wind : move coins based on puck movement not position
|
||||
- Top down /reach: punishing now, maybe only reset if you hit the lowest populate row of the level, if it's not a full width row
|
||||
- main menu : show high score
|
||||
|
||||
## next release
|
||||
|
||||
- Top down /reach: now only the lowest level of N bricks resets combo, and all other bricks do +N combo
|
||||
- picky eater: don't reset if no brick of ball color
|
||||
- main menu : show high score
|
||||
- keep high score of past runs
|
||||
- tooltip on stats
|
||||
- fixed : looping didn't work
|
||||
- two abstract levels, stripes and openings
|
||||
- added reset button for perks in lab mode
|
||||
|
||||
## 29058469
|
||||
|
||||
|
@ -157,7 +159,9 @@ Break colourful bricks, catch bouncing coins and select powerful upgrades !
|
|||
- [colin] varied diet - your combo grows by 2 when your ball changes color, but decreses by one when a brick is broken ?
|
||||
- [colin] trickle up - inverse of reach more or less
|
||||
- Dividends — +1 combo per 10 coins lost (band-aid for players who struggle, useful addition when choosing Ascetism)
|
||||
|
||||
- +1 combo per bricks / resets after 5/lvl seconds without explosion
|
||||
- +1 combo per bricks / resets after 5/lvl seconds without coin catch
|
||||
- +1 combo per bricks / resets after 5/lvl seconds without coin puck bounce
|
||||
|
||||
## Medium difficulty perks ideas
|
||||
- balls collision split them into 4 smaller balls, lvl times (requires rework)
|
||||
|
@ -248,6 +252,7 @@ This requires recording a bit more info about each run.
|
|||
- final bosses (large vertical level that scrolls down faster and faster)
|
||||
|
||||
## Rejected ideas
|
||||
- [jaceys] Move the restart button out of the menu, so that it is more easily accessible (will allow user to choose starting perk instead)
|
||||
- colored coins only (coins should be of the color of the ball to count, otherwise what ? i'd rather avoid negative points)
|
||||
- coins avoid ball of different color (pointless)
|
||||
- [colin] wormhole - the puck sometimes don't bounce the ball back up but teleports it to the top of the screen as if it fell through from bottom to top. higher levels reduce the times it takes to reload that effect (not sure how that to word that in 1 setence)
|
||||
|
|
96
dist/index.html
vendored
96
dist/index.html
vendored
File diff suppressed because one or more lines are too long
|
@ -4,7 +4,7 @@ import { t } from "./i18n/i18n";
|
|||
import { getSettingValue, getTotalScore, setSettingValue } from "./settings";
|
||||
import { confirmRestart, creativeModeThreshold, restart } from "./game";
|
||||
import { requiredAsyncAlert } from "./asyncAlert";
|
||||
import { describeLevel, highScoreForMode } from "./game_utils";
|
||||
import {describeLevel, highScoreForMode, sumOfValues} from "./game_utils";
|
||||
|
||||
export function creativeMode(gameState: GameState) {
|
||||
return {
|
||||
|
@ -34,7 +34,7 @@ export async function openCreativeModePerksPicker(
|
|||
"creativeModePerks_" + currentLevel,
|
||||
{},
|
||||
),
|
||||
choice: Upgrade | Level | void;
|
||||
choice: Upgrade | Level | 'reset'| void;
|
||||
|
||||
upgrades.forEach((u) => {
|
||||
creativeModePerks[u.id] = Math.min(
|
||||
|
@ -51,11 +51,16 @@ export async function openCreativeModePerksPicker(
|
|||
];
|
||||
|
||||
while (
|
||||
(choice = await requiredAsyncAlert<Upgrade | Level>({
|
||||
(choice = await requiredAsyncAlert<Upgrade | Level|'reset'>({
|
||||
title: t("lab.title", { lvl: currentLevel + 1 }),
|
||||
actionsAsGrid: true,
|
||||
content: [
|
||||
t("lab.instructions"),
|
||||
{
|
||||
value:'reset',
|
||||
text:t('lab.reset'),
|
||||
disabled: !sumOfValues(creativeModePerks)
|
||||
},
|
||||
...upgrades
|
||||
.filter((u) => !noCreative.includes(u.id))
|
||||
.map((u) => ({
|
||||
|
@ -82,7 +87,11 @@ export async function openCreativeModePerksPicker(
|
|||
],
|
||||
}))
|
||||
) {
|
||||
if ("bricks" in choice) {
|
||||
if(choice==='reset'){
|
||||
upgrades.forEach((u) => {
|
||||
creativeModePerks[u.id]=0
|
||||
});
|
||||
}else if ("bricks" in choice) {
|
||||
setSettingValue("creativeModePerks_" + currentLevel, creativeModePerks);
|
||||
upgrades.forEach((u) => {
|
||||
gameState.perks[u.id] = creativeModePerks[u.id];
|
||||
|
|
|
@ -960,7 +960,7 @@
|
|||
{
|
||||
"name": "icon:reach",
|
||||
"size": 8,
|
||||
"bricks": "_________yyyyyy__yyyyyy__yyyyyy__rrrrrr_______W____________WWW__",
|
||||
"bricks": "________ttt__tttttt_Wttt__t__t____r__r___________________WWW____",
|
||||
"svg": null,
|
||||
"color": ""
|
||||
},
|
||||
|
@ -1107,5 +1107,19 @@
|
|||
"svg": null,
|
||||
"color": "",
|
||||
"credit": "https://prohama.com/balloon-1/"
|
||||
},
|
||||
{
|
||||
"name": "Opening",
|
||||
"size": 14,
|
||||
"bricks": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbyyyyyyyyyyyybbyB___BB___Bybby__________ybbyyy______yyybbbbyyB__Byybbbbbbbyy__yybbbbbbbbby__ybbbbbyyyyby__ybyyyy___yby__yby______yby__yby______yBy__yBy______yyy__yyy___",
|
||||
"svg": null,
|
||||
"color": ""
|
||||
},
|
||||
{
|
||||
"name": "Stripes",
|
||||
"size": 17,
|
||||
"bricks": "bbb______tttttt________tttttt________tttttt______bbtttttt______bbbbbttt______bbbbbb________bbbbbb________bbbbbb______ttbbbbbb______tttttbbb______tttttt________tttttt________tttttt______bbtttttt______bbbbbttt______bbbbbb________bbbbbb________bbbbbb________bbbbbb___________bbb______________",
|
||||
"svg": null,
|
||||
"color": ""
|
||||
}
|
||||
]
|
||||
]
|
|
@ -14,18 +14,18 @@ import {
|
|||
import {
|
||||
brickCenterX,
|
||||
brickCenterY,
|
||||
countBricksAbove,
|
||||
countBricksBelow,
|
||||
// countBricksAbove,
|
||||
// countBricksBelow,
|
||||
currentLevelInfo,
|
||||
distance2,
|
||||
distanceBetween,
|
||||
getMajorityValue,
|
||||
getPossibleUpgrades,
|
||||
getRowColIndex,
|
||||
getRowColIndex, isPickyEatingPossible,
|
||||
isTelekinesisActive,
|
||||
isYoyoActive,
|
||||
makeEmptyPerksMap,
|
||||
max_levels,
|
||||
max_levels, reachRedRowIndex,
|
||||
shouldPierceByColor,
|
||||
} from "./game_utils";
|
||||
import { t } from "./i18n/i18n";
|
||||
|
@ -344,6 +344,9 @@ export function explodeBrick(
|
|||
const color = gameState.bricks[index];
|
||||
if (!color) return;
|
||||
|
||||
const wasPickyEaterPossible = gameState.perks.picky_eater&& isPickyEatingPossible(gameState)
|
||||
const redRowReach=reachRedRowIndex(gameState)
|
||||
|
||||
gameState.lastBrickBroken = gameState.levelTime;
|
||||
|
||||
if (color === "black") {
|
||||
|
@ -434,17 +437,18 @@ export function explodeBrick(
|
|||
}
|
||||
}
|
||||
|
||||
if (gameState.perks.reach) {
|
||||
if (
|
||||
countBricksAbove(gameState, index) &&
|
||||
!countBricksBelow(gameState, index)
|
||||
) {
|
||||
if(redRowReach!==-1){
|
||||
if(Math.floor(index/gameState.level.size)===redRowReach ) {
|
||||
resetCombo(gameState, x, y);
|
||||
} else {
|
||||
gameState.combo += gameState.perks.reach;
|
||||
}else{
|
||||
|
||||
for(let x=0;x<gameState.level.size;x++){
|
||||
if(gameState.bricks[redRowReach * gameState.level.size+ x])gameState.combo++
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (
|
||||
gameState.lastPuckMove &&
|
||||
gameState.perks.passive_income &&
|
||||
|
@ -469,7 +473,7 @@ export function explodeBrick(
|
|||
color !== gameState.ballsColor &&
|
||||
color
|
||||
) {
|
||||
if (gameState.perks.picky_eater) {
|
||||
if ( wasPickyEaterPossible) {
|
||||
resetCombo(gameState, ball.x, ball.y);
|
||||
}
|
||||
schedulGameSound(gameState, "colorChange", ball.x, 0.8);
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
import { Ball, GameState, Level, PerkId, PerksMap } from "./types";
|
||||
import { icons, upgrades } from "./loadGameData";
|
||||
import { t } from "./i18n/i18n";
|
||||
import {brickAt} from "./level_editor/levels_editor_util";
|
||||
|
||||
export function describeLevel(level: Level) {
|
||||
let bricks = 0,
|
||||
|
@ -131,6 +132,31 @@ export function currentLevelInfo(gameState: GameState) {
|
|||
return gameState.level;
|
||||
}
|
||||
|
||||
export function isPickyEatingPossible(gameState: GameState){
|
||||
return gameState.bricks.indexOf(gameState.ballsColor)!==-1
|
||||
}
|
||||
|
||||
export function reachRedRowIndex(gameState: GameState){
|
||||
if(!gameState.perks.reach) return -1
|
||||
const {size}=gameState.level
|
||||
let minY=-1, maxY=-1, maxYCount=-1;
|
||||
for(let y=0;y<size;y++)
|
||||
for(let x=0;x<size;x++)
|
||||
if(gameState.bricks[x+y*size]){
|
||||
if(minY==-1) minY=y
|
||||
if(maxY<y) {
|
||||
maxY = y
|
||||
maxYCount = 0
|
||||
}
|
||||
if(maxY==y) maxYCount++
|
||||
}
|
||||
|
||||
if(maxY<1) return -1
|
||||
if(maxY==minY) return -1
|
||||
if(maxYCount===size) return -1
|
||||
return maxY
|
||||
}
|
||||
|
||||
export function isTelekinesisActive(gameState: GameState, ball: Ball) {
|
||||
return gameState.perks.telekinesis && ball.vy < 0;
|
||||
}
|
||||
|
@ -206,28 +232,28 @@ export function shouldPierceByColor(
|
|||
return true;
|
||||
}
|
||||
|
||||
export function countBricksAbove(gameState: GameState, index: number) {
|
||||
const col = index % gameState.gridSize;
|
||||
const row = Math.floor(index / gameState.gridSize);
|
||||
let count = 0;
|
||||
for (let y = 0; y < row; y++) {
|
||||
if (gameState.bricks[col + y * gameState.gridSize]) {
|
||||
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 countBricksAbove(gameState: GameState, index: number) {
|
||||
// const col = index % gameState.gridSize;
|
||||
// const row = Math.floor(index / gameState.gridSize);
|
||||
// let count = 0;
|
||||
// for (let y = 0; y < row; y++) {
|
||||
// if (gameState.bricks[col + y * gameState.gridSize]) {
|
||||
// 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"]) {
|
||||
try {
|
||||
const score = parseInt(
|
||||
|
|
|
@ -502,6 +502,21 @@
|
|||
</translation>
|
||||
</translations>
|
||||
</concept_node>
|
||||
<concept_node>
|
||||
<name>reset</name>
|
||||
<description/>
|
||||
<comment/>
|
||||
<translations>
|
||||
<translation>
|
||||
<language>en-US</language>
|
||||
<approved>false</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>fr-FR</language>
|
||||
<approved>false</approved>
|
||||
</translation>
|
||||
</translations>
|
||||
</concept_node>
|
||||
<concept_node>
|
||||
<name>select_level</name>
|
||||
<description/>
|
||||
|
@ -3776,7 +3791,7 @@
|
|||
</translation>
|
||||
<translation>
|
||||
<language>fr-FR</language>
|
||||
<approved>true</approved>
|
||||
<approved>false</approved>
|
||||
</translation>
|
||||
</translations>
|
||||
</concept_node>
|
||||
|
|
|
@ -29,6 +29,7 @@
|
|||
"lab.help": "Try to come up with 3 good builds",
|
||||
"lab.instructions": "Select upgrades below, then pick the level to play. Each time you upgrade a perk, it cannot be upgraded as much in the following levels. ",
|
||||
"lab.menu_entry": "New lab game",
|
||||
"lab.reset": "Reset all to 0",
|
||||
"lab.select_level": "Select a level for this build",
|
||||
"lab.title": "Choose perks for level {{lvl}}/3",
|
||||
"lab.unlocks_at": "Unlocks at total score {{score}}",
|
||||
|
@ -220,7 +221,7 @@
|
|||
"upgrades.passive_income.fullHelp": "Some perks can help the balls do what you want without needing to do anything.",
|
||||
"upgrades.passive_income.help": "+{{lvl}} combo / brick, unless the puck moved in the last {{time}}s, then it resets instead",
|
||||
"upgrades.passive_income.name": "Passive income",
|
||||
"upgrades.picky_eater.fullHelp": "Whenever you break a brick the same color as your ball, your combo increases by one. \n\nIf it's a different color, the ball takes that new color, but the combo resets.\nThe bricks with the right color will get a white border. \n\nOnce you get a combo higher than your minimum, the bricks of the wrong color will get a red halo. \n\nIf you have more than one ball, they all change color whenever one of them hits a brick.",
|
||||
"upgrades.picky_eater.fullHelp": "Whenever you break a brick the same color as your ball, your combo increases by one. \n\nIf it's a different color, the ball takes that new color, but the combo resets, unless there were no bricks left of the ball's color. \n\nOnce you get a combo higher than your minimum, the bricks of the wrong color will get a red halo. \n\nIf you have more than one ball, they all switch color whenever one of them hits a brick.",
|
||||
"upgrades.picky_eater.help": "+{{lvl}} combo per brick broken, resets on ball color change",
|
||||
"upgrades.picky_eater.name": "Picky eater",
|
||||
"upgrades.pierce.fullHelp": "The ball normally bounces as soon as it touches something. With this perk, it will continue its trajectory for up to 3 bricks broken. \n\nAfter that, it will bounce on the 4th brick, and you'll need to touch the puck to reset the counter.",
|
||||
|
@ -233,8 +234,8 @@
|
|||
"upgrades.puck_repulse_ball.help": "Puck repulses balls",
|
||||
"upgrades.puck_repulse_ball.help_plural": "Stronger repulsion force",
|
||||
"upgrades.puck_repulse_ball.name": "Soft landing",
|
||||
"upgrades.reach.fullHelp": "Try to lock the ball up to earn more combo",
|
||||
"upgrades.reach.help": "+{{lvl}} combo / bricks , lowest brick of a pile resets combo",
|
||||
"upgrades.reach.fullHelp": "If there is only one row of bricks, or if the lowest row of bricks cover the whole width of the game, then this perk does nothing. Otherwise, breaking this lowest row resets the combo, while breaking anything else increases the combo by the number of bricks present on that lowest row. \n\nThe lowest row will be highlighted in red. ",
|
||||
"upgrades.reach.help": " Touching the N bricks of the lowest row resets the combo. Otherwise, +N combo",
|
||||
"upgrades.reach.name": "Top down",
|
||||
"upgrades.respawn.fullHelp": "Some particle effect will let you know where bricks will appear. ",
|
||||
"upgrades.respawn.help": "{{percent}}% of bricks re-spawn after {{delay}}s.",
|
||||
|
|
|
@ -29,6 +29,7 @@
|
|||
"lab.help": "Créez trois bonnes combinaisons d'améliorations",
|
||||
"lab.instructions": "Sélectionnez les améliorations ci-dessous, puis choisissez le niveau à jouer. Chaque amélioration d'un avantage ne peut pas être améliorée autant dans les niveaux suivants.",
|
||||
"lab.menu_entry": "Nouvelle partie \"lab\" ",
|
||||
"lab.reset": "RAZ toutes les améliorations",
|
||||
"lab.select_level": "Sélectionnez un niveau pour continue",
|
||||
"lab.title": "Choisissez les avantages pour le niveau {{lvl}}/3",
|
||||
"lab.unlocks_at": "Déverrouillé à partir d'un score total de {{score}}",
|
||||
|
@ -220,7 +221,7 @@
|
|||
"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.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.\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 lorsque l'une d'entre elles touche une brique.",
|
||||
"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.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.",
|
||||
|
@ -233,8 +234,8 @@
|
|||
"upgrades.puck_repulse_ball.help": "Le palet repousse les balles",
|
||||
"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": "Essayez de bloquer la balle au dessus des briques pour plus de combo",
|
||||
"upgrades.reach.help": "+{{lvl}} combo / brique, la plus basse d'une colonne RAZ le combo",
|
||||
"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.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.",
|
||||
|
|
|
@ -2,12 +2,12 @@ import { baseCombo, forEachLiveOne, liveCount } from "./gameStateMutators";
|
|||
import {
|
||||
brickCenterX,
|
||||
brickCenterY,
|
||||
countBricksAbove,
|
||||
countBricksBelow,
|
||||
currentLevelInfo,
|
||||
// countBricksAbove,
|
||||
// countBricksBelow,
|
||||
currentLevelInfo, isPickyEatingPossible,
|
||||
isTelekinesisActive,
|
||||
isYoyoActive,
|
||||
max_levels,
|
||||
max_levels, reachRedRowIndex,
|
||||
} from "./game_utils";
|
||||
import { colorString, GameState } from "./types";
|
||||
import { t } from "./i18n/i18n";
|
||||
|
@ -545,9 +545,11 @@ export function renderAllBricks() {
|
|||
ctx.globalAlpha = 1;
|
||||
|
||||
const hasCombo = gameState.combo > baseCombo(gameState);
|
||||
const redBorderOnBricksWithWrongColor =
|
||||
hasCombo && gameState.perks.picky_eater && !isOptionOn("basic");
|
||||
|
||||
const redBorderOnBricksWithWrongColor =
|
||||
hasCombo && gameState.perks.picky_eater && isPickyEatingPossible(gameState);
|
||||
|
||||
console.log('redBorderOnBricksWithWrongColor '+redBorderOnBricksWithWrongColor)
|
||||
const redColorOnAllBricks = !!(
|
||||
gameState.lastPuckMove &&
|
||||
gameState.perks.passive_income &&
|
||||
|
@ -556,12 +558,14 @@ export function renderAllBricks() {
|
|||
gameState.levelTime - 250 * gameState.perks.passive_income
|
||||
);
|
||||
|
||||
const redRowReach= reachRedRowIndex(gameState)
|
||||
|
||||
let offset = getDashOffset(gameState);
|
||||
if (
|
||||
!(
|
||||
redBorderOnBricksWithWrongColor ||
|
||||
redColorOnAllBricks ||
|
||||
gameState.perks.reach ||
|
||||
redRowReach!==-1 ||
|
||||
gameState.perks.zen
|
||||
)
|
||||
) {
|
||||
|
@ -571,11 +575,14 @@ export function renderAllBricks() {
|
|||
const clairVoyance =
|
||||
gameState.perks.clairvoyant && gameState.brickHP.reduce((a, b) => a + b, 0);
|
||||
|
||||
|
||||
const newKey =
|
||||
gameState.gameZoneWidth +
|
||||
"_" +
|
||||
gameState.bricks.join("_") +
|
||||
bombSVG.complete +
|
||||
"_" +
|
||||
redRowReach+
|
||||
"_" +
|
||||
redBorderOnBricksWithWrongColor +
|
||||
"_" +
|
||||
|
@ -607,10 +614,7 @@ export function renderAllBricks() {
|
|||
|
||||
if (!color) return;
|
||||
|
||||
let redBecauseOfReach =
|
||||
gameState.perks.reach &&
|
||||
countBricksAbove(gameState, index) &&
|
||||
!countBricksBelow(gameState, index);
|
||||
let redBecauseOfReach = redRowReach===Math.floor(index/gameState.level.size) ;
|
||||
|
||||
let redBorder =
|
||||
(gameState.ballsColor !== color &&
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue