mirror of
https://gitlab.com/lecarore/breakout71.git
synced 2025-04-25 22:46:15 -04:00
Added rerolls
This commit is contained in:
parent
0ada53a063
commit
e3e61b12b8
10 changed files with 282 additions and 182 deletions
30
src/adventure.ts
Normal file
30
src/adventure.ts
Normal 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({
|
||||
|
||||
})
|
||||
}
|
||||
|
||||
}
|
|
@ -979,7 +979,7 @@
|
|||
{
|
||||
"name": "icon:sandbox",
|
||||
"size": 8,
|
||||
"bricks": "________________________y_ttt__yyyttt_yyyytttyyyytttttyyyyyyyyyy",
|
||||
"bricks": "__W__W__ccc__ttt_________W___W__GGG__bbb________W______WCCC__aaa",
|
||||
"svg": null,
|
||||
"color": ""
|
||||
},
|
||||
|
@ -1045,5 +1045,12 @@
|
|||
"bricks": "___a______at__cGCa_b_c_____ycGCa_b____at_____a___",
|
||||
"svg": null,
|
||||
"color": ""
|
||||
},
|
||||
{
|
||||
"name": "icon:reroll",
|
||||
"size": 8,
|
||||
"bricks": "__llllll_llBlBlelllllleBWWWWWeeeWBWBWeBeWWWWWeeeWBWBWBe_WWWWWe__",
|
||||
"svg": null,
|
||||
"color": ""
|
||||
}
|
||||
]
|
90
src/game.ts
90
src/game.ts
|
@ -1,4 +1,4 @@
|
|||
import { allLevels, appVersion, icons, upgrades } from "./loadGameData";
|
||||
import {allLevels, appVersion, icons, upgrades} from "./loadGameData";
|
||||
import {
|
||||
Ball,
|
||||
Coin,
|
||||
|
@ -11,17 +11,11 @@ import {
|
|||
TextFlash,
|
||||
Upgrade,
|
||||
} from "./types";
|
||||
import { getAudioContext, playPendingSounds } from "./sounds";
|
||||
import {
|
||||
currentLevelInfo,
|
||||
getRowColIndex,
|
||||
levelsListHTMl,
|
||||
max_levels,
|
||||
pickedUpgradesHTMl,
|
||||
} from "./game_utils";
|
||||
import {getAudioContext, playPendingSounds} from "./sounds";
|
||||
import {currentLevelInfo, getRowColIndex, levelsListHTMl, max_levels, pickedUpgradesHTMl,} from "./game_utils";
|
||||
|
||||
import "./PWA/sw_loader";
|
||||
import { getCurrentLang, t } from "./i18n/i18n";
|
||||
import {getCurrentLang, t} from "./i18n/i18n";
|
||||
import {
|
||||
cycleMaxCoins,
|
||||
cycleMaxParticles,
|
||||
|
@ -40,29 +34,12 @@ import {
|
|||
setLevel,
|
||||
setMousePos,
|
||||
} from "./gameStateMutators";
|
||||
import {
|
||||
backgroundCanvas,
|
||||
ctx,
|
||||
gameCanvas,
|
||||
render,
|
||||
scoreDisplay,
|
||||
} 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 {backgroundCanvas, ctx, gameCanvas, render, scoreDisplay,} 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 {premiumMenuEntry} from "./premium";
|
||||
|
||||
export function play() {
|
||||
|
@ -183,13 +160,12 @@ setInterval(() => {
|
|||
fitSize();
|
||||
}, 1000);
|
||||
|
||||
export async function openUpgradesPicker(gameState: GameState) {
|
||||
export async function openShortRunUpgradesPicker(gameState: GameState) {
|
||||
const catchRate =
|
||||
(gameState.score - gameState.levelStartScore) /
|
||||
(gameState.levelSpawnedCoins || 1);
|
||||
|
||||
let repeats = 1;
|
||||
let choices = 3;
|
||||
|
||||
let timeGain = "",
|
||||
catchGain = "",
|
||||
|
@ -198,44 +174,53 @@ export async function openUpgradesPicker(gameState: GameState) {
|
|||
|
||||
if (gameState.levelWallBounces == 0) {
|
||||
repeats++;
|
||||
choices++;
|
||||
gameState.rerolls++
|
||||
wallHitsGain = t("level_up.plus_one_upgrade");
|
||||
} else if (gameState.levelWallBounces < 5) {
|
||||
choices++;
|
||||
gameState.rerolls++
|
||||
wallHitsGain = t("level_up.plus_one_choice");
|
||||
}
|
||||
if (gameState.levelTime < 30 * 1000) {
|
||||
repeats++;
|
||||
choices++;
|
||||
gameState.rerolls++
|
||||
timeGain = t("level_up.plus_one_upgrade");
|
||||
} else if (gameState.levelTime < 60 * 1000) {
|
||||
choices++;
|
||||
gameState.rerolls++
|
||||
timeGain = t("level_up.plus_one_choice");
|
||||
}
|
||||
if (catchRate === 1) {
|
||||
repeats++;
|
||||
choices++;
|
||||
gameState.rerolls++
|
||||
catchGain = t("level_up.plus_one_upgrade");
|
||||
} else if (catchRate > 0.9) {
|
||||
choices++;
|
||||
gameState.rerolls++
|
||||
catchGain = t("level_up.plus_one_choice");
|
||||
}
|
||||
if (gameState.levelMisses === 0) {
|
||||
repeats++;
|
||||
choices++;
|
||||
gameState.rerolls++
|
||||
missesGain = t("level_up.plus_one_upgrade");
|
||||
} else if (gameState.levelMisses <= 3) {
|
||||
choices++;
|
||||
gameState.rerolls++
|
||||
missesGain = t("level_up.plus_one_choice");
|
||||
}
|
||||
|
||||
while (repeats--) {
|
||||
const actions = pickRandomUpgrades(
|
||||
gameState,
|
||||
choices +
|
||||
3 +
|
||||
gameState.perks.one_more_choice -
|
||||
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;
|
||||
let textAfterButtons = `
|
||||
<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_advice");
|
||||
|
||||
const upgradeId = (await asyncAlert<PerkId>({
|
||||
const upgradeId = (await asyncAlert<PerkId|'reroll'>({
|
||||
title:
|
||||
t("level_up.pick_upgrade_title") +
|
||||
(repeats ? " (" + (repeats + 1) + ")" : ""),
|
||||
|
@ -282,15 +267,20 @@ export async function openUpgradesPicker(gameState: GameState) {
|
|||
textAfterButtons,
|
||||
})) as PerkId;
|
||||
|
||||
gameState.perks[upgradeId]++;
|
||||
if (upgradeId === "instant_upgrade") {
|
||||
repeats += 2;
|
||||
if(upgradeId==='reroll'){
|
||||
repeats++
|
||||
gameState.rerolls--
|
||||
}else{
|
||||
gameState.perks[upgradeId]++;
|
||||
if (upgradeId === "instant_upgrade") {
|
||||
repeats += 2;
|
||||
}
|
||||
gameState.runStatistics.upgrades_picked++;
|
||||
}
|
||||
|
||||
gameState.runStatistics.upgrades_picked++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
gameCanvas.addEventListener("mouseup", (e) => {
|
||||
if (e.button !== 0) return;
|
||||
if (gameState.running) {
|
||||
|
|
|
@ -34,9 +34,10 @@ import {icons} from "./loadGameData";
|
|||
import {addToTotalScore, getCurrentMaxCoins, getCurrentMaxParticles,} from "./settings";
|
||||
import {background} from "./render";
|
||||
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 {isOptionOn} from "./options";
|
||||
import {openAdventureRunUpgradesPicker} from "./adventure";
|
||||
|
||||
export function setMousePos(gameState: GameState, x: number) {
|
||||
// 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);
|
||||
stopRecording();
|
||||
if (l > 0) {
|
||||
await openUpgradesPicker(gameState);
|
||||
if(gameState.isCreativeModeRun){
|
||||
await openAdventureRunUpgradesPicker(gameState);
|
||||
}else{
|
||||
|
||||
await openShortRunUpgradesPicker(gameState);
|
||||
}
|
||||
}
|
||||
gameState.currentLevel = l;
|
||||
gameState.levelTime = 0;
|
||||
|
|
|
@ -389,11 +389,11 @@
|
|||
<translations>
|
||||
<translation>
|
||||
<language>en-US</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>fr-FR</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
</translations>
|
||||
</concept_node>
|
||||
|
@ -557,6 +557,36 @@
|
|||
</translation>
|
||||
</translations>
|
||||
</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>
|
||||
<name>unlocked_level</name>
|
||||
<description/>
|
||||
|
@ -644,11 +674,11 @@
|
|||
<translations>
|
||||
<translation>
|
||||
<language>en-US</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>fr-FR</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
</translations>
|
||||
</concept_node>
|
||||
|
@ -659,11 +689,11 @@
|
|||
<translations>
|
||||
<translation>
|
||||
<language>en-US</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>fr-FR</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
</translations>
|
||||
</concept_node>
|
||||
|
@ -809,11 +839,11 @@
|
|||
<translations>
|
||||
<translation>
|
||||
<language>en-US</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>fr-FR</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
</translations>
|
||||
</concept_node>
|
||||
|
@ -824,11 +854,11 @@
|
|||
<translations>
|
||||
<translation>
|
||||
<language>en-US</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>fr-FR</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
</translations>
|
||||
</concept_node>
|
||||
|
@ -839,11 +869,11 @@
|
|||
<translations>
|
||||
<translation>
|
||||
<language>en-US</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>fr-FR</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
</translations>
|
||||
</concept_node>
|
||||
|
@ -854,11 +884,11 @@
|
|||
<translations>
|
||||
<translation>
|
||||
<language>en-US</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>fr-FR</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
</translations>
|
||||
</concept_node>
|
||||
|
@ -869,11 +899,11 @@
|
|||
<translations>
|
||||
<translation>
|
||||
<language>en-US</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>fr-FR</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
</translations>
|
||||
</concept_node>
|
||||
|
@ -884,11 +914,11 @@
|
|||
<translations>
|
||||
<translation>
|
||||
<language>en-US</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>fr-FR</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
</translations>
|
||||
</concept_node>
|
||||
|
@ -929,7 +959,7 @@
|
|||
<translations>
|
||||
<translation>
|
||||
<language>en-US</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>fr-FR</language>
|
||||
|
@ -944,7 +974,7 @@
|
|||
<translations>
|
||||
<translation>
|
||||
<language>en-US</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>fr-FR</language>
|
||||
|
@ -1139,11 +1169,11 @@
|
|||
<translations>
|
||||
<translation>
|
||||
<language>en-US</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>fr-FR</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
</translations>
|
||||
</concept_node>
|
||||
|
@ -1154,11 +1184,11 @@
|
|||
<translations>
|
||||
<translation>
|
||||
<language>en-US</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>fr-FR</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
</translations>
|
||||
</concept_node>
|
||||
|
@ -1169,11 +1199,11 @@
|
|||
<translations>
|
||||
<translation>
|
||||
<language>en-US</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>fr-FR</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
</translations>
|
||||
</concept_node>
|
||||
|
@ -1184,11 +1214,11 @@
|
|||
<translations>
|
||||
<translation>
|
||||
<language>en-US</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>fr-FR</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
</translations>
|
||||
</concept_node>
|
||||
|
@ -1199,11 +1229,11 @@
|
|||
<translations>
|
||||
<translation>
|
||||
<language>en-US</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>fr-FR</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
</translations>
|
||||
</concept_node>
|
||||
|
@ -1214,11 +1244,11 @@
|
|||
<translations>
|
||||
<translation>
|
||||
<language>en-US</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>fr-FR</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
</translations>
|
||||
</concept_node>
|
||||
|
@ -1229,11 +1259,11 @@
|
|||
<translations>
|
||||
<translation>
|
||||
<language>en-US</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>fr-FR</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
</translations>
|
||||
</concept_node>
|
||||
|
@ -1244,11 +1274,11 @@
|
|||
<translations>
|
||||
<translation>
|
||||
<language>en-US</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>fr-FR</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
</translations>
|
||||
</concept_node>
|
||||
|
@ -1419,7 +1449,7 @@
|
|||
<translations>
|
||||
<translation>
|
||||
<language>en-US</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>fr-FR</language>
|
||||
|
@ -1434,7 +1464,7 @@
|
|||
<translations>
|
||||
<translation>
|
||||
<language>en-US</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>fr-FR</language>
|
||||
|
@ -1449,7 +1479,7 @@
|
|||
<translations>
|
||||
<translation>
|
||||
<language>en-US</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>fr-FR</language>
|
||||
|
@ -1464,7 +1494,7 @@
|
|||
<translations>
|
||||
<translation>
|
||||
<language>en-US</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>fr-FR</language>
|
||||
|
@ -1479,7 +1509,7 @@
|
|||
<translations>
|
||||
<translation>
|
||||
<language>en-US</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>fr-FR</language>
|
||||
|
@ -1494,7 +1524,7 @@
|
|||
<translations>
|
||||
<translation>
|
||||
<language>en-US</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>fr-FR</language>
|
||||
|
@ -1509,7 +1539,7 @@
|
|||
<translations>
|
||||
<translation>
|
||||
<language>en-US</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>fr-FR</language>
|
||||
|
@ -1524,7 +1554,7 @@
|
|||
<translations>
|
||||
<translation>
|
||||
<language>en-US</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>fr-FR</language>
|
||||
|
@ -1539,7 +1569,7 @@
|
|||
<translations>
|
||||
<translation>
|
||||
<language>en-US</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>fr-FR</language>
|
||||
|
@ -1554,7 +1584,7 @@
|
|||
<translations>
|
||||
<translation>
|
||||
<language>en-US</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>fr-FR</language>
|
||||
|
@ -1569,7 +1599,7 @@
|
|||
<translations>
|
||||
<translation>
|
||||
<language>en-US</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>fr-FR</language>
|
||||
|
@ -1584,7 +1614,7 @@
|
|||
<translations>
|
||||
<translation>
|
||||
<language>en-US</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>fr-FR</language>
|
||||
|
@ -1599,7 +1629,7 @@
|
|||
<translations>
|
||||
<translation>
|
||||
<language>en-US</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>fr-FR</language>
|
||||
|
@ -1789,11 +1819,11 @@
|
|||
<translations>
|
||||
<translation>
|
||||
<language>en-US</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>fr-FR</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
</translations>
|
||||
</concept_node>
|
||||
|
@ -2022,11 +2052,11 @@
|
|||
<translations>
|
||||
<translation>
|
||||
<language>en-US</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>fr-FR</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
</translations>
|
||||
</concept_node>
|
||||
|
@ -2452,11 +2482,11 @@
|
|||
<translations>
|
||||
<translation>
|
||||
<language>en-US</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>fr-FR</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
</translations>
|
||||
</concept_node>
|
||||
|
@ -2467,11 +2497,11 @@
|
|||
<translations>
|
||||
<translation>
|
||||
<language>en-US</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>fr-FR</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
</translations>
|
||||
</concept_node>
|
||||
|
@ -2482,11 +2512,11 @@
|
|||
<translations>
|
||||
<translation>
|
||||
<language>en-US</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>fr-FR</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
</translations>
|
||||
</concept_node>
|
||||
|
@ -2506,7 +2536,7 @@
|
|||
</translation>
|
||||
<translation>
|
||||
<language>fr-FR</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
</translations>
|
||||
</concept_node>
|
||||
|
@ -2552,11 +2582,11 @@
|
|||
<translations>
|
||||
<translation>
|
||||
<language>en-US</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>fr-FR</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
</translations>
|
||||
</concept_node>
|
||||
|
@ -2921,7 +2951,7 @@
|
|||
</translation>
|
||||
<translation>
|
||||
<language>fr-FR</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
</translations>
|
||||
</concept_node>
|
||||
|
@ -2936,7 +2966,7 @@
|
|||
</translation>
|
||||
<translation>
|
||||
<language>fr-FR</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
</translations>
|
||||
</concept_node>
|
||||
|
@ -3167,11 +3197,11 @@
|
|||
<translations>
|
||||
<translation>
|
||||
<language>en-US</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>fr-FR</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
</translations>
|
||||
</concept_node>
|
||||
|
@ -3267,11 +3297,11 @@
|
|||
<translations>
|
||||
<translation>
|
||||
<language>en-US</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>fr-FR</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
</translations>
|
||||
</concept_node>
|
||||
|
@ -3282,11 +3312,11 @@
|
|||
<translations>
|
||||
<translation>
|
||||
<language>en-US</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>fr-FR</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
</translations>
|
||||
</concept_node>
|
||||
|
@ -3297,11 +3327,11 @@
|
|||
<translations>
|
||||
<translation>
|
||||
<language>en-US</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>fr-FR</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
</translations>
|
||||
</concept_node>
|
||||
|
@ -3532,11 +3562,11 @@
|
|||
<translations>
|
||||
<translation>
|
||||
<language>en-US</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>fr-FR</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
</translations>
|
||||
</concept_node>
|
||||
|
@ -3697,11 +3727,11 @@
|
|||
<translations>
|
||||
<translation>
|
||||
<language>en-US</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>fr-FR</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
</translations>
|
||||
</concept_node>
|
||||
|
@ -3812,11 +3842,11 @@
|
|||
<translations>
|
||||
<translation>
|
||||
<language>en-US</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>fr-FR</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
</translations>
|
||||
</concept_node>
|
||||
|
@ -3916,7 +3946,7 @@
|
|||
</translation>
|
||||
<translation>
|
||||
<language>fr-FR</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
</translations>
|
||||
</concept_node>
|
||||
|
@ -4637,11 +4667,11 @@
|
|||
<translations>
|
||||
<translation>
|
||||
<language>en-US</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>fr-FR</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
</translations>
|
||||
</concept_node>
|
||||
|
@ -4687,11 +4717,11 @@
|
|||
<translations>
|
||||
<translation>
|
||||
<language>en-US</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>fr-FR</language>
|
||||
<approved>false</approved>
|
||||
<approved>true</approved>
|
||||
</translation>
|
||||
</translations>
|
||||
</concept_node>
|
||||
|
|
|
@ -31,8 +31,10 @@
|
|||
"level_up.compliment_good": "Well done !",
|
||||
"level_up.compliment_perfect": "Impressive, keep it up !",
|
||||
"level_up.pick_upgrade_title": "Pick an upgrade",
|
||||
"level_up.plus_one_choice": "(+1 choice)",
|
||||
"level_up.plus_one_upgrade": "(+1 upgrade and choice)",
|
||||
"level_up.plus_one_choice": "(+1 re-roll)",
|
||||
"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_perk": " (Perk)",
|
||||
"level_up.upgrade_perk_to_level": " lvl {{level}}",
|
||||
|
@ -58,7 +60,7 @@
|
|||
"main_menu.mobile": "Mobile mode",
|
||||
"main_menu.mobile_help": "Leaves space under the puck.",
|
||||
"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_help": "Locks and hides the mouse cursor.",
|
||||
"main_menu.record": "Record gameplay videos",
|
||||
|
|
|
@ -31,8 +31,10 @@
|
|||
"level_up.compliment_good": "Bravo !",
|
||||
"level_up.compliment_perfect": "Impressionnant, continuez comme ça !",
|
||||
"level_up.pick_upgrade_title": "Choisir une amélioration",
|
||||
"level_up.plus_one_choice": "(+1 choix)",
|
||||
"level_up.plus_one_upgrade": "(+1 amélioration et +1 choix)",
|
||||
"level_up.plus_one_choice": "(+1 re-roll)",
|
||||
"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_perk": " (Amélioration)",
|
||||
"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.mobile": "Mode mobile",
|
||||
"main_menu.mobile_help": "Laisse un espace sous le palet.",
|
||||
"main_menu.normal": "",
|
||||
"main_menu.normal_help": "",
|
||||
"main_menu.normal": "Nouvelle partie rapide",
|
||||
"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_help": "Cache aussi le curseur de la souris.",
|
||||
"main_menu.record": "Enregistrer des vidéos de jeu",
|
||||
|
@ -89,19 +91,19 @@
|
|||
"play.menu_label": "Menu",
|
||||
"play.missed_ball": "raté",
|
||||
"play.mobile_press_to_play": "Gardez le doigt ici pour jouer",
|
||||
"premium.adventure_mode": "",
|
||||
"premium.adventure_mode_help": "",
|
||||
"premium.back": "",
|
||||
"premium.back_help": "",
|
||||
"premium.buy": "",
|
||||
"premium.buy_disabled_help": "",
|
||||
"premium.buy_help": "",
|
||||
"premium.enter": "",
|
||||
"premium.enter_help": "",
|
||||
"premium.help": "",
|
||||
"premium.help_google": "",
|
||||
"premium.short_help": "",
|
||||
"premium.title": "",
|
||||
"premium.adventure_mode": "Mode aventure",
|
||||
"premium.adventure_mode_help": "Démarrer une nouvelle partie en mode aventure",
|
||||
"premium.back": "Retour",
|
||||
"premium.back_help": "Retour au menu principal",
|
||||
"premium.buy": "Acheter une clé de licence",
|
||||
"premium.buy_disabled_help": "À venir",
|
||||
"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": "Entrez la clé de licence",
|
||||
"premium.enter_help": "Collez la licence dans la fenêtre qui s'ouvre",
|
||||
"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": "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": "Jouez le plus longtemps possible",
|
||||
"premium.title": "Mode aventure",
|
||||
"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.start": "Démarrer la partie de test",
|
||||
|
|
|
@ -103,8 +103,8 @@ export function newGameState(params: RunParams): GameState {
|
|||
|
||||
isAdventureMode:!!params?.adventure,
|
||||
adventurePath:'',
|
||||
seed:'Seed'+Math.random()
|
||||
|
||||
seed:'Seed'+Math.random(),
|
||||
rerolls:0
|
||||
};
|
||||
resetBalls(gameState);
|
||||
|
||||
|
|
7
src/types.d.ts
vendored
7
src/types.d.ts
vendored
|
@ -266,9 +266,10 @@ export type GameState = {
|
|||
coinCatch: { vol: number; x: number };
|
||||
colorChange: { vol: number; x: number };
|
||||
};
|
||||
isAdventureMode:boolean,
|
||||
adventurePath:string,
|
||||
seed:string
|
||||
isAdventureMode:boolean;
|
||||
adventurePath:string;
|
||||
seed:string;
|
||||
rerolls:number;
|
||||
};
|
||||
|
||||
export type RunParams = {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue