diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 884117b..3dc5c75 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -29,8 +29,8 @@ android {
applicationId = "me.lecaro.breakout"
minSdk = 21
targetSdk = 34
- versionCode = 29062545
- versionName = "29062545"
+ versionCode = 29062687
+ versionName = "29062687"
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables {
useSupportLibrary = true
diff --git a/app/src/main/assets/index.html b/app/src/main/assets/index.html
index ef1c3ac..51a7a2d 100644
--- a/app/src/main/assets/index.html
+++ b/app/src/main/assets/index.html
@@ -1 +1 @@
-
Breakout 71
\ No newline at end of file
+Breakout 71
\ No newline at end of file
diff --git a/dist/index.html b/dist/index.html
index 5aa4e31..faf7f77 100644
--- a/dist/index.html
+++ b/dist/index.html
@@ -1278,7 +1278,7 @@ async function openSettingsMenu() {
...actions
],
allowClose: true,
- className: 'settings'
+ className: "settings"
});
if (cb) {
cb();
@@ -1354,7 +1354,7 @@ async function openUnlocksList() {
...levelActions
],
allowClose: true,
- className: 'actionsAsGrid'
+ className: "actionsAsGrid"
});
if (tryOn) {
if (await confirmRestart(gameState)) restart({
@@ -1494,7 +1494,7 @@ const upgrades = (0, _upgrades.rawUpgrades).map((u)=>({
}));
},{"./data/palette.json":"ktRBU","./data/levels.json":"8JSUc","./data/version.json":"iyP6E","./upgrades":"1u3Dx","./getLevelBackground":"7OIPf","./levelIcon":"6rQoT","@parcel/transformer-js/src/esmodule-helpers.js":"gkKU3"}],"iyP6E":[function(require,module,exports,__globalThis) {
-module.exports = JSON.parse("\"29062545\"");
+module.exports = JSON.parse("\"29062687\"");
},{}],"1u3Dx":[function(require,module,exports,__globalThis) {
var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js");
@@ -3149,7 +3149,7 @@ function addToScore(gameState, coin) {
gameState.highScore = gameState.score;
localStorage.setItem("breakout-3-hs-" + gameState.mode, gameState.score.toString());
}
- if (!(0, _options.isOptionOn)("basic")) makeParticle(gameState, coin.previousX, coin.previousY, (gameState.canvasWidth - coin.x) / 100, -coin.y / 100, gameState.perks.metamorphosis || (0, _options.isOptionOn)("colorful_coins") ? coin.color : 'gold', true, gameState.coinSize / 2, 100 + Math.random() * 50);
+ if (!(0, _options.isOptionOn)("basic")) makeParticle(gameState, coin.previousX, coin.previousY, (gameState.canvasWidth - coin.x) / 100, -coin.y / 100, gameState.perks.metamorphosis || (0, _options.isOptionOn)("colorful_coins") ? coin.color : "gold", true, gameState.coinSize / 2, 100 + Math.random() * 50);
schedulGameSound(gameState, "coinCatch", coin.x, 1);
gameState.runStatistics.score += coin.points;
if (gameState.perks.asceticism) decreaseCombo(gameState, gameState.perks.asceticism * 3 * coin.points, coin.x, coin.y);
@@ -3423,7 +3423,7 @@ frames = 1) {
if (!gameState.perks.etherealcoins) {
const flip = gameState.perks.helium > 0 && Math.abs(coin.x - gameState.puckPosition) * 2 > gameState.puckWidth + coin.size;
coin.vy += frames * coin.weight * 0.8 * (flip ? -gameState.perks.helium : 1);
- if (flip && !(0, _options.isOptionOn)("basic") && Math.random() < 0.1) makeParticle(gameState, coin.x, coin.y, 0, gameState.baseSpeed, gameState.perks.metamorphosis || (0, _options.isOptionOn)("colorful_coins") ? coin.color : 'gold', true, 5, 250);
+ if (flip && !(0, _options.isOptionOn)("basic") && Math.random() < 0.1) makeParticle(gameState, coin.x, coin.y, 0, gameState.baseSpeed, gameState.perks.metamorphosis || (0, _options.isOptionOn)("colorful_coins") ? coin.color : "gold", true, 5, 250);
}
const speed = (Math.abs(coin.vx) + Math.abs(coin.vy)) * 10;
const hitBorder = bordersHitCheck(gameState, coin, coin.size / 2, frames);
@@ -3876,7 +3876,7 @@ function render(gameState) {
haloCanvasCtx.fillRect(0, 0, width / haloScale, height / haloScale);
haloCanvasCtx.globalCompositeOperation = "screen";
(0, _gameStateMutators.forEachLiveOne)(gameState.coins, (coin)=>{
- const color = gameState.perks.metamorphosis || (0, _options.isOptionOn)("colorful_coins") ? coin.color : 'gold';
+ const color = gameState.perks.metamorphosis || (0, _options.isOptionOn)("colorful_coins") ? coin.color : "gold";
haloCanvasCtx.globalAlpha = 0.5;
drawFuzzyBall(haloCanvasCtx, color, gameState.coinSize * 2 / haloScale, coin.x / haloScale, coin.y / haloScale);
if ((0, _options.isOptionOn)("extra_bright")) {
@@ -3972,7 +3972,7 @@ function render(gameState) {
// Coins
ctx.globalAlpha = 1;
(0, _gameStateMutators.forEachLiveOne)(gameState.coins, (coin)=>{
- const color = gameState.perks.metamorphosis || (0, _options.isOptionOn)("colorful_coins") ? coin.color : 'gold';
+ const color = gameState.perks.metamorphosis || (0, _options.isOptionOn)("colorful_coins") ? coin.color : "gold";
// ctx.globalCompositeOperation = "source-over";
ctx.globalCompositeOperation = color === "gold" || level.color !== "#000000" || (0, _options.isOptionOn)("opaque_coins") ? "source-over" : "screen";
drawCoin(ctx, color, coin.size, coin.x, coin.y, hasCombo && gameState.perks.asceticism && "red" || color === "gold" && "gold" || (0, _options.isOptionOn)("opaque_coins") ? gameState.puckColor : color, coin.a);
@@ -4075,15 +4075,15 @@ function render(gameState) {
if (!(0, _options.isOptionOn)("basic") && (0, _options.isOptionOn)("contrast") && level.svg && level.color === "#000000") {
// haloCanvasCtx.globalCompositeOperation = 'multiply';
// haloCanvasCtx.fillRect(0,0,haloCanvas.width,haloCanvas.height)
- haloCanvasCtx.fillStyle = 'white';
+ haloCanvasCtx.fillStyle = "white";
haloCanvasCtx.globalAlpha = 0.25;
- haloCanvasCtx.globalCompositeOperation = 'screen';
+ haloCanvasCtx.globalCompositeOperation = "screen";
haloCanvasCtx.fillRect(0, 0, haloCanvas.width, haloCanvas.height);
ctx.globalAlpha = 1;
ctx.globalCompositeOperation = "soft-light";
ctx.drawImage(haloCanvas, 0, 0, width, height);
}
- ctx.globalCompositeOperation = 'source-over';
+ ctx.globalCompositeOperation = "source-over";
ctx.globalAlpha = 1;
if ((0, _options.isOptionOn)("mobile-mode") && !gameState.running) drawText(ctx, (0, _i18N.t)("play.mobile_press_to_play"), gameState.puckColor, gameState.puckHeight, gameState.canvasWidth / 2, gameState.gameZoneHeight + (gameState.canvasHeight - gameState.gameZoneHeight) / 2);
if (shaked) ctx.resetTransform();
@@ -4685,7 +4685,7 @@ function requiredAsyncAlert(p) {
allowClose: false
});
}
-async function asyncAlert({ title, content = [], allowClose = true, className = '' }) {
+async function asyncAlert({ title, content = [], allowClose = true, className = "" }) {
updateAlertsOpen(1);
return new Promise((resolve)=>{
popupWrap.className = className;
@@ -4940,7 +4940,7 @@ async function openCreativeModePerksPicker(gameState, currentLevel) {
title: (0, _i18N.t)("lab.title", {
lvl: currentLevel + 1
}),
- className: 'actionsAsGrid',
+ className: "actionsAsGrid",
content: [
(0, _i18N.t)("lab.instructions"),
{
@@ -5111,7 +5111,7 @@ async function openStartingPerksEditor() {
});
const perk = await (0, _asyncAlert.asyncAlert)({
title: (0, _i18N.t)("main_menu.starting_perks"),
- className: 'actionsAsGrid',
+ className: "actionsAsGrid",
content: [
(0, _i18N.t)("main_menu.starting_perks_checked"),
...buttons.filter((b)=>b.checked),
diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/1.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/1.png
index 9adf31b..cc89455 100644
Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/1.png and b/fastlane/metadata/android/en-US/images/phoneScreenshots/1.png differ
diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/2.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/2.png
index f3e9008..3de10df 100644
Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/2.png and b/fastlane/metadata/android/en-US/images/phoneScreenshots/2.png differ
diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/3.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/3.png
index 686bbb4..8f1b9b0 100644
Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/3.png and b/fastlane/metadata/android/en-US/images/phoneScreenshots/3.png differ
diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/4.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/4.png
index 9e6ad0b..ebf4637 100644
Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/4.png and b/fastlane/metadata/android/en-US/images/phoneScreenshots/4.png differ
diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/5.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/5.png
index d2884c5..aa07ac1 100644
Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/5.png and b/fastlane/metadata/android/en-US/images/phoneScreenshots/5.png differ
diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/6.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/6.png
index a88c106..58d31fc 100644
Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/6.png and b/fastlane/metadata/android/en-US/images/phoneScreenshots/6.png differ
diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/7.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/7.png
index 792a92a..2ece186 100644
Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/7.png and b/fastlane/metadata/android/en-US/images/phoneScreenshots/7.png differ
diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/8.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/8.png
index bd5b3a9..75c6a62 100644
Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/8.png and b/fastlane/metadata/android/en-US/images/phoneScreenshots/8.png differ
diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/9.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/9.png
index 9a6c5ba..e42b287 100644
Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/9.png and b/fastlane/metadata/android/en-US/images/phoneScreenshots/9.png differ
diff --git a/src/PWA/sw-b71.js b/src/PWA/sw-b71.js
index 3d435ef..c3d39d3 100644
--- a/src/PWA/sw-b71.js
+++ b/src/PWA/sw-b71.js
@@ -1,5 +1,5 @@
// The version of the cache.
-const VERSION = "29062545";
+const VERSION = "29062687";
// The name of the cache
const CACHE_NAME = `breakout-71-${VERSION}`;
diff --git a/src/asyncAlert.ts b/src/asyncAlert.ts
index b336866..4aa58c6 100644
--- a/src/asyncAlert.ts
+++ b/src/asyncAlert.ts
@@ -28,7 +28,7 @@ let lastClickedItemIndex = -1;
export function requiredAsyncAlert(p: {
title?: string;
content: (string | AsyncAlertAction)[];
- className?:string;
+ className?: string;
}): Promise {
return asyncAlert({ ...p, allowClose: false });
}
@@ -37,16 +37,16 @@ export async function asyncAlert({
title,
content = [],
allowClose = true,
- className = '',
+ className = "",
}: {
title?: string;
content: (string | AsyncAlertAction)[];
allowClose?: boolean;
- className?:string;
+ className?: string;
}): Promise {
updateAlertsOpen(+1);
return new Promise((resolve) => {
- popupWrap.className = className ;
+ popupWrap.className = className;
closeModaleButton.style.display = allowClose ? "" : "none";
const popup = document.createElement("div");
diff --git a/src/creative.ts b/src/creative.ts
index cb0aece..62920d5 100644
--- a/src/creative.ts
+++ b/src/creative.ts
@@ -53,7 +53,7 @@ export async function openCreativeModePerksPicker(
while (
(choice = await requiredAsyncAlert({
title: t("lab.title", { lvl: currentLevel + 1 }),
- className:'actionsAsGrid',
+ className: "actionsAsGrid",
content: [
t("lab.instructions"),
{
diff --git a/src/data/version.json b/src/data/version.json
index 842d0d1..df53cd0 100644
--- a/src/data/version.json
+++ b/src/data/version.json
@@ -1 +1 @@
-"29062545"
+"29062687"
diff --git a/src/game.less b/src/game.less
index 3c700a3..d1ecf8c 100644
--- a/src/game.less
+++ b/src/game.less
@@ -1,9 +1,10 @@
* {
- font-family: Courier New,
- Courier,
- Lucida Sans Typewriter,
- Lucida Typewriter,
- monospace;
+ font-family:
+ Courier New,
+ Courier,
+ Lucida Sans Typewriter,
+ Lucida Typewriter,
+ monospace;
box-sizing: border-box;
}
@@ -248,7 +249,6 @@ body:not(.has-alert-open) #popup {
}
@media (min-width: 1400px) {
-
&.settings {
&:before {
opacity: 0;
@@ -256,12 +256,10 @@ body:not(.has-alert-open) #popup {
& > div {
margin-right: 0;
- max-width: 400px
+ max-width: 400px;
}
}
-
}
-
}
/*Unlocks progress bar*/
diff --git a/src/game.ts b/src/game.ts
index bc21ab0..b68d45c 100644
--- a/src/game.ts
+++ b/src/game.ts
@@ -798,7 +798,7 @@ async function openSettingsMenu() {
title: t("main_menu.settings_title"),
content: [t("main_menu.settings_help"), ...actions],
allowClose: true,
- className:'settings',
+ className: "settings",
});
if (cb) {
cb();
@@ -875,7 +875,8 @@ async function openUnlocksList() {
t("unlocks.level"),
...levelActions,
],
- allowClose: true,className:'actionsAsGrid',
+ allowClose: true,
+ className: "actionsAsGrid",
});
if (tryOn) {
if (await confirmRestart(gameState)) {
diff --git a/src/gameStateMutators.ts b/src/gameStateMutators.ts
index 319a39e..0516cd4 100644
--- a/src/gameStateMutators.ts
+++ b/src/gameStateMutators.ts
@@ -430,7 +430,7 @@ export function explodeBrick(
cy,
ball.previousVX * (0.5 + Math.random()),
ball.previousVY * (0.5 + Math.random()),
- color,
+ color,
points,
);
@@ -583,7 +583,9 @@ export function addToScore(gameState: GameState, coin: Coin) {
coin.previousY,
(gameState.canvasWidth - coin.x) / 100,
-coin.y / 100,
- gameState.perks.metamorphosis || isOptionOn("colorful_coins") ? coin.color : 'gold',
+ gameState.perks.metamorphosis || isOptionOn("colorful_coins")
+ ? coin.color
+ : "gold",
true,
gameState.coinSize / 2,
@@ -1116,7 +1118,10 @@ export function gameStateTick(
coin.x,
coin.y,
0,
- gameState.baseSpeed, gameState.perks.metamorphosis || isOptionOn("colorful_coins") ? coin.color : 'gold',
+ gameState.baseSpeed,
+ gameState.perks.metamorphosis || isOptionOn("colorful_coins")
+ ? coin.color
+ : "gold",
true,
5,
250,
diff --git a/src/render.ts b/src/render.ts
index 152bdb9..604ce5f 100644
--- a/src/render.ts
+++ b/src/render.ts
@@ -99,10 +99,6 @@ export function render(gameState: GameState) {
scoreDisplay.className =
gameState.lastScoreIncrease > gameState.levelTime - 500 ? "active" : "";
-
-
-
-
// Clear
if (!isOptionOn("basic") && level.svg && level.color === "#000000") {
haloCanvasCtx.globalCompositeOperation = "source-over";
@@ -113,8 +109,10 @@ export function render(gameState: GameState) {
haloCanvasCtx.globalCompositeOperation = "screen";
forEachLiveOne(gameState.coins, (coin) => {
- const color= gameState.perks.metamorphosis || isOptionOn("colorful_coins") ?
- coin.color : 'gold';
+ const color =
+ gameState.perks.metamorphosis || isOptionOn("colorful_coins")
+ ? coin.color
+ : "gold";
haloCanvasCtx.globalAlpha = 0.5;
drawFuzzyBall(
haloCanvasCtx,
@@ -136,7 +134,7 @@ export function render(gameState: GameState) {
}
});
gameState.balls.forEach((ball) => {
- haloCanvasCtx.globalAlpha = 0.5;
+ haloCanvasCtx.globalAlpha = 0.5;
drawFuzzyBall(
haloCanvasCtx,
gameState.ballsColor,
@@ -145,14 +143,13 @@ export function render(gameState: GameState) {
ball.y / haloScale,
);
if (isOptionOn("extra_bright")) {
-
haloCanvasCtx.globalAlpha = 0.2;
drawFuzzyBall(
- haloCanvasCtx,
- gameState.ballsColor,
- (gameState.ballSize * 6) / haloScale,
- ball.x / haloScale,
- ball.y / haloScale,
+ haloCanvasCtx,
+ gameState.ballsColor,
+ (gameState.ballSize * 6) / haloScale,
+ ball.x / haloScale,
+ ball.y / haloScale,
);
}
});
@@ -182,13 +179,13 @@ export function render(gameState: GameState) {
y / haloScale,
);
if (isOptionOn("extra_bright")) {
- haloCanvasCtx.globalAlpha *= 0.5
+ haloCanvasCtx.globalAlpha *= 0.5;
drawFuzzyBall(
- haloCanvasCtx,
- color,
- (size * 6) / haloScale,
- x / haloScale,
- y / haloScale,
+ haloCanvasCtx,
+ color,
+ (size * 6) / haloScale,
+ x / haloScale,
+ y / haloScale,
);
}
});
@@ -276,8 +273,10 @@ export function render(gameState: GameState) {
// Coins
ctx.globalAlpha = 1;
forEachLiveOne(gameState.coins, (coin) => {
- const color= gameState.perks.metamorphosis || isOptionOn("colorful_coins") ?
- coin.color : 'gold'
+ const color =
+ gameState.perks.metamorphosis || isOptionOn("colorful_coins")
+ ? coin.color
+ : "gold";
// ctx.globalCompositeOperation = "source-over";
ctx.globalCompositeOperation =
color === "gold" ||
@@ -550,22 +549,25 @@ export function render(gameState: GameState) {
1,
);
-
- if (!isOptionOn("basic") && isOptionOn("contrast") && level.svg && level.color === "#000000") {
-
+ if (
+ !isOptionOn("basic") &&
+ isOptionOn("contrast") &&
+ level.svg &&
+ level.color === "#000000"
+ ) {
// haloCanvasCtx.globalCompositeOperation = 'multiply';
// haloCanvasCtx.fillRect(0,0,haloCanvas.width,haloCanvas.height)
- haloCanvasCtx.fillStyle = 'white'
+ haloCanvasCtx.fillStyle = "white";
haloCanvasCtx.globalAlpha = 0.25;
- haloCanvasCtx.globalCompositeOperation = 'screen';
- haloCanvasCtx.fillRect(0,0,haloCanvas.width,haloCanvas.height)
+ haloCanvasCtx.globalCompositeOperation = "screen";
+ haloCanvasCtx.fillRect(0, 0, haloCanvas.width, haloCanvas.height);
ctx.globalAlpha = 1;
ctx.globalCompositeOperation = "soft-light";
ctx.drawImage(haloCanvas, 0, 0, width, height);
}
- ctx.globalCompositeOperation = 'source-over';
- ctx.globalAlpha = 1;
+ ctx.globalCompositeOperation = "source-over";
+ ctx.globalAlpha = 1;
if (isOptionOn("mobile-mode") && !gameState.running) {
drawText(
ctx,
@@ -578,7 +580,6 @@ export function render(gameState: GameState) {
);
}
-
if (shaked) {
ctx.resetTransform();
}
diff --git a/src/startingPerks.ts b/src/startingPerks.ts
index 324a9e2..dac8791 100644
--- a/src/startingPerks.ts
+++ b/src/startingPerks.ts
@@ -38,7 +38,8 @@ export async function openStartingPerksEditor() {
});
const perk: Upgrade | null | void = await asyncAlert({
- title: t("main_menu.starting_perks"),className:'actionsAsGrid',
+ title: t("main_menu.starting_perks"),
+ className: "actionsAsGrid",
content: [
t("main_menu.starting_perks_checked"),
...buttons.filter((b) => b.checked),