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),