diff --git a/Readme.md b/Readme.md index b490a29..1bb1393 100644 --- a/Readme.md +++ b/Readme.md @@ -13,22 +13,67 @@ Break colourful bricks, catch bouncing coins and select powerful upgrades ! # Current priorities -The goal of this project is to make a game used by many people. The game is already pretty fun. I'm now trying to -translate it to (Lebanese) Arabic, Russian and (Chilean) Spanish. Other translation are very welcome, contact me -if you'd like to submit one. - -While translations are being written, I'll try to avoid adding features that require new translations. That means only -bug fixes and optimisations, maybe adding levels. Once we have a nice stable release available in 4 -languages, I may add features again. +The goal of this project is to make a game used by many people. +The game is already pretty fun. +I'm now trying to translate it to (Lebanese) Arabic, Russian and (Chilean) Spanish. +Other translation are very welcome, contact me if you'd like to submit one. + # Changelog ## To do -- auto-detect device performance at first startup and adjust settings accordingly +- redo video presentation ## Done +- option: reuse past frame's light in new frame lighting computation when there are 150+ coins on screen, to limit the performance impact of rendering lots of lights + +## 29084606 + +- simpler and more readable encoding for save files +- removed check of payload signature on save file, seemed to fail because of the poor encoding of the name of the "côte d'ivoire" level +- automatic detection of the number of steps required for physics +- trial runs detection fix + +## 29083397 + +- highlight last used creative level +- access autoplay mode from the menu +- access stress test mode from the menu, show real time stats +- Render bottom border differently to show how far the puck can go +- Corner Shot: scale like Need Some Space +- grey out irrelevant options in the settings +- Back to Creative Menu at the end of a Creative level + +## 29080170 + +- don't show unlock toast at first startup for levels that are unlocked by default +- Droplet particle color should be gold for gold coins +- added levels: A Very Dangerous High-Five, The Boys + +## 29079818 + +- Imported levels : Mario, Minesweeper and Target +- Fixed an issue with localstorage saving of custom levels + + +## 29079805 + +- combo text on paddle will be grey if we're at the base combo +- transparency now rounds up +- import level up to 21 x 21 +- corrected icon of "padding" + +## 29079087 + +- measured and improve the performance (test here https://breakout.lecaro.me/?stresstest) +- added a few levels +- autoplay mode (with wake lock and computer play https://breakout.lecaro.me/?autoplay ) +- Added particle and sound effect when coin drops below the "waterline" of the puck +- slower coins fall once they are under the paddle +- in game level editor +- allow loading newer save in outdated app (for rollback) - game crashes when reaching level 12 (no level info in runLevels) ## 29074385 @@ -296,6 +341,7 @@ languages, I may add features again. - make stats a clairvoyant thing - [colin]P ocket money — bricks absorb coins that touch them, which are released on brick destruction (with a bonus?) - [colin] turn ball gravity on after a top bar hit, and until bouncing on puck +- fan : paddle motion creates upward draft that lifts coins and balls ## Medium difficulty perks ideas - balls collision split them into 4 smaller balls, lvl times (requires rework) @@ -360,6 +406,12 @@ languages, I may add features again. ## UX / gameplay +- chill game mode, to just relax your mind : + - no 7 levels limit + - no upgrades offered at the end of the level + - get a random perk + - every 7 level it's replaced by another random perk + - every 7 levels, +10 base combo and +1 piece - avoid showing a +1 and -1 at the same time when a combo increase is reset - explain to iOS users how to add the app to home screen to get fullscreen - delayed start on mobile to let users place the puck where they want @@ -379,6 +431,7 @@ languages, I may add features again. ## Maybe one day - https://weblate.org/fr/ quite annoying to have merge conflicts while pushing, i'll enable it later. +- auto-detect device performance at first startup and adjust settings accordingly (hard to do in any sort of useful way) - [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) @@ -472,4 +525,5 @@ Breakout 71 can be installed and work offline in many ways: # System requirements The game should perform well even on low-end devices. It's very lean and does not take much storage space (Roughly 0.1MB). The web version is supposed to work on iOS safari, Firefox ESR and chrome, on desktop and mobile. -If the app stutters, turn on "fast mode" in the settings to render a simplified view that should be faster. You can adjust many aspects of the game there, go have a look ! \ No newline at end of file +If the app stutters, turn on "fast mode" in the settings to render a simplified view that should be faster. You can adjust many aspects of the game there, go have a look ! + diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 8d1bcab..56394f2 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 = 29074738 - versionName = "29074738" + versionCode = 29085573 + versionName = "29085573" 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 8e9eefa..9279b5d 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 fd3af66..b3ff5b5 100644 --- a/dist/index.html +++ b/dist/index.html @@ -75,8 +75,8 @@ canvas:not(#game) { transition: color 10ms; } -#score.hidden { - display: none; +#score.computer_controlled { + pointer-events: none; } #score span { @@ -501,23 +501,98 @@ h2.histogram-title strong { align-items: center; gap: 10px; padding-right: 10px; - animation: forwards toast; + transition: opacity .2s, transform .2s; display: flex; position: fixed; top: 40px; left: 0; } -@keyframes toast { - 0%, 100% { - opacity: 0; - transform: translate(-20px, -20px)scale(.5); - } +.toast.hidden { + opacity: 0; + transform: translate(-20px, -20px)scale(.5); +} - 10%, 90% { - opacity: .8; - transform: none; - } +.toast.visible { + opacity: .8; + transform: none; +} + +.gridEdit > div > span, .palette > span { + cursor: pointer; + border: 1px solid; + justify-content: center; + align-items: center; + width: 40px; + height: 40px; + display: inline-flex; +} + +.gridEdit > div > span:hover, .palette > span:hover { + z-index: 1; + border-color: gold; + position: relative; + box-shadow: inset 2px 2px 4px #0003; +} + +.gridEdit > div { + display: flex; +} + +.gridEdit > div > span { + width: calc(min(500px, 100vw, 100vh - 200px) / var(--grid-size)); + height: calc(min(500px, 100vw, 100vh - 200px) / var(--grid-size)); +} + +.palette { + flex-wrap: wrap; + display: flex; +} + +.palette > span[data-selected="true"] { + border: 2px solid #fff; +} + +#stats { + color: #fff; + z-index: 3; + pointer-events: none; + opacity: 1; + width: 100vw; + max-width: 400px; + position: fixed; + top: 40px; + left: 0; +} + +#stats > div { + background: #26262680; + position: relative; +} + +#stats > div > div { + transform-origin: 0 0; + background: #6262ea; + position: absolute; + inset: 0; +} + +#stats > div > strong { + padding: 0 5px; + position: relative; +} + +.highlight { + position: relative; +} + +.highlight:before { + content: ""; + mix-blend-mode: screen; + opacity: .3; + background: linear-gradient(-45deg, #6262ea, #0000); + position: absolute; + inset: 0; } @@ -525,6 +600,7 @@ h2.histogram-title strong { +