mirror of
https://gitlab.com/lecarore/breakout71.git
synced 2025-06-14 10:14:47 -04:00
Build 29126616
This commit is contained in:
parent
810df5962a
commit
7f50b67c60
22 changed files with 209 additions and 30 deletions
|
@ -16,6 +16,7 @@ Break colourful bricks, catch bouncing coins and select powerful upgrades !
|
|||
|
||||
|
||||
## Done
|
||||
## 29126551
|
||||
|
||||
- picky eater : +1 combo per color on screen per brick
|
||||
- New perk : wrap up - balls touching the top of the screen teleport just above your paddle, aiming upward
|
||||
|
|
|
@ -29,8 +29,8 @@ android {
|
|||
applicationId = "me.lecaro.breakout"
|
||||
minSdk = 21
|
||||
targetSdk = 34
|
||||
versionCode = 29126551
|
||||
versionName = "29126551"
|
||||
versionCode = 29126616
|
||||
versionName = "29126616"
|
||||
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
|
||||
vectorDrawables {
|
||||
useSupportLibrary = true
|
||||
|
|
File diff suppressed because one or more lines are too long
50
dist/index.html
vendored
50
dist/index.html
vendored
File diff suppressed because one or more lines are too long
|
@ -1,5 +1,5 @@
|
|||
// The version of the cache.
|
||||
const VERSION = "29126551";
|
||||
const VERSION = "29126616";
|
||||
|
||||
// The name of the cache
|
||||
const CACHE_NAME = `breakout-71-${VERSION}`;
|
||||
|
|
|
@ -77,6 +77,12 @@
|
|||
"bricks": "_gggg_gBBBBggBBBBggBBBBggBBBBg_gggg_",
|
||||
"credit": ""
|
||||
},
|
||||
{
|
||||
"name": "icon:chill",
|
||||
"size": 7,
|
||||
"bricks": "__GGG___G_G_G_G__G__GG__G__GG_GGG_G_G_G_G___GGG__",
|
||||
"credit": ""
|
||||
},
|
||||
{
|
||||
"name": "icon:clairvoyant",
|
||||
"size": 9,
|
||||
|
@ -554,7 +560,7 @@
|
|||
{
|
||||
"name": "icon:wrap_up",
|
||||
"size": 8,
|
||||
"bricks": "___y__b___b__b____b__b___b__b____b__b___b__b____b__y____WWW_____",
|
||||
"bricks": "____y______b______b______b_____Wb_____b__b___b____b_y______WWW__",
|
||||
"credit": ""
|
||||
},
|
||||
{
|
||||
|
|
|
@ -1 +1 @@
|
|||
"29126551"
|
||||
"29126616"
|
||||
|
|
|
@ -179,7 +179,7 @@ export function normalizeGameState(gameState: GameState) {
|
|||
gameState.baseSpeed = Math.max(
|
||||
3,
|
||||
gameState.gameZoneWidth / 12 / 10 +
|
||||
gameState.currentLevel / 3 +
|
||||
gameState.currentLevel / 3 / (1 + gameState.perks.chill * 10) +
|
||||
gameState.levelTime / (30 * 1000) -
|
||||
gameState.perks.slow_down * 2,
|
||||
);
|
||||
|
|
|
@ -102,8 +102,12 @@ export function getPossibleUpgrades(gameState: GameState) {
|
|||
.filter((u) => !u?.requires || gameState.perks[u?.requires]);
|
||||
}
|
||||
|
||||
export function renderMaxLevel(gameState: GameState) {
|
||||
return gameState.perks.chill ? "∞" : max_levels(gameState);
|
||||
}
|
||||
export function max_levels(gameState: GameState) {
|
||||
if (gameState.creative) return 1;
|
||||
if (gameState.perks.chill) return gameState.currentLevel + 2;
|
||||
return 7 + gameState.perks.extra_levels;
|
||||
}
|
||||
|
||||
|
|
|
@ -294,6 +294,9 @@
|
|||
"upgrades.buoy.name": "عوامة",
|
||||
"upgrades.buoy.tooltip": "تطفو العملات المعدنية لمدة {{duration}} ثانية على الخط السفلي.",
|
||||
"upgrades.buoy.verbose_description": "يكون التأثير أكثر وضوحًا في الوضع المحمول",
|
||||
"upgrades.chill.name": "",
|
||||
"upgrades.chill.tooltip": "",
|
||||
"upgrades.chill.verbose_description": "",
|
||||
"upgrades.clairvoyant.name": "مستبصر",
|
||||
"upgrades.clairvoyant.tooltip": "شاهد المستويات القادمة، نقاط الصحة للطوب واتجاه الكرة",
|
||||
"upgrades.clairvoyant.verbose_description": "يساعدك على اختيار الترقيات المناسبة وفهم كيفية عمل الطوب المتين. يُضيف المستويان 2 و3 معلومات إضافية حول فائدة مشكوك فيها (متوفرة في وضع الحلقة).",
|
||||
|
|
|
@ -10527,6 +10527,116 @@
|
|||
</concept_node>
|
||||
</children>
|
||||
</folder_node>
|
||||
<folder_node>
|
||||
<name>chill</name>
|
||||
<children>
|
||||
<concept_node>
|
||||
<name>name</name>
|
||||
<description/>
|
||||
<comment/>
|
||||
<translations>
|
||||
<translation>
|
||||
<language>ar-LB</language>
|
||||
<approved>false</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>de-DE</language>
|
||||
<approved>false</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>en-US</language>
|
||||
<approved>false</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>es-CL</language>
|
||||
<approved>false</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>fr-FR</language>
|
||||
<approved>false</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>ru-RU</language>
|
||||
<approved>false</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>tr-TR</language>
|
||||
<approved>false</approved>
|
||||
</translation>
|
||||
</translations>
|
||||
</concept_node>
|
||||
<concept_node>
|
||||
<name>tooltip</name>
|
||||
<description/>
|
||||
<comment/>
|
||||
<translations>
|
||||
<translation>
|
||||
<language>ar-LB</language>
|
||||
<approved>false</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>de-DE</language>
|
||||
<approved>false</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>en-US</language>
|
||||
<approved>false</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>es-CL</language>
|
||||
<approved>false</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>fr-FR</language>
|
||||
<approved>false</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>ru-RU</language>
|
||||
<approved>false</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>tr-TR</language>
|
||||
<approved>false</approved>
|
||||
</translation>
|
||||
</translations>
|
||||
</concept_node>
|
||||
<concept_node>
|
||||
<name>verbose_description</name>
|
||||
<description/>
|
||||
<comment/>
|
||||
<translations>
|
||||
<translation>
|
||||
<language>ar-LB</language>
|
||||
<approved>false</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>de-DE</language>
|
||||
<approved>false</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>en-US</language>
|
||||
<approved>false</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>es-CL</language>
|
||||
<approved>false</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>fr-FR</language>
|
||||
<approved>false</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>ru-RU</language>
|
||||
<approved>false</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>tr-TR</language>
|
||||
<approved>false</approved>
|
||||
</translation>
|
||||
</translations>
|
||||
</concept_node>
|
||||
</children>
|
||||
</folder_node>
|
||||
<folder_node>
|
||||
<name>clairvoyant</name>
|
||||
<children>
|
||||
|
|
|
@ -294,6 +294,9 @@
|
|||
"upgrades.buoy.name": "Boje",
|
||||
"upgrades.buoy.tooltip": "Münzen schweben {{duration}} Sekunden lang auf der unteren Linie.",
|
||||
"upgrades.buoy.verbose_description": "Der Effekt ist im mobilen Modus am deutlichsten sichtbar",
|
||||
"upgrades.chill.name": "",
|
||||
"upgrades.chill.tooltip": "",
|
||||
"upgrades.chill.verbose_description": "",
|
||||
"upgrades.clairvoyant.name": "Hellsichtig",
|
||||
"upgrades.clairvoyant.tooltip": "Sehen Sie die nächsten Levels, die HP der Steine und die Ballrichtung",
|
||||
"upgrades.clairvoyant.verbose_description": "Hilft dir, die richtigen Upgrades auszuwählen und zu verstehen, was es mit den robusten Steinen auf sich hat. Level 2 und 3 bringen zusätzliches Wissen von zweifelhaftem Nutzen (erreichbar im Loop-Modus)",
|
||||
|
|
|
@ -294,6 +294,9 @@
|
|||
"upgrades.buoy.name": "Buoy",
|
||||
"upgrades.buoy.tooltip": "Coins float for {{duration}} seconds on the bottom line. ",
|
||||
"upgrades.buoy.verbose_description": "Effect is most visible in mobile mode",
|
||||
"upgrades.chill.name": "Chill",
|
||||
"upgrades.chill.tooltip": "No upgrades, unlimited levels.",
|
||||
"upgrades.chill.verbose_description": "The ball will also accelerates much slower. ",
|
||||
"upgrades.clairvoyant.name": "Clairvoyant",
|
||||
"upgrades.clairvoyant.tooltip": "See upcoming levels, bricks HP and ball direction",
|
||||
"upgrades.clairvoyant.verbose_description": "Helps you pick the right upgrades and understand what's going on with sturdy bricks. Level 2 and 3 bring additional knowledge of dubious utility (reachable in loop mode)",
|
||||
|
|
|
@ -294,6 +294,9 @@
|
|||
"upgrades.buoy.name": "Boya",
|
||||
"upgrades.buoy.tooltip": "Las monedas flotan durante {{duration}} segundos en la línea inferior.",
|
||||
"upgrades.buoy.verbose_description": "El efecto es más visible en el modo móvil.",
|
||||
"upgrades.chill.name": "",
|
||||
"upgrades.chill.tooltip": "",
|
||||
"upgrades.chill.verbose_description": "",
|
||||
"upgrades.clairvoyant.name": "Perspicaz",
|
||||
"upgrades.clairvoyant.tooltip": "Revela los niveles, el PV de los ladrillos y la dirección de las balas",
|
||||
"upgrades.clairvoyant.verbose_description": "Te ayuda a elegir las mejoras adecuadas y a entender qué ocurre con los \"ladrillos macizos\". Los niveles 2 y 3 (en modo bucle) proporcionan información adicional de dudosa utilidad.",
|
||||
|
|
|
@ -294,6 +294,9 @@
|
|||
"upgrades.buoy.name": "Bouée",
|
||||
"upgrades.buoy.tooltip": "Les pièces flottent pendant {{duration}} secondes sur la ligne du bas.",
|
||||
"upgrades.buoy.verbose_description": "L'effet est plus visible en mode mobile",
|
||||
"upgrades.chill.name": "",
|
||||
"upgrades.chill.tooltip": "",
|
||||
"upgrades.chill.verbose_description": "",
|
||||
"upgrades.clairvoyant.name": "Clairvoyant",
|
||||
"upgrades.clairvoyant.tooltip": "Révèle les niveaux, PV des briques et direction des balles",
|
||||
"upgrades.clairvoyant.verbose_description": "Vous aide à choisir les bonnes améliorations et à comprendre ce qu'il se passe avec \"briques solides\". Les niveaux 2 et 3 (en mode loop) amènent des informations complémentaires d'une utilité douteuse. ",
|
||||
|
|
|
@ -294,6 +294,9 @@
|
|||
"upgrades.buoy.name": "Буй",
|
||||
"upgrades.buoy.tooltip": "Монеты плавают в течение {{duration}} секунд на нижней строке.",
|
||||
"upgrades.buoy.verbose_description": "Эффект наиболее заметен в мобильном режиме.",
|
||||
"upgrades.chill.name": "",
|
||||
"upgrades.chill.tooltip": "",
|
||||
"upgrades.chill.verbose_description": "",
|
||||
"upgrades.clairvoyant.name": "Ясновидящий",
|
||||
"upgrades.clairvoyant.tooltip": "Просматривайте предстоящие уровни, количество кирпичей и направление движения мяча",
|
||||
"upgrades.clairvoyant.verbose_description": "Поможет выбрать правильные апгрейды и понять, что происходит с прочными кирпичами. Уровни 2 и 3 дают дополнительные знания сомнительной полезности (достигаются в режиме цикла)",
|
||||
|
|
|
@ -294,6 +294,9 @@
|
|||
"upgrades.buoy.name": "Şamandıra",
|
||||
"upgrades.buoy.tooltip": "Madeni paralar alt satırda {{duration}} saniye boyunca yüzer.",
|
||||
"upgrades.buoy.verbose_description": "Etkisi mobil modda en iyi şekilde görülür",
|
||||
"upgrades.chill.name": "",
|
||||
"upgrades.chill.tooltip": "",
|
||||
"upgrades.chill.verbose_description": "",
|
||||
"upgrades.clairvoyant.name": "Durugörü sahibi",
|
||||
"upgrades.clairvoyant.tooltip": "Yaklaşan seviyeleri, tuğla HP'sini ve top yönünü görün",
|
||||
"upgrades.clairvoyant.verbose_description": "Doğru yükseltmeleri seçmenize ve sağlam tuğlalarla neler olup bittiğini anlamanıza yardımcı olur. Seviye 2 ve 3, şüpheli fayda hakkında ek bilgi getirir (döngü modunda erişilebilir)",
|
||||
|
|
|
@ -1,7 +1,11 @@
|
|||
import { GameState, PerkId } from "./types";
|
||||
import { asyncAlert } from "./asyncAlert";
|
||||
import { t } from "./i18n/i18n";
|
||||
import { levelsListHTMl, max_levels, pickedUpgradesHTMl } from "./game_utils";
|
||||
import {
|
||||
levelsListHTMl,
|
||||
pickedUpgradesHTMl,
|
||||
renderMaxLevel,
|
||||
} from "./game_utils";
|
||||
import { getCreativeModeWarning, getHistory } from "./gameOver";
|
||||
import { pause } from "./game";
|
||||
import { allLevels, icons, upgrades } from "./loadGameData";
|
||||
|
@ -21,7 +25,7 @@ export async function openScorePanel(gameState: GameState) {
|
|||
title: t("score_panel.title", {
|
||||
score: gameState.score,
|
||||
level: gameState.currentLevel + 1,
|
||||
max: max_levels(gameState),
|
||||
max: renderMaxLevel(gameState),
|
||||
}),
|
||||
|
||||
content: [
|
||||
|
|
|
@ -20,6 +20,7 @@ import {
|
|||
levelsListHTMl,
|
||||
max_levels,
|
||||
pickedUpgradesHTMl,
|
||||
renderMaxLevel,
|
||||
upgradeLevelAndMaxDisplay,
|
||||
} from "./game_utils";
|
||||
import { getFirstUnlockable, getNearestUnlockHTML } from "./openScorePanel";
|
||||
|
@ -33,6 +34,7 @@ import {
|
|||
import { toast } from "./toast";
|
||||
|
||||
export async function openUpgradesPicker(gameState: GameState) {
|
||||
if (gameState.perks.chill) return;
|
||||
const catchRate =
|
||||
gameState.levelCoughtCoins / (gameState.levelSpawnedCoins || 1);
|
||||
|
||||
|
@ -137,7 +139,7 @@ export async function openUpgradesPicker(gameState: GameState) {
|
|||
.sort((a, b) => a.score - b.score)
|
||||
.filter((u) => gameState.perks[u.id] < u.max + gameState.perks.limitless);
|
||||
let recommendation = settingsChangeRecommendations();
|
||||
while (true) {
|
||||
while (true && !gameState.perks.chill) {
|
||||
// refresh the list if you pick extra one_more_choice
|
||||
const offered = sorted.slice(
|
||||
0,
|
||||
|
@ -190,7 +192,7 @@ export async function openUpgradesPicker(gameState: GameState) {
|
|||
>({
|
||||
title: t("level_up.title", {
|
||||
level: gameState.currentLevel,
|
||||
max: max_levels(gameState),
|
||||
max: renderMaxLevel(gameState),
|
||||
}),
|
||||
content: [
|
||||
t("level_up.upgrade_perks", {
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import { gameCanvas } from "./render";
|
||||
import { isInWebView, max_levels } from "./game_utils";
|
||||
import { isInWebView, max_levels, renderMaxLevel } from "./game_utils";
|
||||
import { getAudioRecordingTrack } from "./sounds";
|
||||
import { t } from "./i18n/i18n";
|
||||
import { GameState } from "./types";
|
||||
|
@ -53,7 +53,7 @@ export function drawMainCanvasOnSmallCanvas(gameState: GameState) {
|
|||
|
||||
recordCanvasCtx.textAlign = "left";
|
||||
recordCanvasCtx.fillText(
|
||||
"Level " + (gameState.currentLevel + 1) + "/" + max_levels(gameState),
|
||||
"Level " + (gameState.currentLevel + 1) + "/" + renderMaxLevel(gameState),
|
||||
12,
|
||||
12,
|
||||
);
|
||||
|
|
|
@ -9,6 +9,7 @@ import {
|
|||
isPickyEatingPossible,
|
||||
max_levels,
|
||||
reachRedRowIndex,
|
||||
renderMaxLevel,
|
||||
telekinesisEffectRate,
|
||||
yoyoEffectRate,
|
||||
zoneLeftBorderX,
|
||||
|
@ -71,7 +72,7 @@ export function render(gameState: GameState) {
|
|||
if (gameState.currentLevel || gameState.levelTime) {
|
||||
menuLabel.innerText = t("play.current_lvl", {
|
||||
level: gameState.currentLevel + 1,
|
||||
max: max_levels(gameState),
|
||||
max: renderMaxLevel(gameState),
|
||||
});
|
||||
} else {
|
||||
menuLabel.innerText = t("play.menu_label");
|
||||
|
|
|
@ -12,6 +12,7 @@ export const noCreative: PerkId[] = [
|
|||
"extra_levels",
|
||||
"shunt",
|
||||
"one_more_choice",
|
||||
"chill",
|
||||
];
|
||||
|
||||
export const categories = {
|
||||
|
@ -980,4 +981,15 @@ export const rawUpgrades = [
|
|||
help: (lvl: number) => t("upgrades.wrap_up.tooltip"),
|
||||
fullHelp: (lvl: number) => t("upgrades.wrap_up.verbose_description"),
|
||||
},
|
||||
{
|
||||
category: categories.beginner,
|
||||
requires: "",
|
||||
threshold: 5000,
|
||||
gift: false,
|
||||
id: "chill",
|
||||
max: 1,
|
||||
name: t("upgrades.chill.name"),
|
||||
help: (lvl: number) => t("upgrades.chill.tooltip"),
|
||||
fullHelp: (lvl: number) => t("upgrades.chill.verbose_description"),
|
||||
},
|
||||
] as const;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue