mirror of
https://gitlab.com/lecarore/breakout71.git
synced 2025-04-20 12:15:06 -04:00
Standard way to prompt for restart
This commit is contained in:
parent
1b4d2fba81
commit
7323d9ed86
5 changed files with 175 additions and 230 deletions
39
dist/index.html
vendored
39
dist/index.html
vendored
File diff suppressed because one or more lines are too long
110
src/game.ts
110
src/game.ts
|
@ -359,7 +359,7 @@ export function getUpgraderUnlockPoints() {
|
||||||
if (u.threshold) {
|
if (u.threshold) {
|
||||||
list.push({
|
list.push({
|
||||||
threshold: u.threshold,
|
threshold: u.threshold,
|
||||||
title: u.name + ' '+t('level_up.unlocked_perk'),
|
title: u.name + ' ' + t('level_up.unlocked_perk'),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -367,7 +367,7 @@ export function getUpgraderUnlockPoints() {
|
||||||
allLevels.forEach((l) => {
|
allLevels.forEach((l) => {
|
||||||
list.push({
|
list.push({
|
||||||
threshold: l.threshold,
|
threshold: l.threshold,
|
||||||
title: l.name + ' ' +t('level_up.unlocked_level'),
|
title: l.name + ' ' + t('level_up.unlocked_level'),
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -398,7 +398,7 @@ export function pickRandomUpgrades(count: number) {
|
||||||
return list.map((u) => ({
|
return list.map((u) => ({
|
||||||
text:
|
text:
|
||||||
u.name +
|
u.name +
|
||||||
(gameState.perks[u.id] ? t('level_up.upgrade_perk_to_level',{level:gameState.perks[u.id] + 1}) : ""),
|
(gameState.perks[u.id] ? t('level_up.upgrade_perk_to_level', {level: gameState.perks[u.id] + 1}) : ""),
|
||||||
icon: icons["icon:" + u.id],
|
icon: icons["icon:" + u.id],
|
||||||
value: u.id as PerkId,
|
value: u.id as PerkId,
|
||||||
help: u.help(gameState.perks[u.id] + 1),
|
help: u.help(gameState.perks[u.id] + 1),
|
||||||
|
@ -674,7 +674,7 @@ export function tick() {
|
||||||
} else {
|
} else {
|
||||||
gameOver(
|
gameOver(
|
||||||
t('gameOver.win.title'),
|
t('gameOver.win.title'),
|
||||||
t('gameOver.win.summary',{score:gameState.score}),
|
t('gameOver.win.summary', {score: gameState.score}),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
} else if (gameState.running || gameState.levelTime) {
|
} else if (gameState.running || gameState.levelTime) {
|
||||||
|
@ -1109,7 +1109,7 @@ export function ballTick(ball: Ball, delta: number) {
|
||||||
if (!gameState.balls.find((b) => !b.destroyed)) {
|
if (!gameState.balls.find((b) => !b.destroyed)) {
|
||||||
gameOver(
|
gameOver(
|
||||||
t('gameOver.lost.title'),
|
t('gameOver.lost.title'),
|
||||||
t('gameOver.lost.summary',{score:gameState.score}))
|
t('gameOver.lost.summary', {score: gameState.score}))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const radius = gameState.ballSize / 2;
|
const radius = gameState.ballSize / 2;
|
||||||
|
@ -1260,7 +1260,7 @@ export function gameOver(title: string, intro: string) {
|
||||||
const total = nextUnlock?.threshold - previousUnlockAt;
|
const total = nextUnlock?.threshold - previousUnlockAt;
|
||||||
const done = endTs - previousUnlockAt;
|
const done = endTs - previousUnlockAt;
|
||||||
|
|
||||||
intro += t('gameOver.next_unlock', {points:nextUnlock.threshold - endTs}) ;
|
intro += t('gameOver.next_unlock', {points: nextUnlock.threshold - endTs});
|
||||||
|
|
||||||
const scaleX = (done / total).toFixed(2);
|
const scaleX = (done / total).toFixed(2);
|
||||||
unlocksInfo += `
|
unlocksInfo += `
|
||||||
|
@ -1287,7 +1287,7 @@ export function gameOver(title: string, intro: string) {
|
||||||
);
|
);
|
||||||
if (unlockedItems.length) {
|
if (unlockedItems.length) {
|
||||||
|
|
||||||
unlocksInfo += `<p>${t('gameOver.unlocked_count',{count:unlockedItems.length})} ${unlockedItems.map((u) => u.title).join(", ")}</p>`;
|
unlocksInfo += `<p>${t('gameOver.unlocked_count', {count: unlockedItems.length})} ${unlockedItems.map((u) => u.title).join(", ")}</p>`;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Avoid the sad sound right as we restart a new games
|
// Avoid the sad sound right as we restart a new games
|
||||||
|
@ -1299,7 +1299,7 @@ export function gameOver(title: string, intro: string) {
|
||||||
text: `
|
text: `
|
||||||
${gameState.isCreativeModeRun ? `<p>${t('gameOver.test_run')}</p> ` : ""}
|
${gameState.isCreativeModeRun ? `<p>${t('gameOver.test_run')}</p> ` : ""}
|
||||||
<p>${intro}</p>
|
<p>${intro}</p>
|
||||||
<p>${t('gameOver.cumulative_total',{startTs, endTs})}</p>
|
<p>${t('gameOver.cumulative_total', {startTs, endTs})}</p>
|
||||||
${unlocksInfo}
|
${unlocksInfo}
|
||||||
`,
|
`,
|
||||||
actions: [
|
actions: [
|
||||||
|
@ -1396,7 +1396,7 @@ export function getHistograms() {
|
||||||
);
|
);
|
||||||
runStats += makeHistogram(t('gameOver.stats.bricks_broken'), (r) => r.bricks_broken, "");
|
runStats += makeHistogram(t('gameOver.stats.bricks_broken'), (r) => r.bricks_broken, "");
|
||||||
runStats += makeHistogram(
|
runStats += makeHistogram(
|
||||||
t('gameOver.stats.bricks_per_minute') ,
|
t('gameOver.stats.bricks_per_minute'),
|
||||||
(r) => Math.round((r.bricks_broken / r.runTime) * 1000 * 60),
|
(r) => Math.round((r.bricks_broken / r.runTime) * 1000 * 60),
|
||||||
"",
|
"",
|
||||||
);
|
);
|
||||||
|
@ -1422,7 +1422,7 @@ export function getHistograms() {
|
||||||
|
|
||||||
if (runStats) {
|
if (runStats) {
|
||||||
runStats =
|
runStats =
|
||||||
`<p>${t('gameOver.stats.intro',{count:runsHistory.length - 1})}</p>` +
|
`<p>${t('gameOver.stats.intro', {count: runsHistory.length - 1})}</p>` +
|
||||||
runStats;
|
runStats;
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
@ -1632,10 +1632,10 @@ export function render() {
|
||||||
if (!width || !height) return;
|
if (!width || !height) return;
|
||||||
|
|
||||||
if (gameState.currentLevel || gameState.levelTime) {
|
if (gameState.currentLevel || gameState.levelTime) {
|
||||||
menuLabel.innerText = t('play.current_lvl',{
|
menuLabel.innerText = t('play.current_lvl', {
|
||||||
level:gameState.currentLevel + 1,
|
level: gameState.currentLevel + 1,
|
||||||
max:max_levels()
|
max: max_levels()
|
||||||
}) ;
|
});
|
||||||
} else {
|
} else {
|
||||||
menuLabel.innerText = t('play.menu_label')
|
menuLabel.innerText = t('play.menu_label')
|
||||||
}
|
}
|
||||||
|
@ -2468,8 +2468,8 @@ document.addEventListener("visibilitychange", () => {
|
||||||
async function openScorePanel() {
|
async function openScorePanel() {
|
||||||
pause(true);
|
pause(true);
|
||||||
const cb = await asyncAlert({
|
const cb = await asyncAlert({
|
||||||
title: t('score_panel.title',{
|
title: t('score_panel.title', {
|
||||||
score:gameState.score,level:gameState.currentLevel + 1,max:max_levels()
|
score: gameState.score, level: gameState.currentLevel + 1, max: max_levels()
|
||||||
}),
|
}),
|
||||||
text: `
|
text: `
|
||||||
${gameState.isCreativeModeRun ? "<p>${t('score_panel.test_run}</p>" : ""}
|
${gameState.isCreativeModeRun ? "<p>${t('score_panel.test_run}</p>" : ""}
|
||||||
|
@ -2567,7 +2567,7 @@ async function openSettingsPanel() {
|
||||||
text: t('sandbox.title'),
|
text: t('sandbox.title'),
|
||||||
help:
|
help:
|
||||||
getTotalScore() < creativeModeThreshold
|
getTotalScore() < creativeModeThreshold
|
||||||
? t('sandbox.unlocks_at',{score:creativeModeThreshold})
|
? t('sandbox.unlocks_at', {score: creativeModeThreshold})
|
||||||
: t('sandbox.help'),
|
: t('sandbox.help'),
|
||||||
disabled: getTotalScore() < creativeModeThreshold,
|
disabled: getTotalScore() < creativeModeThreshold,
|
||||||
async value() {
|
async value() {
|
||||||
|
@ -2578,8 +2578,8 @@ async function openSettingsPanel() {
|
||||||
|
|
||||||
while (
|
while (
|
||||||
(choice = await asyncAlert<"start" | Upgrade>({
|
(choice = await asyncAlert<"start" | Upgrade>({
|
||||||
title:t('sandbox.title'),
|
title: t('sandbox.title'),
|
||||||
text:t('sandbox.instructions'),
|
text: t('sandbox.instructions'),
|
||||||
actionsAsGrid: true,
|
actionsAsGrid: true,
|
||||||
actions: [
|
actions: [
|
||||||
...upgrades.map((u) => ({
|
...upgrades.map((u) => ({
|
||||||
|
@ -2592,7 +2592,7 @@ async function openSettingsPanel() {
|
||||||
: "grey-out-unless-hovered",
|
: "grey-out-unless-hovered",
|
||||||
})),
|
})),
|
||||||
{
|
{
|
||||||
text:t('sandbox.start') ,
|
text: t('sandbox.start'),
|
||||||
value: "start",
|
value: "start",
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
@ -2657,8 +2657,10 @@ async function openSettingsPanel() {
|
||||||
allowClose: true,
|
allowClose: true,
|
||||||
})
|
})
|
||||||
if (
|
if (
|
||||||
pick && pick!==getCurrentLang()
|
pick && pick !== getCurrentLang() &&
|
||||||
|
await confirmRestart()
|
||||||
) {
|
) {
|
||||||
|
|
||||||
setSettingValue('lang', pick)
|
setSettingValue('lang', pick)
|
||||||
window.location.reload()
|
window.location.reload()
|
||||||
}
|
}
|
||||||
|
@ -2685,7 +2687,7 @@ async function openUnlocksList() {
|
||||||
.map(({name, id, threshold, icon, fullHelp}) => ({
|
.map(({name, id, threshold, icon, fullHelp}) => ({
|
||||||
text: name,
|
text: name,
|
||||||
help:
|
help:
|
||||||
ts >= threshold ? fullHelp :t('unlocks.unlocks_at',{threshold}),
|
ts >= threshold ? fullHelp : t('unlocks.unlocks_at', {threshold}),
|
||||||
disabled: ts < threshold,
|
disabled: ts < threshold,
|
||||||
value: {perks: {[id]: 1}} as RunParams,
|
value: {perks: {[id]: 1}} as RunParams,
|
||||||
icon,
|
icon,
|
||||||
|
@ -2699,8 +2701,8 @@ async function openUnlocksList() {
|
||||||
help: available
|
help: available
|
||||||
|
|
||||||
?
|
?
|
||||||
t('unlocks.level_description',{size:l.size, bricks:l.bricks.filter((i) => i).length})
|
t('unlocks.level_description', {size: l.size, bricks: l.bricks.filter((i) => i).length})
|
||||||
: t('unlocks.unlocks_at',{threshold:l.threshold}) ,
|
: t('unlocks.unlocks_at', {threshold: l.threshold}),
|
||||||
disabled: !available,
|
disabled: !available,
|
||||||
value: {level: l.name} as RunParams,
|
value: {level: l.name} as RunParams,
|
||||||
icon: icons[l.name],
|
icon: icons[l.name],
|
||||||
|
@ -2712,8 +2714,8 @@ async function openUnlocksList() {
|
||||||
(actions.filter((a) => !a.disabled).length / actions.length) * 100,
|
(actions.filter((a) => !a.disabled).length / actions.length) * 100,
|
||||||
);
|
);
|
||||||
const tryOn = await asyncAlert<RunParams>({
|
const tryOn = await asyncAlert<RunParams>({
|
||||||
title: t('unlocks.title',{percentUnlock}) ,
|
title: t('unlocks.title', {percentUnlock}),
|
||||||
text: `<p>${t('unlocks.intro',{ts})}
|
text: `<p>${t('unlocks.intro', {ts})}
|
||||||
${percentUnlock < 100 ? t('unlocks.greyed_out_help') : ""}</p>
|
${percentUnlock < 100 ? t('unlocks.greyed_out_help') : ""}</p>
|
||||||
`,
|
`,
|
||||||
textAfterButtons: `<p>
|
textAfterButtons: `<p>
|
||||||
|
@ -2725,27 +2727,34 @@ Click an item above to start a run with it.
|
||||||
});
|
});
|
||||||
if (tryOn) {
|
if (tryOn) {
|
||||||
if (
|
if (
|
||||||
!gameState.currentLevel ||
|
await confirmRestart()
|
||||||
(await asyncAlert({
|
|
||||||
title: t('unlocks.restart_title'),
|
|
||||||
text: t('unlocks.restart_text'),
|
|
||||||
actions: [
|
|
||||||
{
|
|
||||||
value: true,
|
|
||||||
text: t('unlocks.restart_confirm'),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
value: false,
|
|
||||||
text: t('unlocks.restart_cancel'),
|
|
||||||
},
|
|
||||||
],
|
|
||||||
}))
|
|
||||||
) {
|
) {
|
||||||
restart(tryOn);
|
restart(tryOn);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function confirmRestart() {
|
||||||
|
if (!gameState.currentLevel) return true
|
||||||
|
|
||||||
|
return asyncAlert({
|
||||||
|
title: t('confirmRestart.title'),
|
||||||
|
text: t('confirmRestart.text'),
|
||||||
|
actions: [
|
||||||
|
{
|
||||||
|
value: true,
|
||||||
|
text: t('confirmRestart.yes'),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value: false,
|
||||||
|
text: t('confirmRestart.no'),
|
||||||
|
},
|
||||||
|
],
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
export function distance2(
|
export function distance2(
|
||||||
a: { x: number; y: number },
|
a: { x: number; y: number },
|
||||||
b: { x: number; y: number },
|
b: { x: number; y: number },
|
||||||
|
@ -2989,8 +2998,8 @@ export function startRecordingGame() {
|
||||||
a.download = captureFileName("webm");
|
a.download = captureFileName("webm");
|
||||||
a.target = "_blank";
|
a.target = "_blank";
|
||||||
a.href = video.src;
|
a.href = video.src;
|
||||||
a.textContent = t('main_menu.record_download',{
|
a.textContent = t('main_menu.record_download', {
|
||||||
size:(blob.size / 1000000).toFixed(2)
|
size: (blob.size / 1000000).toFixed(2)
|
||||||
});
|
});
|
||||||
targetDiv.appendChild(video);
|
targetDiv.appendChild(video);
|
||||||
targetDiv.appendChild(a);
|
targetDiv.appendChild(a);
|
||||||
|
@ -3121,20 +3130,9 @@ document.addEventListener("keyup", async (e) => {
|
||||||
} else if (e.key.toLowerCase() === "s" && !alertsOpen) {
|
} else if (e.key.toLowerCase() === "s" && !alertsOpen) {
|
||||||
openScorePanel().then();
|
openScorePanel().then();
|
||||||
} else if (e.key.toLowerCase() === "r" && !alertsOpen) {
|
} else if (e.key.toLowerCase() === "r" && !alertsOpen) {
|
||||||
if(gameState.currentLevel<3 || await asyncAlert({
|
if (await confirmRestart()) {
|
||||||
title:t('play.confirm_restart'),
|
|
||||||
actions:[
|
|
||||||
{
|
|
||||||
value:true ,
|
|
||||||
text:t('play.confirm_restart_yes')
|
|
||||||
},
|
|
||||||
{
|
|
||||||
value:false ,
|
|
||||||
text:t('play.confirm_restart_no')
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}))
|
|
||||||
restart({levelToAvoid: currentLevelInfo().name});
|
restart({levelToAvoid: currentLevelInfo().name});
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,6 +19,71 @@
|
||||||
<package_node>
|
<package_node>
|
||||||
<name>main</name>
|
<name>main</name>
|
||||||
<children>
|
<children>
|
||||||
|
<folder_node>
|
||||||
|
<name>confirmRestart</name>
|
||||||
|
<children>
|
||||||
|
<concept_node>
|
||||||
|
<name>no</name>
|
||||||
|
<description/>
|
||||||
|
<comment/>
|
||||||
|
<translations>
|
||||||
|
<translation>
|
||||||
|
<language>en-US</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>fr-FR</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
</translations>
|
||||||
|
</concept_node>
|
||||||
|
<concept_node>
|
||||||
|
<name>text</name>
|
||||||
|
<description/>
|
||||||
|
<comment/>
|
||||||
|
<translations>
|
||||||
|
<translation>
|
||||||
|
<language>en-US</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>fr-FR</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
</translations>
|
||||||
|
</concept_node>
|
||||||
|
<concept_node>
|
||||||
|
<name>title</name>
|
||||||
|
<description/>
|
||||||
|
<comment/>
|
||||||
|
<translations>
|
||||||
|
<translation>
|
||||||
|
<language>en-US</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>fr-FR</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
</translations>
|
||||||
|
</concept_node>
|
||||||
|
<concept_node>
|
||||||
|
<name>yes</name>
|
||||||
|
<description/>
|
||||||
|
<comment/>
|
||||||
|
<translations>
|
||||||
|
<translation>
|
||||||
|
<language>en-US</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>fr-FR</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
</translations>
|
||||||
|
</concept_node>
|
||||||
|
</children>
|
||||||
|
</folder_node>
|
||||||
<folder_node>
|
<folder_node>
|
||||||
<name>gameOver</name>
|
<name>gameOver</name>
|
||||||
<children>
|
<children>
|
||||||
|
@ -997,51 +1062,6 @@
|
||||||
</translation>
|
</translation>
|
||||||
</translations>
|
</translations>
|
||||||
</concept_node>
|
</concept_node>
|
||||||
<concept_node>
|
|
||||||
<name>confirm_restart</name>
|
|
||||||
<description/>
|
|
||||||
<comment/>
|
|
||||||
<translations>
|
|
||||||
<translation>
|
|
||||||
<language>en-US</language>
|
|
||||||
<approved>false</approved>
|
|
||||||
</translation>
|
|
||||||
<translation>
|
|
||||||
<language>fr-FR</language>
|
|
||||||
<approved>false</approved>
|
|
||||||
</translation>
|
|
||||||
</translations>
|
|
||||||
</concept_node>
|
|
||||||
<concept_node>
|
|
||||||
<name>confirm_restart_no</name>
|
|
||||||
<description/>
|
|
||||||
<comment/>
|
|
||||||
<translations>
|
|
||||||
<translation>
|
|
||||||
<language>en-US</language>
|
|
||||||
<approved>false</approved>
|
|
||||||
</translation>
|
|
||||||
<translation>
|
|
||||||
<language>fr-FR</language>
|
|
||||||
<approved>false</approved>
|
|
||||||
</translation>
|
|
||||||
</translations>
|
|
||||||
</concept_node>
|
|
||||||
<concept_node>
|
|
||||||
<name>confirm_restart_yes</name>
|
|
||||||
<description/>
|
|
||||||
<comment/>
|
|
||||||
<translations>
|
|
||||||
<translation>
|
|
||||||
<language>en-US</language>
|
|
||||||
<approved>false</approved>
|
|
||||||
</translation>
|
|
||||||
<translation>
|
|
||||||
<language>fr-FR</language>
|
|
||||||
<approved>false</approved>
|
|
||||||
</translation>
|
|
||||||
</translations>
|
|
||||||
</concept_node>
|
|
||||||
<concept_node>
|
<concept_node>
|
||||||
<name>current_lvl</name>
|
<name>current_lvl</name>
|
||||||
<description/>
|
<description/>
|
||||||
|
@ -1342,66 +1362,6 @@
|
||||||
</translation>
|
</translation>
|
||||||
</translations>
|
</translations>
|
||||||
</concept_node>
|
</concept_node>
|
||||||
<concept_node>
|
|
||||||
<name>restart_cancel</name>
|
|
||||||
<description/>
|
|
||||||
<comment/>
|
|
||||||
<translations>
|
|
||||||
<translation>
|
|
||||||
<language>en-US</language>
|
|
||||||
<approved>false</approved>
|
|
||||||
</translation>
|
|
||||||
<translation>
|
|
||||||
<language>fr-FR</language>
|
|
||||||
<approved>false</approved>
|
|
||||||
</translation>
|
|
||||||
</translations>
|
|
||||||
</concept_node>
|
|
||||||
<concept_node>
|
|
||||||
<name>restart_confirm</name>
|
|
||||||
<description/>
|
|
||||||
<comment/>
|
|
||||||
<translations>
|
|
||||||
<translation>
|
|
||||||
<language>en-US</language>
|
|
||||||
<approved>false</approved>
|
|
||||||
</translation>
|
|
||||||
<translation>
|
|
||||||
<language>fr-FR</language>
|
|
||||||
<approved>false</approved>
|
|
||||||
</translation>
|
|
||||||
</translations>
|
|
||||||
</concept_node>
|
|
||||||
<concept_node>
|
|
||||||
<name>restart_text</name>
|
|
||||||
<description/>
|
|
||||||
<comment/>
|
|
||||||
<translations>
|
|
||||||
<translation>
|
|
||||||
<language>en-US</language>
|
|
||||||
<approved>false</approved>
|
|
||||||
</translation>
|
|
||||||
<translation>
|
|
||||||
<language>fr-FR</language>
|
|
||||||
<approved>false</approved>
|
|
||||||
</translation>
|
|
||||||
</translations>
|
|
||||||
</concept_node>
|
|
||||||
<concept_node>
|
|
||||||
<name>restart_title</name>
|
|
||||||
<description/>
|
|
||||||
<comment/>
|
|
||||||
<translations>
|
|
||||||
<translation>
|
|
||||||
<language>en-US</language>
|
|
||||||
<approved>false</approved>
|
|
||||||
</translation>
|
|
||||||
<translation>
|
|
||||||
<language>fr-FR</language>
|
|
||||||
<approved>false</approved>
|
|
||||||
</translation>
|
|
||||||
</translations>
|
|
||||||
</concept_node>
|
|
||||||
<concept_node>
|
<concept_node>
|
||||||
<name>title</name>
|
<name>title</name>
|
||||||
<description/>
|
<description/>
|
||||||
|
|
|
@ -1,4 +1,8 @@
|
||||||
{
|
{
|
||||||
|
"confirmRestart.no": "Cancel",
|
||||||
|
"confirmRestart.text": "You're about to start a new run, is that really what you wanted ?",
|
||||||
|
"confirmRestart.title": "Start a new run ?",
|
||||||
|
"confirmRestart.yes": "Restart game",
|
||||||
"gameOver.cumulative_total": "Your total cumulative score went from {{startTs}} to {{endTs}}.",
|
"gameOver.cumulative_total": "Your total cumulative score went from {{startTs}} to {{endTs}}.",
|
||||||
"gameOver.lost.summary": "You dropped the ball after catching {{score}} coins.",
|
"gameOver.lost.summary": "You dropped the ball after catching {{score}} coins.",
|
||||||
"gameOver.lost.title": "Game Over",
|
"gameOver.lost.title": "Game Over",
|
||||||
|
@ -62,9 +66,6 @@
|
||||||
"main_menu.unlocks": "Starting perk",
|
"main_menu.unlocks": "Starting perk",
|
||||||
"main_menu.unlocks_help": "Try perks and levels you unlocked",
|
"main_menu.unlocks_help": "Try perks and levels you unlocked",
|
||||||
"play.close_modale_window_tooltip": "close ",
|
"play.close_modale_window_tooltip": "close ",
|
||||||
"play.confirm_restart": "You pressed [R], restart game now ? ",
|
|
||||||
"play.confirm_restart_no": "No",
|
|
||||||
"play.confirm_restart_yes": "Yes",
|
|
||||||
"play.current_lvl": "L{{level}}/{{max}}",
|
"play.current_lvl": "L{{level}}/{{max}}",
|
||||||
"play.menu_label": "menu",
|
"play.menu_label": "menu",
|
||||||
"play.missed_ball": "miss",
|
"play.missed_ball": "miss",
|
||||||
|
@ -84,10 +85,6 @@
|
||||||
"unlocks.greyed_out_help": "The greyed out ones can be unlocked by increasing your total score. The total score increases every time you score in game.",
|
"unlocks.greyed_out_help": "The greyed out ones can be unlocked by increasing your total score. The total score increases every time you score in game.",
|
||||||
"unlocks.intro": "Your total score is {{ts}}. Below are all the upgrades and levels the games has to offer.",
|
"unlocks.intro": "Your total score is {{ts}}. Below are all the upgrades and levels the games has to offer.",
|
||||||
"unlocks.level_description": "A {{size}}x{{size}} level with {{bricks}} bricks",
|
"unlocks.level_description": "A {{size}}x{{size}} level with {{bricks}} bricks",
|
||||||
"unlocks.restart_cancel": "Cancel",
|
|
||||||
"unlocks.restart_confirm": "Restart game to test item",
|
|
||||||
"unlocks.restart_text": "You're about to start a new run with the selected unlocked item, is that really what you wanted ?",
|
|
||||||
"unlocks.restart_title": "Restart run to try this item?",
|
|
||||||
"unlocks.title": "You unlocked {{percentUnlock}}% of the game.",
|
"unlocks.title": "You unlocked {{percentUnlock}}% of the game.",
|
||||||
"unlocks.unlocks_at": "Unlocks at total score {{threshold}}.",
|
"unlocks.unlocks_at": "Unlocks at total score {{threshold}}.",
|
||||||
"upgrades.ball_attract_ball.fullHelp": "Balls that are more than half a screen width away will start attracting each other. The attraction force is stronger when they are furthest away from each other.\n Rainbow particles will fly to symbolize the attraction force. This perk is only offered if you have more than one ball already.",
|
"upgrades.ball_attract_ball.fullHelp": "Balls that are more than half a screen width away will start attracting each other. The attraction force is stronger when they are furthest away from each other.\n Rainbow particles will fly to symbolize the attraction force. This perk is only offered if you have more than one ball already.",
|
||||||
|
|
|
@ -1,4 +1,8 @@
|
||||||
{
|
{
|
||||||
|
"confirmRestart.no": "Annuler ,continuer ma partie en cours",
|
||||||
|
"confirmRestart.text": "Vous êtes sur le point de commencer une nouvelle partie, est-ce vraiment ce que vous vouliez ?",
|
||||||
|
"confirmRestart.title": "Démarrer une nouvelle partie ?",
|
||||||
|
"confirmRestart.yes": "Commencer une nouvelle partie",
|
||||||
"gameOver.cumulative_total": "Votre score total cumulé est passé de {{startTs}} à {{endTs}}.",
|
"gameOver.cumulative_total": "Votre score total cumulé est passé de {{startTs}} à {{endTs}}.",
|
||||||
"gameOver.lost.summary": "Vous avez fait tomber la balle après avoir attrapé {{score}} pièces.",
|
"gameOver.lost.summary": "Vous avez fait tomber la balle après avoir attrapé {{score}} pièces.",
|
||||||
"gameOver.lost.title": "Balle perdue",
|
"gameOver.lost.title": "Balle perdue",
|
||||||
|
@ -59,12 +63,9 @@
|
||||||
"main_menu.sounds": "Sons du jeu",
|
"main_menu.sounds": "Sons du jeu",
|
||||||
"main_menu.sounds_help": "Ralentis certains téléphones.",
|
"main_menu.sounds_help": "Ralentis certains téléphones.",
|
||||||
"main_menu.title": "Breakout 71",
|
"main_menu.title": "Breakout 71",
|
||||||
"main_menu.unlocks": "Amélioration de départ",
|
"main_menu.unlocks": "Améliorations et niveaux",
|
||||||
"main_menu.unlocks_help": "Essayez les amélioration et les niveaux que vous avez débloqués",
|
"main_menu.unlocks_help": "Essayez les éléments débloqués",
|
||||||
"play.close_modale_window_tooltip": "Fermer",
|
"play.close_modale_window_tooltip": "Fermer",
|
||||||
"play.confirm_restart": "Vous avez appuyé sur [R], redémarrer une partie maintenant ?",
|
|
||||||
"play.confirm_restart_no": "Non",
|
|
||||||
"play.confirm_restart_yes": "Oui",
|
|
||||||
"play.current_lvl": "Niveau {{level}}/{{max}}",
|
"play.current_lvl": "Niveau {{level}}/{{max}}",
|
||||||
"play.menu_label": "Menu",
|
"play.menu_label": "Menu",
|
||||||
"play.missed_ball": "raté",
|
"play.missed_ball": "raté",
|
||||||
|
@ -84,10 +85,6 @@
|
||||||
"unlocks.greyed_out_help": "Les éléments grisées peuvent être débloquées en augmentant votre score total. Le score total augmente à chaque fois que vous marquez des points dans le jeu.",
|
"unlocks.greyed_out_help": "Les éléments grisées peuvent être débloquées en augmentant votre score total. Le score total augmente à chaque fois que vous marquez des points dans le jeu.",
|
||||||
"unlocks.intro": "Votre score total est de {{ts}}. Vous trouverez ci-dessous toutes les améliorations et tous les niveaux que le jeu peut offrir.",
|
"unlocks.intro": "Votre score total est de {{ts}}. Vous trouverez ci-dessous toutes les améliorations et tous les niveaux que le jeu peut offrir.",
|
||||||
"unlocks.level_description": "Un niveau {{size}}x{{size}} avec {{bricks}} briques",
|
"unlocks.level_description": "Un niveau {{size}}x{{size}} avec {{bricks}} briques",
|
||||||
"unlocks.restart_cancel": "Annuler ,continuer ma partie en cours",
|
|
||||||
"unlocks.restart_confirm": "Commencer une nouvelle partie",
|
|
||||||
"unlocks.restart_text": "Vous êtes sur le point de commencer une nouvelle partie avec l'amélioration ou niveau sélectionné, est-ce vraiment ce que vous vouliez ?",
|
|
||||||
"unlocks.restart_title": "Redémarrer la partie pour essayer cet élément ?",
|
|
||||||
"unlocks.title": "Vous avez débloqué {{percentUnlock}}% du jeu.",
|
"unlocks.title": "Vous avez débloqué {{percentUnlock}}% du jeu.",
|
||||||
"unlocks.unlocks_at": "Déverrouillé au score total {{threshold}}.",
|
"unlocks.unlocks_at": "Déverrouillé au score total {{threshold}}.",
|
||||||
"upgrades.ball_attract_ball.fullHelp": "Les balles qui sont éloignées de plus d'une demi-largeur d'écran commencent à s'attirer. La force d'attraction est plus forte lorsque les balles sont plus éloignées l'une de l'autre. Des particules arc-en-ciel voleront pour symboliser la force d'attraction. Cet avantage n'est offert que si vous avez déjà plus d'une balle en jeu.",
|
"upgrades.ball_attract_ball.fullHelp": "Les balles qui sont éloignées de plus d'une demi-largeur d'écran commencent à s'attirer. La force d'attraction est plus forte lorsque les balles sont plus éloignées l'une de l'autre. Des particules arc-en-ciel voleront pour symboliser la force d'attraction. Cet avantage n'est offert que si vous avez déjà plus d'une balle en jeu.",
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue