Added rerolls

This commit is contained in:
Renan LE CARO 2025-03-26 08:27:56 +01:00
parent 0ada53a063
commit e3e61b12b8
10 changed files with 282 additions and 182 deletions

74
dist/index.html vendored

File diff suppressed because one or more lines are too long

30
src/adventure.ts Normal file
View file

@ -0,0 +1,30 @@
import {GameState} from "./types";
export async function openAdventureRunUpgradesPicker(gameState: GameState) {
let options=3
const catchRate =
(gameState.score - gameState.levelStartScore) /
(gameState.levelSpawnedCoins || 1);
if (gameState.levelWallBounces == 0) {
options++;
}
if (gameState.levelTime < 30 * 1000) {
options++
}
if (catchRate === 1) {
options++
}
if (gameState.levelMisses === 0) {
options++
}
const choices = []
for( let difficulty=0; difficulty<options;difficulty++){
choices.push({
})
}
}

View file

@ -979,7 +979,7 @@
{ {
"name": "icon:sandbox", "name": "icon:sandbox",
"size": 8, "size": 8,
"bricks": "________________________y_ttt__yyyttt_yyyytttyyyytttttyyyyyyyyyy", "bricks": "__W__W__ccc__ttt_________W___W__GGG__bbb________W______WCCC__aaa",
"svg": null, "svg": null,
"color": "" "color": ""
}, },
@ -1045,5 +1045,12 @@
"bricks": "___a______at__cGCa_b_c_____ycGCa_b____at_____a___", "bricks": "___a______at__cGCa_b_c_____ycGCa_b____at_____a___",
"svg": null, "svg": null,
"color": "" "color": ""
},
{
"name": "icon:reroll",
"size": 8,
"bricks": "__llllll_llBlBlelllllleBWWWWWeeeWBWBWeBeWWWWWeeeWBWBWBe_WWWWWe__",
"svg": null,
"color": ""
} }
] ]

View file

@ -1,4 +1,4 @@
import { allLevels, appVersion, icons, upgrades } from "./loadGameData"; import {allLevels, appVersion, icons, upgrades} from "./loadGameData";
import { import {
Ball, Ball,
Coin, Coin,
@ -11,17 +11,11 @@ import {
TextFlash, TextFlash,
Upgrade, Upgrade,
} from "./types"; } from "./types";
import { getAudioContext, playPendingSounds } from "./sounds"; import {getAudioContext, playPendingSounds} from "./sounds";
import { import {currentLevelInfo, getRowColIndex, levelsListHTMl, max_levels, pickedUpgradesHTMl,} from "./game_utils";
currentLevelInfo,
getRowColIndex,
levelsListHTMl,
max_levels,
pickedUpgradesHTMl,
} from "./game_utils";
import "./PWA/sw_loader"; import "./PWA/sw_loader";
import { getCurrentLang, t } from "./i18n/i18n"; import {getCurrentLang, t} from "./i18n/i18n";
import { import {
cycleMaxCoins, cycleMaxCoins,
cycleMaxParticles, cycleMaxParticles,
@ -40,29 +34,12 @@ import {
setLevel, setLevel,
setMousePos, setMousePos,
} from "./gameStateMutators"; } from "./gameStateMutators";
import { import {backgroundCanvas, ctx, gameCanvas, render, scoreDisplay,} from "./render";
backgroundCanvas, import {pauseRecording, recordOneFrame, resumeRecording, startRecordingGame,} from "./recording";
ctx, import {newGameState} from "./newGameState";
gameCanvas, import {alertsOpen, asyncAlert, AsyncAlertAction, closeModal,} from "./asyncAlert";
render, import {isOptionOn, options, toggleOption} from "./options";
scoreDisplay, import {hashCode} from "./getLevelBackground";
} from "./render";
import {
pauseRecording,
recordOneFrame,
resumeRecording,
startRecordingGame,
} from "./recording";
import { newGameState } from "./newGameState";
import {
alertsOpen,
asyncAlert,
AsyncAlertAction,
closeModal,
} from "./asyncAlert";
import { isOptionOn, options, toggleOption } from "./options";
import { hashCode } from "./getLevelBackground";
import {hasUncaughtExceptionCaptureCallback} from "process";
import {premiumMenuEntry} from "./premium"; import {premiumMenuEntry} from "./premium";
export function play() { export function play() {
@ -183,13 +160,12 @@ setInterval(() => {
fitSize(); fitSize();
}, 1000); }, 1000);
export async function openUpgradesPicker(gameState: GameState) { export async function openShortRunUpgradesPicker(gameState: GameState) {
const catchRate = const catchRate =
(gameState.score - gameState.levelStartScore) / (gameState.score - gameState.levelStartScore) /
(gameState.levelSpawnedCoins || 1); (gameState.levelSpawnedCoins || 1);
let repeats = 1; let repeats = 1;
let choices = 3;
let timeGain = "", let timeGain = "",
catchGain = "", catchGain = "",
@ -198,44 +174,53 @@ export async function openUpgradesPicker(gameState: GameState) {
if (gameState.levelWallBounces == 0) { if (gameState.levelWallBounces == 0) {
repeats++; repeats++;
choices++; gameState.rerolls++
wallHitsGain = t("level_up.plus_one_upgrade"); wallHitsGain = t("level_up.plus_one_upgrade");
} else if (gameState.levelWallBounces < 5) { } else if (gameState.levelWallBounces < 5) {
choices++; gameState.rerolls++
wallHitsGain = t("level_up.plus_one_choice"); wallHitsGain = t("level_up.plus_one_choice");
} }
if (gameState.levelTime < 30 * 1000) { if (gameState.levelTime < 30 * 1000) {
repeats++; repeats++;
choices++; gameState.rerolls++
timeGain = t("level_up.plus_one_upgrade"); timeGain = t("level_up.plus_one_upgrade");
} else if (gameState.levelTime < 60 * 1000) { } else if (gameState.levelTime < 60 * 1000) {
choices++; gameState.rerolls++
timeGain = t("level_up.plus_one_choice"); timeGain = t("level_up.plus_one_choice");
} }
if (catchRate === 1) { if (catchRate === 1) {
repeats++; repeats++;
choices++; gameState.rerolls++
catchGain = t("level_up.plus_one_upgrade"); catchGain = t("level_up.plus_one_upgrade");
} else if (catchRate > 0.9) { } else if (catchRate > 0.9) {
choices++; gameState.rerolls++
catchGain = t("level_up.plus_one_choice"); catchGain = t("level_up.plus_one_choice");
} }
if (gameState.levelMisses === 0) { if (gameState.levelMisses === 0) {
repeats++; repeats++;
choices++; gameState.rerolls++
missesGain = t("level_up.plus_one_upgrade"); missesGain = t("level_up.plus_one_upgrade");
} else if (gameState.levelMisses <= 3) { } else if (gameState.levelMisses <= 3) {
choices++; gameState.rerolls++
missesGain = t("level_up.plus_one_choice"); missesGain = t("level_up.plus_one_choice");
} }
while (repeats--) { while (repeats--) {
const actions = pickRandomUpgrades( const actions = pickRandomUpgrades(
gameState, gameState,
choices + 3 +
gameState.perks.one_more_choice - gameState.perks.one_more_choice -
gameState.perks.instant_upgrade, gameState.perks.instant_upgrade,
); );
if(gameState.rerolls){
actions.push({
text: t("level_up.reroll",{count:gameState.rerolls}),
help: t("level_up.reroll_help"),
value: 'reroll',
icon: icons['icon:reroll']
})
}
if (!actions.length) break; if (!actions.length) break;
let textAfterButtons = ` let textAfterButtons = `
<p>${t("level_up.after_buttons", { <p>${t("level_up.after_buttons", {
@ -257,7 +242,7 @@ export async function openUpgradesPicker(gameState: GameState) {
t("level_up.compliment_good")) || t("level_up.compliment_good")) ||
t("level_up.compliment_advice"); t("level_up.compliment_advice");
const upgradeId = (await asyncAlert<PerkId>({ const upgradeId = (await asyncAlert<PerkId|'reroll'>({
title: title:
t("level_up.pick_upgrade_title") + t("level_up.pick_upgrade_title") +
(repeats ? " (" + (repeats + 1) + ")" : ""), (repeats ? " (" + (repeats + 1) + ")" : ""),
@ -282,15 +267,20 @@ export async function openUpgradesPicker(gameState: GameState) {
textAfterButtons, textAfterButtons,
})) as PerkId; })) as PerkId;
gameState.perks[upgradeId]++; if(upgradeId==='reroll'){
if (upgradeId === "instant_upgrade") { repeats++
repeats += 2; gameState.rerolls--
}else{
gameState.perks[upgradeId]++;
if (upgradeId === "instant_upgrade") {
repeats += 2;
}
gameState.runStatistics.upgrades_picked++;
} }
gameState.runStatistics.upgrades_picked++;
} }
} }
gameCanvas.addEventListener("mouseup", (e) => { gameCanvas.addEventListener("mouseup", (e) => {
if (e.button !== 0) return; if (e.button !== 0) return;
if (gameState.running) { if (gameState.running) {

View file

@ -34,9 +34,10 @@ import {icons} from "./loadGameData";
import {addToTotalScore, getCurrentMaxCoins, getCurrentMaxParticles,} from "./settings"; import {addToTotalScore, getCurrentMaxCoins, getCurrentMaxParticles,} from "./settings";
import {background} from "./render"; import {background} from "./render";
import {gameOver} from "./gameOver"; import {gameOver} from "./gameOver";
import {brickIndex, fitSize, gameState, hasBrick, hitsSomething, openUpgradesPicker, pause,} from "./game"; import {brickIndex, fitSize, gameState, hasBrick, hitsSomething, openShortRunUpgradesPicker, pause,} from "./game";
import {stopRecording} from "./recording"; import {stopRecording} from "./recording";
import {isOptionOn} from "./options"; import {isOptionOn} from "./options";
import {openAdventureRunUpgradesPicker} from "./adventure";
export function setMousePos(gameState: GameState, x: number) { export function setMousePos(gameState: GameState, x: number) {
// Sets the puck position, and updates the ball position if they are supposed to follow it // Sets the puck position, and updates the ball position if they are supposed to follow it
@ -562,7 +563,12 @@ export async function setLevel(gameState: GameState, l: number) {
pause(false); pause(false);
stopRecording(); stopRecording();
if (l > 0) { if (l > 0) {
await openUpgradesPicker(gameState); if(gameState.isCreativeModeRun){
await openAdventureRunUpgradesPicker(gameState);
}else{
await openShortRunUpgradesPicker(gameState);
}
} }
gameState.currentLevel = l; gameState.currentLevel = l;
gameState.levelTime = 0; gameState.levelTime = 0;

View file

@ -389,11 +389,11 @@
<translations> <translations>
<translation> <translation>
<language>en-US</language> <language>en-US</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
<translation> <translation>
<language>fr-FR</language> <language>fr-FR</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
</translations> </translations>
</concept_node> </concept_node>
@ -557,6 +557,36 @@
</translation> </translation>
</translations> </translations>
</concept_node> </concept_node>
<concept_node>
<name>reroll</name>
<description/>
<comment/>
<translations>
<translation>
<language>en-US</language>
<approved>true</approved>
</translation>
<translation>
<language>fr-FR</language>
<approved>true</approved>
</translation>
</translations>
</concept_node>
<concept_node>
<name>reroll_help</name>
<description/>
<comment/>
<translations>
<translation>
<language>en-US</language>
<approved>true</approved>
</translation>
<translation>
<language>fr-FR</language>
<approved>true</approved>
</translation>
</translations>
</concept_node>
<concept_node> <concept_node>
<name>unlocked_level</name> <name>unlocked_level</name>
<description/> <description/>
@ -644,11 +674,11 @@
<translations> <translations>
<translation> <translation>
<language>en-US</language> <language>en-US</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
<translation> <translation>
<language>fr-FR</language> <language>fr-FR</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
</translations> </translations>
</concept_node> </concept_node>
@ -659,11 +689,11 @@
<translations> <translations>
<translation> <translation>
<language>en-US</language> <language>en-US</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
<translation> <translation>
<language>fr-FR</language> <language>fr-FR</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
</translations> </translations>
</concept_node> </concept_node>
@ -809,11 +839,11 @@
<translations> <translations>
<translation> <translation>
<language>en-US</language> <language>en-US</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
<translation> <translation>
<language>fr-FR</language> <language>fr-FR</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
</translations> </translations>
</concept_node> </concept_node>
@ -824,11 +854,11 @@
<translations> <translations>
<translation> <translation>
<language>en-US</language> <language>en-US</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
<translation> <translation>
<language>fr-FR</language> <language>fr-FR</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
</translations> </translations>
</concept_node> </concept_node>
@ -839,11 +869,11 @@
<translations> <translations>
<translation> <translation>
<language>en-US</language> <language>en-US</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
<translation> <translation>
<language>fr-FR</language> <language>fr-FR</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
</translations> </translations>
</concept_node> </concept_node>
@ -854,11 +884,11 @@
<translations> <translations>
<translation> <translation>
<language>en-US</language> <language>en-US</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
<translation> <translation>
<language>fr-FR</language> <language>fr-FR</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
</translations> </translations>
</concept_node> </concept_node>
@ -869,11 +899,11 @@
<translations> <translations>
<translation> <translation>
<language>en-US</language> <language>en-US</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
<translation> <translation>
<language>fr-FR</language> <language>fr-FR</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
</translations> </translations>
</concept_node> </concept_node>
@ -884,11 +914,11 @@
<translations> <translations>
<translation> <translation>
<language>en-US</language> <language>en-US</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
<translation> <translation>
<language>fr-FR</language> <language>fr-FR</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
</translations> </translations>
</concept_node> </concept_node>
@ -929,7 +959,7 @@
<translations> <translations>
<translation> <translation>
<language>en-US</language> <language>en-US</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
<translation> <translation>
<language>fr-FR</language> <language>fr-FR</language>
@ -944,7 +974,7 @@
<translations> <translations>
<translation> <translation>
<language>en-US</language> <language>en-US</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
<translation> <translation>
<language>fr-FR</language> <language>fr-FR</language>
@ -1139,11 +1169,11 @@
<translations> <translations>
<translation> <translation>
<language>en-US</language> <language>en-US</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
<translation> <translation>
<language>fr-FR</language> <language>fr-FR</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
</translations> </translations>
</concept_node> </concept_node>
@ -1154,11 +1184,11 @@
<translations> <translations>
<translation> <translation>
<language>en-US</language> <language>en-US</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
<translation> <translation>
<language>fr-FR</language> <language>fr-FR</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
</translations> </translations>
</concept_node> </concept_node>
@ -1169,11 +1199,11 @@
<translations> <translations>
<translation> <translation>
<language>en-US</language> <language>en-US</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
<translation> <translation>
<language>fr-FR</language> <language>fr-FR</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
</translations> </translations>
</concept_node> </concept_node>
@ -1184,11 +1214,11 @@
<translations> <translations>
<translation> <translation>
<language>en-US</language> <language>en-US</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
<translation> <translation>
<language>fr-FR</language> <language>fr-FR</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
</translations> </translations>
</concept_node> </concept_node>
@ -1199,11 +1229,11 @@
<translations> <translations>
<translation> <translation>
<language>en-US</language> <language>en-US</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
<translation> <translation>
<language>fr-FR</language> <language>fr-FR</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
</translations> </translations>
</concept_node> </concept_node>
@ -1214,11 +1244,11 @@
<translations> <translations>
<translation> <translation>
<language>en-US</language> <language>en-US</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
<translation> <translation>
<language>fr-FR</language> <language>fr-FR</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
</translations> </translations>
</concept_node> </concept_node>
@ -1229,11 +1259,11 @@
<translations> <translations>
<translation> <translation>
<language>en-US</language> <language>en-US</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
<translation> <translation>
<language>fr-FR</language> <language>fr-FR</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
</translations> </translations>
</concept_node> </concept_node>
@ -1244,11 +1274,11 @@
<translations> <translations>
<translation> <translation>
<language>en-US</language> <language>en-US</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
<translation> <translation>
<language>fr-FR</language> <language>fr-FR</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
</translations> </translations>
</concept_node> </concept_node>
@ -1419,7 +1449,7 @@
<translations> <translations>
<translation> <translation>
<language>en-US</language> <language>en-US</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
<translation> <translation>
<language>fr-FR</language> <language>fr-FR</language>
@ -1434,7 +1464,7 @@
<translations> <translations>
<translation> <translation>
<language>en-US</language> <language>en-US</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
<translation> <translation>
<language>fr-FR</language> <language>fr-FR</language>
@ -1449,7 +1479,7 @@
<translations> <translations>
<translation> <translation>
<language>en-US</language> <language>en-US</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
<translation> <translation>
<language>fr-FR</language> <language>fr-FR</language>
@ -1464,7 +1494,7 @@
<translations> <translations>
<translation> <translation>
<language>en-US</language> <language>en-US</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
<translation> <translation>
<language>fr-FR</language> <language>fr-FR</language>
@ -1479,7 +1509,7 @@
<translations> <translations>
<translation> <translation>
<language>en-US</language> <language>en-US</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
<translation> <translation>
<language>fr-FR</language> <language>fr-FR</language>
@ -1494,7 +1524,7 @@
<translations> <translations>
<translation> <translation>
<language>en-US</language> <language>en-US</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
<translation> <translation>
<language>fr-FR</language> <language>fr-FR</language>
@ -1509,7 +1539,7 @@
<translations> <translations>
<translation> <translation>
<language>en-US</language> <language>en-US</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
<translation> <translation>
<language>fr-FR</language> <language>fr-FR</language>
@ -1524,7 +1554,7 @@
<translations> <translations>
<translation> <translation>
<language>en-US</language> <language>en-US</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
<translation> <translation>
<language>fr-FR</language> <language>fr-FR</language>
@ -1539,7 +1569,7 @@
<translations> <translations>
<translation> <translation>
<language>en-US</language> <language>en-US</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
<translation> <translation>
<language>fr-FR</language> <language>fr-FR</language>
@ -1554,7 +1584,7 @@
<translations> <translations>
<translation> <translation>
<language>en-US</language> <language>en-US</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
<translation> <translation>
<language>fr-FR</language> <language>fr-FR</language>
@ -1569,7 +1599,7 @@
<translations> <translations>
<translation> <translation>
<language>en-US</language> <language>en-US</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
<translation> <translation>
<language>fr-FR</language> <language>fr-FR</language>
@ -1584,7 +1614,7 @@
<translations> <translations>
<translation> <translation>
<language>en-US</language> <language>en-US</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
<translation> <translation>
<language>fr-FR</language> <language>fr-FR</language>
@ -1599,7 +1629,7 @@
<translations> <translations>
<translation> <translation>
<language>en-US</language> <language>en-US</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
<translation> <translation>
<language>fr-FR</language> <language>fr-FR</language>
@ -1789,11 +1819,11 @@
<translations> <translations>
<translation> <translation>
<language>en-US</language> <language>en-US</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
<translation> <translation>
<language>fr-FR</language> <language>fr-FR</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
</translations> </translations>
</concept_node> </concept_node>
@ -2022,11 +2052,11 @@
<translations> <translations>
<translation> <translation>
<language>en-US</language> <language>en-US</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
<translation> <translation>
<language>fr-FR</language> <language>fr-FR</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
</translations> </translations>
</concept_node> </concept_node>
@ -2452,11 +2482,11 @@
<translations> <translations>
<translation> <translation>
<language>en-US</language> <language>en-US</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
<translation> <translation>
<language>fr-FR</language> <language>fr-FR</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
</translations> </translations>
</concept_node> </concept_node>
@ -2467,11 +2497,11 @@
<translations> <translations>
<translation> <translation>
<language>en-US</language> <language>en-US</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
<translation> <translation>
<language>fr-FR</language> <language>fr-FR</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
</translations> </translations>
</concept_node> </concept_node>
@ -2482,11 +2512,11 @@
<translations> <translations>
<translation> <translation>
<language>en-US</language> <language>en-US</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
<translation> <translation>
<language>fr-FR</language> <language>fr-FR</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
</translations> </translations>
</concept_node> </concept_node>
@ -2506,7 +2536,7 @@
</translation> </translation>
<translation> <translation>
<language>fr-FR</language> <language>fr-FR</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
</translations> </translations>
</concept_node> </concept_node>
@ -2552,11 +2582,11 @@
<translations> <translations>
<translation> <translation>
<language>en-US</language> <language>en-US</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
<translation> <translation>
<language>fr-FR</language> <language>fr-FR</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
</translations> </translations>
</concept_node> </concept_node>
@ -2921,7 +2951,7 @@
</translation> </translation>
<translation> <translation>
<language>fr-FR</language> <language>fr-FR</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
</translations> </translations>
</concept_node> </concept_node>
@ -2936,7 +2966,7 @@
</translation> </translation>
<translation> <translation>
<language>fr-FR</language> <language>fr-FR</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
</translations> </translations>
</concept_node> </concept_node>
@ -3167,11 +3197,11 @@
<translations> <translations>
<translation> <translation>
<language>en-US</language> <language>en-US</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
<translation> <translation>
<language>fr-FR</language> <language>fr-FR</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
</translations> </translations>
</concept_node> </concept_node>
@ -3267,11 +3297,11 @@
<translations> <translations>
<translation> <translation>
<language>en-US</language> <language>en-US</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
<translation> <translation>
<language>fr-FR</language> <language>fr-FR</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
</translations> </translations>
</concept_node> </concept_node>
@ -3282,11 +3312,11 @@
<translations> <translations>
<translation> <translation>
<language>en-US</language> <language>en-US</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
<translation> <translation>
<language>fr-FR</language> <language>fr-FR</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
</translations> </translations>
</concept_node> </concept_node>
@ -3297,11 +3327,11 @@
<translations> <translations>
<translation> <translation>
<language>en-US</language> <language>en-US</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
<translation> <translation>
<language>fr-FR</language> <language>fr-FR</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
</translations> </translations>
</concept_node> </concept_node>
@ -3532,11 +3562,11 @@
<translations> <translations>
<translation> <translation>
<language>en-US</language> <language>en-US</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
<translation> <translation>
<language>fr-FR</language> <language>fr-FR</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
</translations> </translations>
</concept_node> </concept_node>
@ -3697,11 +3727,11 @@
<translations> <translations>
<translation> <translation>
<language>en-US</language> <language>en-US</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
<translation> <translation>
<language>fr-FR</language> <language>fr-FR</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
</translations> </translations>
</concept_node> </concept_node>
@ -3812,11 +3842,11 @@
<translations> <translations>
<translation> <translation>
<language>en-US</language> <language>en-US</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
<translation> <translation>
<language>fr-FR</language> <language>fr-FR</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
</translations> </translations>
</concept_node> </concept_node>
@ -3916,7 +3946,7 @@
</translation> </translation>
<translation> <translation>
<language>fr-FR</language> <language>fr-FR</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
</translations> </translations>
</concept_node> </concept_node>
@ -4637,11 +4667,11 @@
<translations> <translations>
<translation> <translation>
<language>en-US</language> <language>en-US</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
<translation> <translation>
<language>fr-FR</language> <language>fr-FR</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
</translations> </translations>
</concept_node> </concept_node>
@ -4687,11 +4717,11 @@
<translations> <translations>
<translation> <translation>
<language>en-US</language> <language>en-US</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
<translation> <translation>
<language>fr-FR</language> <language>fr-FR</language>
<approved>false</approved> <approved>true</approved>
</translation> </translation>
</translations> </translations>
</concept_node> </concept_node>

View file

@ -31,8 +31,10 @@
"level_up.compliment_good": "Well done !", "level_up.compliment_good": "Well done !",
"level_up.compliment_perfect": "Impressive, keep it up !", "level_up.compliment_perfect": "Impressive, keep it up !",
"level_up.pick_upgrade_title": "Pick an upgrade", "level_up.pick_upgrade_title": "Pick an upgrade",
"level_up.plus_one_choice": "(+1 choice)", "level_up.plus_one_choice": "(+1 re-roll)",
"level_up.plus_one_upgrade": "(+1 upgrade and choice)", "level_up.plus_one_upgrade": "(+1 upgrade and +1 re-roll)",
"level_up.reroll": "Re-roll ({{count}})",
"level_up.reroll_help": "Offer new choices",
"level_up.unlocked_level": " (Level)", "level_up.unlocked_level": " (Level)",
"level_up.unlocked_perk": " (Perk)", "level_up.unlocked_perk": " (Perk)",
"level_up.upgrade_perk_to_level": " lvl {{level}}", "level_up.upgrade_perk_to_level": " lvl {{level}}",
@ -58,7 +60,7 @@
"main_menu.mobile": "Mobile mode", "main_menu.mobile": "Mobile mode",
"main_menu.mobile_help": "Leaves space under the puck.", "main_menu.mobile_help": "Leaves space under the puck.",
"main_menu.normal": "New 7 levels run", "main_menu.normal": "New 7 levels run",
"main_menu.normal_help": "Start a quick run with random perk", "main_menu.normal_help": "Start a quick run with random starting perk",
"main_menu.pointer_lock": "Mouse pointer lock", "main_menu.pointer_lock": "Mouse pointer lock",
"main_menu.pointer_lock_help": "Locks and hides the mouse cursor.", "main_menu.pointer_lock_help": "Locks and hides the mouse cursor.",
"main_menu.record": "Record gameplay videos", "main_menu.record": "Record gameplay videos",

View file

@ -31,8 +31,10 @@
"level_up.compliment_good": "Bravo !", "level_up.compliment_good": "Bravo !",
"level_up.compliment_perfect": "Impressionnant, continuez comme ça !", "level_up.compliment_perfect": "Impressionnant, continuez comme ça !",
"level_up.pick_upgrade_title": "Choisir une amélioration", "level_up.pick_upgrade_title": "Choisir une amélioration",
"level_up.plus_one_choice": "(+1 choix)", "level_up.plus_one_choice": "(+1 re-roll)",
"level_up.plus_one_upgrade": "(+1 amélioration et +1 choix)", "level_up.plus_one_upgrade": "(+1 amélioration et +1 re-roll)",
"level_up.reroll": "Re-roll ({{count}})",
"level_up.reroll_help": "Nouveaux choix",
"level_up.unlocked_level": " (Niveau)", "level_up.unlocked_level": " (Niveau)",
"level_up.unlocked_perk": " (Amélioration)", "level_up.unlocked_perk": " (Amélioration)",
"level_up.upgrade_perk_to_level": " niveau {{level}}", "level_up.upgrade_perk_to_level": " niveau {{level}}",
@ -57,8 +59,8 @@
"main_menu.max_particles_help": "Limite le nombre de particules affichées à l'écran pour les effets visuels", "main_menu.max_particles_help": "Limite le nombre de particules affichées à l'écran pour les effets visuels",
"main_menu.mobile": "Mode mobile", "main_menu.mobile": "Mode mobile",
"main_menu.mobile_help": "Laisse un espace sous le palet.", "main_menu.mobile_help": "Laisse un espace sous le palet.",
"main_menu.normal": "", "main_menu.normal": "Nouvelle partie rapide",
"main_menu.normal_help": "", "main_menu.normal_help": "Jouez 7 niveaux avec un avantage de départ aléatoire",
"main_menu.pointer_lock": "Verrouillage du pointeur", "main_menu.pointer_lock": "Verrouillage du pointeur",
"main_menu.pointer_lock_help": "Cache aussi le curseur de la souris.", "main_menu.pointer_lock_help": "Cache aussi le curseur de la souris.",
"main_menu.record": "Enregistrer des vidéos de jeu", "main_menu.record": "Enregistrer des vidéos de jeu",
@ -89,19 +91,19 @@
"play.menu_label": "Menu", "play.menu_label": "Menu",
"play.missed_ball": "raté", "play.missed_ball": "raté",
"play.mobile_press_to_play": "Gardez le doigt ici pour jouer", "play.mobile_press_to_play": "Gardez le doigt ici pour jouer",
"premium.adventure_mode": "", "premium.adventure_mode": "Mode aventure",
"premium.adventure_mode_help": "", "premium.adventure_mode_help": "Démarrer une nouvelle partie en mode aventure",
"premium.back": "", "premium.back": "Retour",
"premium.back_help": "", "premium.back_help": "Retour au menu principal",
"premium.buy": "", "premium.buy": "Acheter une clé de licence",
"premium.buy_disabled_help": "", "premium.buy_disabled_help": "À venir",
"premium.buy_help": "", "premium.buy_help": "Vous serez redirigé vers un formulaire pour payer et recevrez la licence par e-mail. Revenez ensuite pour la saisir ici.",
"premium.enter": "", "premium.enter": "Entrez la clé de licence",
"premium.enter_help": "", "premium.enter_help": "Collez la licence dans la fenêtre qui s'ouvre",
"premium.help": "", "premium.help": "Achetez une licence pour Breakout 71 pour débloquer le mode infini et soutenir le développement. Elle coûte 4,99 € et est illimitée dans le temps. Vous pouvez l'utiliser sur plusieurs appareils, mais ne la partagez pas en ligne.",
"premium.help_google": "", "premium.help_google": "Bien que je prévoie de proposer des licences premium via Google Play, je n'ai pas encore eu l'occasion de le faire ; il n'y a donc pas de lien d'achat ici. Si vous possédez déjà une clé de licence, vous pouvez la saisir ci-dessous.",
"premium.short_help": "", "premium.short_help": "Jouez le plus longtemps possible",
"premium.title": "", "premium.title": "Mode aventure",
"sandbox.help": "Tester n'importe quelle combinaison d'améliorations", "sandbox.help": "Tester n'importe quelle combinaison d'améliorations",
"sandbox.instructions": "Sélectionnez les amélioration ci-dessous et appuyez sur \"Démarrer la partie de test\" pour les tester. Les scores et les statistiques ne seront pas enregistrés.", "sandbox.instructions": "Sélectionnez les amélioration ci-dessous et appuyez sur \"Démarrer la partie de test\" pour les tester. Les scores et les statistiques ne seront pas enregistrés.",
"sandbox.start": "Démarrer la partie de test", "sandbox.start": "Démarrer la partie de test",

View file

@ -103,8 +103,8 @@ export function newGameState(params: RunParams): GameState {
isAdventureMode:!!params?.adventure, isAdventureMode:!!params?.adventure,
adventurePath:'', adventurePath:'',
seed:'Seed'+Math.random() seed:'Seed'+Math.random(),
rerolls:0
}; };
resetBalls(gameState); resetBalls(gameState);

7
src/types.d.ts vendored
View file

@ -266,9 +266,10 @@ export type GameState = {
coinCatch: { vol: number; x: number }; coinCatch: { vol: number; x: number };
colorChange: { vol: number; x: number }; colorChange: { vol: number; x: number };
}; };
isAdventureMode:boolean, isAdventureMode:boolean;
adventurePath:string, adventurePath:string;
seed:string seed:string;
rerolls:number;
}; };
export type RunParams = { export type RunParams = {