Added manifest

This commit is contained in:
Renan LE CARO 2025-03-14 19:43:19 +01:00
parent 7e3750c915
commit cdfe6a4978
7 changed files with 56 additions and 42 deletions

View file

@ -13,9 +13,9 @@ Break colourful bricks, catch bouncing coins and select powerful upgrades !
- [Donate](https://github.com/sponsors/renanlecaro) - [Donate](https://github.com/sponsors/renanlecaro)
# Requirements # System requirements
The app should work offline and perform well even on low-end devices. Breakout 71 can work offline and perform well even on low-end devices.
It's very lean and does not take much storage space (Roughly 0.1MB). It's very lean and does not take much storage space (Roughly 0.1MB).
If the app stutters, turn on "fast mode" in the settings to render a simplified view that should be faster. If the app stutters, turn on "fast mode" in the settings to render a simplified view that should be faster.
There's also an easy mode for kids (slower ball). There's also an easy mode for kids (slower ball).

30
dist/index.html vendored
View file

@ -633,6 +633,7 @@ parcelHelpers.export(exports, "captureFileName", ()=>captureFileName);
parcelHelpers.export(exports, "findLast", ()=>findLast); parcelHelpers.export(exports, "findLast", ()=>findLast);
parcelHelpers.export(exports, "toggleFullScreen", ()=>toggleFullScreen); parcelHelpers.export(exports, "toggleFullScreen", ()=>toggleFullScreen);
parcelHelpers.export(exports, "setKeyPressed", ()=>setKeyPressed); parcelHelpers.export(exports, "setKeyPressed", ()=>setKeyPressed);
parcelHelpers.export(exports, "newGameState", ()=>newGameState);
parcelHelpers.export(exports, "gameState", ()=>gameState); parcelHelpers.export(exports, "gameState", ()=>gameState);
parcelHelpers.export(exports, "restart", ()=>restart); parcelHelpers.export(exports, "restart", ()=>restart);
var _loadGameData = require("./loadGameData"); var _loadGameData = require("./loadGameData");
@ -1367,20 +1368,6 @@ function ballTick(ball, delta) {
} }
} }
} }
const defaultRunStats = ()=>({
started: Date.now(),
levelsPlayed: 0,
runTime: 0,
coins_spawned: 0,
score: 0,
bricks_broken: 0,
misses: 0,
balls_lost: 0,
puck_bounces: 0,
upgrades_picked: 1,
max_combo: 1,
max_level: 0
});
function getTotalScore() { function getTotalScore() {
try { try {
return JSON.parse(localStorage.getItem("breakout_71_total_score") || "0"); return JSON.parse(localStorage.getItem("breakout_71_total_score") || "0");
@ -2635,7 +2622,20 @@ function newGameState(params) {
keyboardPuckSpeed: 0, keyboardPuckSpeed: 0,
lastTick: performance.now(), lastTick: performance.now(),
lastTickDown: 0, lastTickDown: 0,
runStatistics: defaultRunStats(), runStatistics: {
started: Date.now(),
levelsPlayed: 0,
runTime: 0,
coins_spawned: 0,
score: 0,
bricks_broken: 0,
misses: 0,
balls_lost: 0,
puck_bounces: 0,
upgrades_picked: 1,
max_combo: 1,
max_level: 0
},
lastOffered: {}, lastOffered: {},
levelTime: 0, levelTime: 0,
autoCleanUses: 0 autoCleanUses: 0

View file

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Before After
Before After

15
public/manifest.json Normal file
View file

@ -0,0 +1,15 @@
{
"short_name": "B71",
"name": "Breakout 71",
"icons": [
{
"src": "/icon.png",
"sizes": "512x512",
"type": "image/png"
}
],
"start_url": ".",
"display": "fullscreen",
"theme_color": "#5DA3EA",
"background_color": "#ffffff"
}

View file

@ -1079,22 +1079,6 @@ export function ballTick(ball: Ball, delta: number) {
} }
} }
const defaultRunStats = () =>
({
started: Date.now(),
levelsPlayed: 0,
runTime: 0,
coins_spawned: 0,
score: 0,
bricks_broken: 0,
misses: 0,
balls_lost: 0,
puck_bounces: 0,
upgrades_picked: 1,
max_combo: 1,
max_level: 0,
}) as RunStats;
export function getTotalScore() { export function getTotalScore() {
try { try {
@ -2927,7 +2911,7 @@ document.addEventListener("keyup", async (e) => {
}); });
function newGameState(params: RunParams): GameState { export function newGameState(params: RunParams): GameState {
const totalScoreAtRunStart = getTotalScore() const totalScoreAtRunStart = getTotalScore()
const firstLevel = params?.level ? allLevels.filter((l) => l.name === params?.level) : []; const firstLevel = params?.level ? allLevels.filter((l) => l.name === params?.level) : [];
@ -2988,7 +2972,20 @@ function newGameState(params: RunParams): GameState {
keyboardPuckSpeed: 0, keyboardPuckSpeed: 0,
lastTick: performance.now(), lastTick: performance.now(),
lastTickDown: 0, lastTickDown: 0,
runStatistics: defaultRunStats(), runStatistics: {
started: Date.now(),
levelsPlayed: 0,
runTime: 0,
coins_spawned: 0,
score: 0,
bricks_broken: 0,
misses: 0,
balls_lost: 0,
puck_bounces: 0,
upgrades_picked: 1,
max_combo: 1,
max_level: 0,
},
lastOffered: {}, lastOffered: {},
levelTime: 0, levelTime: 0,
autoCleanUses: 0, autoCleanUses: 0,

View file

@ -12,6 +12,8 @@
name="description" name="description"
content="A breakout game with roguelite mechanics. Break bricks, catch coins, pick upgrades, repeat. Play for free on mobile and desktop." content="A breakout game with roguelite mechanics. Break bricks, catch coins, pick upgrades, repeat. Play for free on mobile and desktop."
/> />
<link rel="manifest" href="manifest.json" />
<style> <style>
@import "game.less"; @import "game.less";
</style> </style>