mirror of
https://gitlab.com/lecarore/breakout71.git
synced 2025-05-05 03:07:14 -04:00
wip
This commit is contained in:
parent
cee5c6bc60
commit
45f9b516fc
23 changed files with 1069 additions and 797 deletions
|
@ -396,6 +396,9 @@ Break colourful bricks, catch bouncing coins and select powerful upgrades !
|
||||||
|
|
||||||
## Easy perk ideas
|
## Easy perk ideas
|
||||||
|
|
||||||
|
- when the ball teleport, probability that it's duplicated instead
|
||||||
|
- combo resets on teleport
|
||||||
|
- combo resets when hitting puck without a teleport
|
||||||
- teleport ball to puck as soon as it hits something (% chance)
|
- teleport ball to puck as soon as it hits something (% chance)
|
||||||
- allow dropping balls that are about to miss.
|
- allow dropping balls that are about to miss.
|
||||||
- square coins : coins loose all horizontal momentum when hitting something.
|
- square coins : coins loose all horizontal momentum when hitting something.
|
||||||
|
@ -418,7 +421,6 @@ Break colourful bricks, catch bouncing coins and select powerful upgrades !
|
||||||
- [colin] golden corners - catch coins at the sides of the puck to double their value
|
- [colin] golden corners - catch coins at the sides of the puck to double their value
|
||||||
- [colin] varied diet - your combo grows by 2 when your ball changes color, but decreses by one when a brick is broken ?
|
- [colin] varied diet - your combo grows by 2 when your ball changes color, but decreses by one when a brick is broken ?
|
||||||
- [colin] trickle up - inverse of reach more or less
|
- [colin] trickle up - inverse of reach more or less
|
||||||
- Dividends — +1 combo per 10 coins lost (band-aid for players who struggle, useful addition when choosing Ascetism)
|
|
||||||
- +lvl combo per bricks / resets after 5/lvl seconds without explosion ?
|
- +lvl combo per bricks / resets after 5/lvl seconds without explosion ?
|
||||||
- +lvl combo per bricks / resets after 5/lvl seconds without coin catch ?
|
- +lvl combo per bricks / resets after 5/lvl seconds without coin catch ?
|
||||||
- +lvl combo per bricks / resets after 5/lvl seconds without ball color change ?
|
- +lvl combo per bricks / resets after 5/lvl seconds without ball color change ?
|
||||||
|
|
|
@ -29,8 +29,8 @@ android {
|
||||||
applicationId = "me.lecaro.breakout"
|
applicationId = "me.lecaro.breakout"
|
||||||
minSdk = 21
|
minSdk = 21
|
||||||
targetSdk = 34
|
targetSdk = 34
|
||||||
versionCode = 29099215
|
versionCode = 29100127
|
||||||
versionName = "29099215"
|
versionName = "29100127"
|
||||||
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
|
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
|
||||||
vectorDrawables {
|
vectorDrawables {
|
||||||
useSupportLibrary = true
|
useSupportLibrary = true
|
||||||
|
|
File diff suppressed because one or more lines are too long
217
dist/index.html
vendored
217
dist/index.html
vendored
File diff suppressed because one or more lines are too long
|
@ -1,5 +1,5 @@
|
||||||
// The version of the cache.
|
// The version of the cache.
|
||||||
const VERSION = "29099215";
|
const VERSION = "29100127";
|
||||||
|
|
||||||
// The name of the cache
|
// The name of the cache
|
||||||
const CACHE_NAME = `breakout-71-${VERSION}`;
|
const CACHE_NAME = `breakout-71-${VERSION}`;
|
||||||
|
|
|
@ -149,6 +149,12 @@
|
||||||
"bricks": "__________t__W_tt_WWW_t__W_ttt______",
|
"bricks": "__________t__W_tt_WWW_t__W_ttt______",
|
||||||
"credit": ""
|
"credit": ""
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "icon:extra_life",
|
||||||
|
"size": 8,
|
||||||
|
"bricks": "_________WW__WW_WGGWWGGWWGGGGGGWWGGGGGGW_WGGGGW___WGGW_____WW___",
|
||||||
|
"credit": ""
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "icon:forgiving",
|
"name": "icon:forgiving",
|
||||||
"size": 8,
|
"size": 8,
|
||||||
|
@ -167,6 +173,12 @@
|
||||||
"bricks": "__bbb___bbbbb_bbybybbbbbbbbbbbyyybbbbbbbbbbb_b_bb",
|
"bricks": "__bbb___bbbbb_bbybybbbbbbbbbbbyyybbbbbbbbbbb_b_bb",
|
||||||
"credit": ""
|
"credit": ""
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "icon:gold_medal",
|
||||||
|
"size": 10,
|
||||||
|
"bricks": "tttttttttttttttttttttt______ttttt____ttt_tttggttt___tgyygt____gyyyyg____gyyyyg_____gyyg_______gg____",
|
||||||
|
"credit": ""
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "icon:golden_goose",
|
"name": "icon:golden_goose",
|
||||||
"size": 8,
|
"size": 8,
|
||||||
|
@ -251,6 +263,12 @@
|
||||||
"bricks": "_ggg____gbgg___gbbgg__gbbbg__gbbgg__gbgg___ggg___",
|
"bricks": "_ggg____gbgg___gbbgg__gbbbg__gbbgg__gbgg___ggg___",
|
||||||
"credit": ""
|
"credit": ""
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "icon:no_medal",
|
||||||
|
"size": 10,
|
||||||
|
"bricks": "gggggggggggggggggggggg______ggggg____ggg_g_gggg_g___gg__gg____g____g____g____g_____g__g_______gg____",
|
||||||
|
"credit": ""
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "icon:one_more_choice",
|
"name": "icon:one_more_choice",
|
||||||
"size": 7,
|
"size": 7,
|
||||||
|
@ -377,6 +395,12 @@
|
||||||
"bricks": "________ttttr__ttttr__________W______________WWW_",
|
"bricks": "________ttttr__ttttr__________W______________WWW_",
|
||||||
"credit": ""
|
"credit": ""
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "icon:silver_medal",
|
||||||
|
"size": 10,
|
||||||
|
"bricks": "bbbbbbbbbbbbbbbbbbbbbb______bbbbb____bbb_bbbggbbb___bgllgb____gllllg____gllllg_____gllg_______gg____",
|
||||||
|
"credit": ""
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "icon:skip_last",
|
"name": "icon:skip_last",
|
||||||
"size": 5,
|
"size": 5,
|
||||||
|
@ -1446,17 +1470,9 @@
|
||||||
"credit": "White n black by Topenvy"
|
"credit": "White n black by Topenvy"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "icon:locked",
|
"name": "italy",
|
||||||
"size": 8,
|
|
||||||
"bricks": "__eeee____e__e____e__e____e__e___llllll__llllll__llllll__llllll_",
|
|
||||||
"svg": null,
|
|
||||||
"color": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"color": "#000000",
|
|
||||||
"size": 8,
|
"size": 8,
|
||||||
"bricks": "_________GGWWrr__GGWWrr__GGWWrr__GGWWrr_________________________",
|
"bricks": "_________GGWWrr__GGWWrr__GGWWrr__GGWWrr_________________________",
|
||||||
"name": "italy",
|
|
||||||
"credit": "italia by Topenvy"
|
"credit": "italia by Topenvy"
|
||||||
}
|
}
|
||||||
]
|
]
|
|
@ -1 +1 @@
|
||||||
"29099215"
|
"29100127"
|
||||||
|
|
|
@ -467,6 +467,7 @@ h2.histogram-title strong {
|
||||||
}
|
}
|
||||||
|
|
||||||
&.capped {
|
&.capped {
|
||||||
|
opacity: 0.5;
|
||||||
> span:first-child {
|
> span:first-child {
|
||||||
color: #fff;
|
color: #fff;
|
||||||
background: #000;
|
background: #000;
|
||||||
|
@ -501,24 +502,28 @@ h2.histogram-title strong {
|
||||||
|
|
||||||
button {
|
button {
|
||||||
color: #fff;
|
color: #fff;
|
||||||
background: gold;
|
|
||||||
align-self: flex-start;
|
|
||||||
font-weight: bold;
|
|
||||||
padding: 5px;
|
|
||||||
border-radius: 5px;
|
|
||||||
box-shadow:
|
|
||||||
0 4px 0 gold,
|
|
||||||
0 4px 10px black;
|
|
||||||
border: 2px solid white;
|
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
text-shadow: 0 0 4px rgba(0, 0, 0, 0.3);
|
text-shadow: 0 0 2px #185fa8;
|
||||||
user-select: none;
|
user-select: none;
|
||||||
|
background: linear-gradient(#5da3ea, #3e86ce);
|
||||||
|
border: 2px solid #fff;
|
||||||
|
border-radius: 5px;
|
||||||
|
align-self: flex-start;
|
||||||
|
padding: 5px;
|
||||||
|
font-weight: bold;
|
||||||
|
transition:
|
||||||
|
transform 0.2s,
|
||||||
|
box-shadow 0.2s;
|
||||||
|
box-shadow: 0 1px 0 black inset, 0 2px #5da3ea, 0 4px white;
|
||||||
|
&:hover{
|
||||||
|
|
||||||
|
background: #5da3ea;
|
||||||
|
}
|
||||||
&:active {
|
&:active {
|
||||||
transform: translate(0, 4px);
|
transform: translate(0, 4px);
|
||||||
box-shadow:
|
box-shadow: 0 1px 0 black inset, 0 0px #5da3ea, 0 0px white;
|
||||||
0 0px 0 gold,
|
|
||||||
0 0px 10px black;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
transition:
|
transition:
|
||||||
transform 0.2s,
|
transform 0.2s,
|
||||||
box-shadow 0.2s;
|
box-shadow 0.2s;
|
||||||
|
|
|
@ -1783,7 +1783,7 @@ export function ballTick(gameState: GameState, ball: Ball, frames: number) {
|
||||||
ball.vy > 0 &&
|
ball.vy > 0 &&
|
||||||
(ballIsUnderPuck ||
|
(ballIsUnderPuck ||
|
||||||
(gameState.balls.length < 2 &&
|
(gameState.balls.length < 2 &&
|
||||||
gameState.extra_lives &&
|
gameState.perks.extra_life &&
|
||||||
ball.y > ylimit + gameState.puckHeight / 2))
|
ball.y > ylimit + gameState.puckHeight / 2))
|
||||||
) {
|
) {
|
||||||
if (ballIsUnderPuck) {
|
if (ballIsUnderPuck) {
|
||||||
|
@ -2002,9 +2002,9 @@ export function ballTick(gameState: GameState, ball: Ball, frames: number) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function justLostALife(gameState: GameState, ball: Ball, x: number, y: number) {
|
function justLostALife(gameState: GameState, ball: Ball, x: number, y: number) {
|
||||||
gameState.extra_lives -= 1;
|
gameState.perks.extra_life -= 1;
|
||||||
if (gameState.extra_lives < 0) {
|
if (gameState.perks.extra_life < 0) {
|
||||||
gameState.extra_lives = 0;
|
gameState.perks.extra_life = 0;
|
||||||
} else if (gameState.perks.sacrifice) {
|
} else if (gameState.perks.sacrifice) {
|
||||||
gameState.combo *= gameState.perks.sacrifice;
|
gameState.combo *= gameState.perks.sacrifice;
|
||||||
gameState.bricks.forEach(
|
gameState.bricks.forEach(
|
||||||
|
|
|
@ -68,25 +68,26 @@
|
||||||
"lab.reset": "إعادة ضبط",
|
"lab.reset": "إعادة ضبط",
|
||||||
"lab.select_level": "حدد المستوى للعب عليه",
|
"lab.select_level": "حدد المستوى للعب عليه",
|
||||||
"lab.unlocks_at": "يتم فتحه عند إجمالي النتيجة {{score}}",
|
"lab.unlocks_at": "يتم فتحه عند إجمالي النتيجة {{score}}",
|
||||||
|
"level_up.add_perks": "",
|
||||||
|
"level_up.challenges.catchRateGood.description": "",
|
||||||
|
"level_up.challenges.catchRateGood.name": "",
|
||||||
|
"level_up.challenges.intro": "",
|
||||||
|
"level_up.challenges.levelMisses.description": "",
|
||||||
|
"level_up.challenges.levelMisses.name": "",
|
||||||
|
"level_up.challenges.levelTime.description": "",
|
||||||
|
"level_up.challenges.levelTime.name": "",
|
||||||
|
"level_up.challenges.levelWallBounces.description": "",
|
||||||
|
"level_up.challenges.levelWallBounces.name": "",
|
||||||
"level_up.go": "",
|
"level_up.go": "",
|
||||||
"level_up.instructions": "",
|
"level_up.go_with_upgrades": "",
|
||||||
|
"level_up.gold": "",
|
||||||
"level_up.maxed_upgrade": "",
|
"level_up.maxed_upgrade": "",
|
||||||
"level_up.missed.best": "",
|
"level_up.no": "",
|
||||||
"level_up.missed.catchRate.best": "",
|
|
||||||
"level_up.missed.catchRate.good": "",
|
|
||||||
"level_up.missed.good": "",
|
|
||||||
"level_up.missed.levelMisses.best": "",
|
|
||||||
"level_up.missed.levelMisses.good": "",
|
|
||||||
"level_up.missed.levelTime.best": "",
|
|
||||||
"level_up.missed.levelTime.good": "",
|
|
||||||
"level_up.missed.levelWallBounces.best": "",
|
|
||||||
"level_up.missed.levelWallBounces.good": "",
|
|
||||||
"level_up.no_points": "",
|
|
||||||
"level_up.pick": "",
|
"level_up.pick": "",
|
||||||
"level_up.pick_upgrade": "",
|
"level_up.silver": "",
|
||||||
"level_up.title": "لقد انتهيت للتو من المستوى {{level}}/{{max}}.",
|
"level_up.title": "لقد انتهيت للتو من المستوى {{level}}/{{max}}.",
|
||||||
"level_up.upgrade": "",
|
"level_up.upgrade": "",
|
||||||
"level_up.upgrade_perk_to_level": "",
|
"level_up.upgrade_perks": "",
|
||||||
"main_menu.basic": "",
|
"main_menu.basic": "",
|
||||||
"main_menu.basic_help": "",
|
"main_menu.basic_help": "",
|
||||||
"main_menu.colorful_coins": "",
|
"main_menu.colorful_coins": "",
|
||||||
|
@ -169,11 +170,12 @@
|
||||||
"play.stats.levelTime": "وقت المستوى",
|
"play.stats.levelTime": "وقت المستوى",
|
||||||
"play.stats.levelWallBounces": "ارتدادات الحائط",
|
"play.stats.levelWallBounces": "ارتدادات الحائط",
|
||||||
"score_panel.close_to_unlock": "فتح المستوى التالي:",
|
"score_panel.close_to_unlock": "فتح المستوى التالي:",
|
||||||
"score_panel.extra_lives_count": "",
|
|
||||||
"score_panel.get_upgrades_to_unlock": "احصل على {{missingUpgrades}} واحصل على {{points}} نقطة إضافية لفتح المستوى \"{{level}}\"",
|
"score_panel.get_upgrades_to_unlock": "احصل على {{missingUpgrades}} واحصل على {{points}} نقطة إضافية لفتح المستوى \"{{level}}\"",
|
||||||
"score_panel.score_to_unlock": "احصل على {{points}} نقطة إضافية لفتح المستوى \"{{level}}\"",
|
"score_panel.score_to_unlock": "احصل على {{points}} نقطة إضافية لفتح المستوى \"{{level}}\"",
|
||||||
"score_panel.title": "{{score}} نقطة في المستوى {{level}}/{{max}} ",
|
"score_panel.title": "{{score}} نقطة في المستوى {{level}}/{{max}} ",
|
||||||
"score_panel.upcoming_levels": "المستويات القادمة :",
|
"score_panel.upcoming_levels": "",
|
||||||
|
"score_panel.upgrade_point_count": "",
|
||||||
|
"score_panel.upgrade_points_count": "المستويات القادمة :",
|
||||||
"score_panel.upgrades_picked": "الترقيات التي تم اختيارها في هذه اللعبة:",
|
"score_panel.upgrades_picked": "الترقيات التي تم اختيارها في هذه اللعبة:",
|
||||||
"settings.autoplay": "التشغيل التلقائي",
|
"settings.autoplay": "التشغيل التلقائي",
|
||||||
"settings.autoplay_help": "ابدأ جلسة مع ترقيات عشوائية ومجداف يتم التحكم فيه بواسطة الكمبيوتر",
|
"settings.autoplay_help": "ابدأ جلسة مع ترقيات عشوائية ومجداف يتم التحكم فيه بواسطة الكمبيوتر",
|
||||||
|
@ -313,6 +315,9 @@
|
||||||
"upgrades.extra_levels.name": "5 دقائق إضافية",
|
"upgrades.extra_levels.name": "5 دقائق إضافية",
|
||||||
"upgrades.extra_levels.tooltip": "العب {{count}} مستوى بدلاً من 7",
|
"upgrades.extra_levels.tooltip": "العب {{count}} مستوى بدلاً من 7",
|
||||||
"upgrades.extra_levels.verbose_description": "يمكن أن تستمر اللعبة الافتراضية لسبعة مستويات كحد أقصى، تنتهي بعدها.\n\nيتيح لك كل مستوى من هذه الميزة الانتقال إلى مستوى أعلى. غالبًا ما تكون المستويات الأخيرة هي التي تحقق فيها أعلى النقاط، لذا قد يكون الفرق كبيرًا.",
|
"upgrades.extra_levels.verbose_description": "يمكن أن تستمر اللعبة الافتراضية لسبعة مستويات كحد أقصى، تنتهي بعدها.\n\nيتيح لك كل مستوى من هذه الميزة الانتقال إلى مستوى أعلى. غالبًا ما تكون المستويات الأخيرة هي التي تحقق فيها أعلى النقاط، لذا قد يكون الفرق كبيرًا.",
|
||||||
|
"upgrades.extra_life.name": "",
|
||||||
|
"upgrades.extra_life.tooltip": "",
|
||||||
|
"upgrades.extra_life.verbose_description": "",
|
||||||
"upgrades.forgiving.name": "غفور",
|
"upgrades.forgiving.name": "غفور",
|
||||||
"upgrades.forgiving.tooltip": "يؤدي فقدان الفواصل إلى تقليل المجموعة تدريجيًا بدلاً من تقليلها دفعة واحدة.",
|
"upgrades.forgiving.tooltip": "يؤدي فقدان الفواصل إلى تقليل المجموعة تدريجيًا بدلاً من تقليلها دفعة واحدة.",
|
||||||
"upgrades.forgiving.verbose_description": "أول خطأ في كل مستوى مجاني، ثم 10% من المجموعة، ثم 20% ..",
|
"upgrades.forgiving.verbose_description": "أول خطأ في كل مستوى مجاني، ثم 10% من المجموعة، ثم 20% ..",
|
||||||
|
|
1020
src/i18n/b71.babel
1020
src/i18n/b71.babel
File diff suppressed because it is too large
Load diff
|
@ -68,25 +68,26 @@
|
||||||
"lab.reset": "Zurücksetzen",
|
"lab.reset": "Zurücksetzen",
|
||||||
"lab.select_level": "Wähle ein Level zum Spielen",
|
"lab.select_level": "Wähle ein Level zum Spielen",
|
||||||
"lab.unlocks_at": "Wird bei Gesamtpunktzahl {{score}} freigeschaltet",
|
"lab.unlocks_at": "Wird bei Gesamtpunktzahl {{score}} freigeschaltet",
|
||||||
|
"level_up.add_perks": "",
|
||||||
|
"level_up.challenges.catchRateGood.description": "",
|
||||||
|
"level_up.challenges.catchRateGood.name": "",
|
||||||
|
"level_up.challenges.intro": "",
|
||||||
|
"level_up.challenges.levelMisses.description": "",
|
||||||
|
"level_up.challenges.levelMisses.name": "",
|
||||||
|
"level_up.challenges.levelTime.description": "",
|
||||||
|
"level_up.challenges.levelTime.name": "",
|
||||||
|
"level_up.challenges.levelWallBounces.description": "",
|
||||||
|
"level_up.challenges.levelWallBounces.name": "",
|
||||||
"level_up.go": "",
|
"level_up.go": "",
|
||||||
"level_up.instructions": "",
|
"level_up.go_with_upgrades": "",
|
||||||
|
"level_up.gold": "",
|
||||||
"level_up.maxed_upgrade": "",
|
"level_up.maxed_upgrade": "",
|
||||||
"level_up.missed.best": "",
|
"level_up.no": "",
|
||||||
"level_up.missed.catchRate.best": "",
|
|
||||||
"level_up.missed.catchRate.good": "",
|
|
||||||
"level_up.missed.good": "",
|
|
||||||
"level_up.missed.levelMisses.best": "",
|
|
||||||
"level_up.missed.levelMisses.good": "",
|
|
||||||
"level_up.missed.levelTime.best": "",
|
|
||||||
"level_up.missed.levelTime.good": "",
|
|
||||||
"level_up.missed.levelWallBounces.best": "",
|
|
||||||
"level_up.missed.levelWallBounces.good": "",
|
|
||||||
"level_up.no_points": "",
|
|
||||||
"level_up.pick": "",
|
"level_up.pick": "",
|
||||||
"level_up.pick_upgrade": "",
|
"level_up.silver": "",
|
||||||
"level_up.title": "Du hast gerade Level {{level}}/{{max}} beendet.",
|
"level_up.title": "Du hast gerade Level {{level}}/{{max}} beendet.",
|
||||||
"level_up.upgrade": "",
|
"level_up.upgrade": "",
|
||||||
"level_up.upgrade_perk_to_level": "",
|
"level_up.upgrade_perks": "",
|
||||||
"main_menu.basic": "",
|
"main_menu.basic": "",
|
||||||
"main_menu.basic_help": "",
|
"main_menu.basic_help": "",
|
||||||
"main_menu.colorful_coins": "",
|
"main_menu.colorful_coins": "",
|
||||||
|
@ -169,11 +170,12 @@
|
||||||
"play.stats.levelTime": "Zeit pro Level",
|
"play.stats.levelTime": "Zeit pro Level",
|
||||||
"play.stats.levelWallBounces": "Wandaufpralle",
|
"play.stats.levelWallBounces": "Wandaufpralle",
|
||||||
"score_panel.close_to_unlock": "Nächstes Level freischalten:",
|
"score_panel.close_to_unlock": "Nächstes Level freischalten:",
|
||||||
"score_panel.extra_lives_count": "",
|
|
||||||
"score_panel.get_upgrades_to_unlock": "Hole {{missingUpgrades}} und erziele {{points}} mehr Punkte, um Level \"{{level}}\" freizuschalten.",
|
"score_panel.get_upgrades_to_unlock": "Hole {{missingUpgrades}} und erziele {{points}} mehr Punkte, um Level \"{{level}}\" freizuschalten.",
|
||||||
"score_panel.score_to_unlock": "Erziele {{points}} mehr Punkte, um Level \"{{level}}\" freizuschalten.",
|
"score_panel.score_to_unlock": "Erziele {{points}} mehr Punkte, um Level \"{{level}}\" freizuschalten.",
|
||||||
"score_panel.title": "{{score}} Punkte in Level {{level}}/{{max}} ",
|
"score_panel.title": "{{score}} Punkte in Level {{level}}/{{max}} ",
|
||||||
"score_panel.upcoming_levels": "Kommende Level:",
|
"score_panel.upcoming_levels": "",
|
||||||
|
"score_panel.upgrade_point_count": "",
|
||||||
|
"score_panel.upgrade_points_count": "Kommende Level:",
|
||||||
"score_panel.upgrades_picked": "In diesem Spiel freigeschaltete Upgrades:",
|
"score_panel.upgrades_picked": "In diesem Spiel freigeschaltete Upgrades:",
|
||||||
"settings.autoplay": "Automatisch spielen",
|
"settings.autoplay": "Automatisch spielen",
|
||||||
"settings.autoplay_help": "Starte eine Sitzung mit zufälligen Upgrades und einem computergesteuerten Paddel",
|
"settings.autoplay_help": "Starte eine Sitzung mit zufälligen Upgrades und einem computergesteuerten Paddel",
|
||||||
|
@ -313,6 +315,9 @@
|
||||||
"upgrades.extra_levels.name": "5 min mehr",
|
"upgrades.extra_levels.name": "5 min mehr",
|
||||||
"upgrades.extra_levels.tooltip": "Spielen Sie {{count}} Stufen statt 7",
|
"upgrades.extra_levels.tooltip": "Spielen Sie {{count}} Stufen statt 7",
|
||||||
"upgrades.extra_levels.verbose_description": "Das Standardspiel kann maximal 7 Stufen dauern, danach ist das Spiel vorbei.\n\nMit jeder Stufe dieses Vorteils können Sie eine Stufe höher gehen. Die letzten Level sind oft diejenigen, in denen man die meisten Punkte macht, so dass der Unterschied dramatisch sein kann.",
|
"upgrades.extra_levels.verbose_description": "Das Standardspiel kann maximal 7 Stufen dauern, danach ist das Spiel vorbei.\n\nMit jeder Stufe dieses Vorteils können Sie eine Stufe höher gehen. Die letzten Level sind oft diejenigen, in denen man die meisten Punkte macht, so dass der Unterschied dramatisch sein kann.",
|
||||||
|
"upgrades.extra_life.name": "",
|
||||||
|
"upgrades.extra_life.tooltip": "",
|
||||||
|
"upgrades.extra_life.verbose_description": "",
|
||||||
"upgrades.forgiving.name": "Verzeihen",
|
"upgrades.forgiving.name": "Verzeihen",
|
||||||
"upgrades.forgiving.tooltip": "Durch fehlende Pausen wird die Kombo schrittweise reduziert, anstatt auf einmal.",
|
"upgrades.forgiving.tooltip": "Durch fehlende Pausen wird die Kombo schrittweise reduziert, anstatt auf einmal.",
|
||||||
"upgrades.forgiving.verbose_description": "Der erste Fehlschuss pro Level ist kostenlos, dann 10% der Combo, dann 20% ...",
|
"upgrades.forgiving.verbose_description": "Der erste Fehlschuss pro Level ist kostenlos, dann 10% der Combo, dann 20% ...",
|
||||||
|
|
|
@ -68,25 +68,26 @@
|
||||||
"lab.reset": "Reset",
|
"lab.reset": "Reset",
|
||||||
"lab.select_level": "Select a level to play on",
|
"lab.select_level": "Select a level to play on",
|
||||||
"lab.unlocks_at": "Unlocks at total score {{score}}",
|
"lab.unlocks_at": "Unlocks at total score {{score}}",
|
||||||
|
"level_up.add_perks": "Add perks to your build",
|
||||||
|
"level_up.challenges.catchRateGood.description": "You'll get a gold medal (+1 choices, +1 upgrade point) for catching {{gold}}% of coins. You'll get a silver medal (+1 upgrade point) if you catch {{silver}}%. This level you caught {{caught}} coins out of {{total}}",
|
||||||
|
"level_up.challenges.catchRateGood.name": "{{value}}% coins caught ",
|
||||||
|
"level_up.challenges.intro": "Play well to earn extra upgrades and choices",
|
||||||
|
"level_up.challenges.levelMisses.description": "You'll get a gold medal (+1 choices, +1 upgrade point) if you miss all bricks less than {{gold}} times. You'll get a silver medal (+1 upgrade point) under {{silver}} missed shots. ",
|
||||||
|
"level_up.challenges.levelMisses.name": "{{value}} missed shots",
|
||||||
|
"level_up.challenges.levelTime.description": "You'll get a gold medal (+1 choices, +1 upgrade point) if you clear the level under {{gold}}s . You'll get a silver medal (+1 upgrade point) under {{silver}}s. ",
|
||||||
|
"level_up.challenges.levelTime.name": "{{value}}s play time",
|
||||||
|
"level_up.challenges.levelWallBounces.description": "You'll get a gold medal (+1 choices, +1 upgrade point) if the ball bounces less than {{gold}} times on the wall and ceiling. You'll get a silver medal (+1 upgrade point) if if the ball bounces less than {{silver}} times. ",
|
||||||
|
"level_up.challenges.levelWallBounces.name": "{{value}} wall bounces",
|
||||||
"level_up.go": "Continue to level \"{{name}}\"",
|
"level_up.go": "Continue to level \"{{name}}\"",
|
||||||
"level_up.instructions": "You can use your {{count}} lives to buy upgrades below or keep them to be safe. ",
|
"level_up.go_with_upgrades": "Spend your {{count}} upgrade points first",
|
||||||
|
"level_up.gold": "You gained one choice and upgrade point.",
|
||||||
"level_up.maxed_upgrade": "\"{{name}}\" is at max level",
|
"level_up.maxed_upgrade": "\"{{name}}\" is at max level",
|
||||||
"level_up.missed.best": "Expert challenge",
|
"level_up.no": "You did not meet the reward condition.",
|
||||||
"level_up.missed.catchRate.best": "Catch {{target}}% of coins to gain one more choice.",
|
|
||||||
"level_up.missed.catchRate.good": "Catch {{target}}% of coins to gain one more life and choice.",
|
|
||||||
"level_up.missed.good": "Enthusiast challenge",
|
|
||||||
"level_up.missed.levelMisses.best": "Miss the bricks less than {{target}} times to gain one more choice.",
|
|
||||||
"level_up.missed.levelMisses.good": "Miss the bricks less than {{target}} times to gain one more life and choice.",
|
|
||||||
"level_up.missed.levelTime.best": "Clear the level in less than {{target}} seconds to gain one more choice.",
|
|
||||||
"level_up.missed.levelTime.good": "Clear the level in less than {{target}} seconds to gain one more life and choice.",
|
|
||||||
"level_up.missed.levelWallBounces.best": "Hit the walls less than {{target}} times to gain one more choice.",
|
|
||||||
"level_up.missed.levelWallBounces.good": "Hit the walls less than {{target}} times to gain one more life and choice.",
|
|
||||||
"level_up.no_points": "You've spent all your extra lives.",
|
|
||||||
"level_up.pick": "Pick",
|
"level_up.pick": "Pick",
|
||||||
"level_up.pick_upgrade": "Get \"{{name}}\"",
|
"level_up.silver": "You gained an upgrade point.",
|
||||||
"level_up.title": "Level {{level}}/{{max}} cleared",
|
"level_up.title": "Level {{level}}/{{max}} cleared",
|
||||||
"level_up.upgrade": "Upgrade",
|
"level_up.upgrade": "Upgrade",
|
||||||
"level_up.upgrade_perk_to_level": "Upgrade \"{{name}}\" to level {{level}}",
|
"level_up.upgrade_perks": "Your current perks",
|
||||||
"main_menu.basic": "",
|
"main_menu.basic": "",
|
||||||
"main_menu.basic_help": "",
|
"main_menu.basic_help": "",
|
||||||
"main_menu.colorful_coins": "",
|
"main_menu.colorful_coins": "",
|
||||||
|
@ -169,11 +170,12 @@
|
||||||
"play.stats.levelTime": "Level time",
|
"play.stats.levelTime": "Level time",
|
||||||
"play.stats.levelWallBounces": "Wall bounces",
|
"play.stats.levelWallBounces": "Wall bounces",
|
||||||
"score_panel.close_to_unlock": "Next level unlock :",
|
"score_panel.close_to_unlock": "Next level unlock :",
|
||||||
"score_panel.extra_lives_count": "You have accumulated {{count}} upgrade points.",
|
|
||||||
"score_panel.get_upgrades_to_unlock": "Get {{missingUpgrades}} and score {{points}} more points to unlock level \"{{level}}\"",
|
"score_panel.get_upgrades_to_unlock": "Get {{missingUpgrades}} and score {{points}} more points to unlock level \"{{level}}\"",
|
||||||
"score_panel.score_to_unlock": "Score {{points}} more points to unlock level \"{{level}}\"",
|
"score_panel.score_to_unlock": "Score {{points}} more points to unlock level \"{{level}}\"",
|
||||||
"score_panel.title": "{{score}} points at level {{level}}/{{max}} ",
|
"score_panel.title": "{{score}} points at level {{level}}/{{max}} ",
|
||||||
"score_panel.upcoming_levels": "Upcoming levels :",
|
"score_panel.upcoming_levels": "Upcoming levels",
|
||||||
|
"score_panel.upgrade_point_count": "You have accumulated {{count}} upgrade points.",
|
||||||
|
"score_panel.upgrade_points_count": "Upcoming levels :",
|
||||||
"score_panel.upgrades_picked": "Upgrades picked : ",
|
"score_panel.upgrades_picked": "Upgrades picked : ",
|
||||||
"settings.autoplay": "Auto play",
|
"settings.autoplay": "Auto play",
|
||||||
"settings.autoplay_help": "Start a session with random upgrades and a computer controlled paddle",
|
"settings.autoplay_help": "Start a session with random upgrades and a computer controlled paddle",
|
||||||
|
@ -313,6 +315,9 @@
|
||||||
"upgrades.extra_levels.name": "5 min more",
|
"upgrades.extra_levels.name": "5 min more",
|
||||||
"upgrades.extra_levels.tooltip": "Play {{count}} levels instead of 7",
|
"upgrades.extra_levels.tooltip": "Play {{count}} levels instead of 7",
|
||||||
"upgrades.extra_levels.verbose_description": "The default game can last a max of 7 levels, after which the game is over. \n\nEach level of this perk lets you go one level higher. The last levels are often the ones where you make the most score, so the difference can be dramatic.",
|
"upgrades.extra_levels.verbose_description": "The default game can last a max of 7 levels, after which the game is over. \n\nEach level of this perk lets you go one level higher. The last levels are often the ones where you make the most score, so the difference can be dramatic.",
|
||||||
|
"upgrades.extra_life.name": "Extra life",
|
||||||
|
"upgrades.extra_life.tooltip": "Saves your last ball if it's about to be lost",
|
||||||
|
"upgrades.extra_life.verbose_description": "The life will be consumed in the process. Extra lives show as while lines behind the puck.",
|
||||||
"upgrades.forgiving.name": "Forgiving",
|
"upgrades.forgiving.name": "Forgiving",
|
||||||
"upgrades.forgiving.tooltip": "Keep most of your combo when missing",
|
"upgrades.forgiving.tooltip": "Keep most of your combo when missing",
|
||||||
"upgrades.forgiving.verbose_description": "The first miss per level is free, then 10% of the combo, then 20% .. ",
|
"upgrades.forgiving.verbose_description": "The first miss per level is free, then 10% of the combo, then 20% .. ",
|
||||||
|
|
|
@ -68,25 +68,26 @@
|
||||||
"lab.reset": "Reiniciar",
|
"lab.reset": "Reiniciar",
|
||||||
"lab.select_level": "Selecciona un nivel para jugar",
|
"lab.select_level": "Selecciona un nivel para jugar",
|
||||||
"lab.unlocks_at": "Desbloqueado a partir de una puntuación total de {{score}}.",
|
"lab.unlocks_at": "Desbloqueado a partir de una puntuación total de {{score}}.",
|
||||||
|
"level_up.add_perks": "",
|
||||||
|
"level_up.challenges.catchRateGood.description": "",
|
||||||
|
"level_up.challenges.catchRateGood.name": "",
|
||||||
|
"level_up.challenges.intro": "",
|
||||||
|
"level_up.challenges.levelMisses.description": "",
|
||||||
|
"level_up.challenges.levelMisses.name": "",
|
||||||
|
"level_up.challenges.levelTime.description": "",
|
||||||
|
"level_up.challenges.levelTime.name": "",
|
||||||
|
"level_up.challenges.levelWallBounces.description": "",
|
||||||
|
"level_up.challenges.levelWallBounces.name": "",
|
||||||
"level_up.go": "",
|
"level_up.go": "",
|
||||||
"level_up.instructions": "",
|
"level_up.go_with_upgrades": "",
|
||||||
|
"level_up.gold": "",
|
||||||
"level_up.maxed_upgrade": "",
|
"level_up.maxed_upgrade": "",
|
||||||
"level_up.missed.best": "",
|
"level_up.no": "",
|
||||||
"level_up.missed.catchRate.best": "",
|
|
||||||
"level_up.missed.catchRate.good": "",
|
|
||||||
"level_up.missed.good": "",
|
|
||||||
"level_up.missed.levelMisses.best": "",
|
|
||||||
"level_up.missed.levelMisses.good": "",
|
|
||||||
"level_up.missed.levelTime.best": "",
|
|
||||||
"level_up.missed.levelTime.good": "",
|
|
||||||
"level_up.missed.levelWallBounces.best": "",
|
|
||||||
"level_up.missed.levelWallBounces.good": "",
|
|
||||||
"level_up.no_points": "",
|
|
||||||
"level_up.pick": "",
|
"level_up.pick": "",
|
||||||
"level_up.pick_upgrade": "",
|
"level_up.silver": "",
|
||||||
"level_up.title": "Acabas de completar el nivel {{level}}/{{max}}.",
|
"level_up.title": "Acabas de completar el nivel {{level}}/{{max}}.",
|
||||||
"level_up.upgrade": "",
|
"level_up.upgrade": "",
|
||||||
"level_up.upgrade_perk_to_level": "",
|
"level_up.upgrade_perks": "",
|
||||||
"main_menu.basic": "Gráficos simplificados",
|
"main_menu.basic": "Gráficos simplificados",
|
||||||
"main_menu.basic_help": "Mejor rendimiento.",
|
"main_menu.basic_help": "Mejor rendimiento.",
|
||||||
"main_menu.colorful_coins": "Piezas de color",
|
"main_menu.colorful_coins": "Piezas de color",
|
||||||
|
@ -169,11 +170,12 @@
|
||||||
"play.stats.levelTime": "Duración del nivel",
|
"play.stats.levelTime": "Duración del nivel",
|
||||||
"play.stats.levelWallBounces": "Rebota en las paredes",
|
"play.stats.levelWallBounces": "Rebota en las paredes",
|
||||||
"score_panel.close_to_unlock": "Siguiente nivel desbloqueado:",
|
"score_panel.close_to_unlock": "Siguiente nivel desbloqueado:",
|
||||||
"score_panel.extra_lives_count": "",
|
|
||||||
"score_panel.get_upgrades_to_unlock": "Consigue {{missingUpgrades}} y coge {{points}} monedas extra para desbloquear el nivel \"{{level}}\".",
|
"score_panel.get_upgrades_to_unlock": "Consigue {{missingUpgrades}} y coge {{points}} monedas extra para desbloquear el nivel \"{{level}}\".",
|
||||||
"score_panel.score_to_unlock": "Coge {{points}} monedas más para desbloquear el nivel \"{{level}}\".",
|
"score_panel.score_to_unlock": "Coge {{points}} monedas más para desbloquear el nivel \"{{level}}\".",
|
||||||
"score_panel.title": "{{score}} puntos en {{level}}/{{max}} nivel",
|
"score_panel.title": "{{score}} puntos en {{level}}/{{max}} nivel",
|
||||||
"score_panel.upcoming_levels": "Niveles de partido :",
|
"score_panel.upcoming_levels": "",
|
||||||
|
"score_panel.upgrade_point_count": "",
|
||||||
|
"score_panel.upgrade_points_count": "Niveles de partido :",
|
||||||
"score_panel.upgrades_picked": "Mejoras elegidas durante el juego :",
|
"score_panel.upgrades_picked": "Mejoras elegidas durante el juego :",
|
||||||
"settings.autoplay": "Auto-reproducción",
|
"settings.autoplay": "Auto-reproducción",
|
||||||
"settings.autoplay_help": "Comienza una sesión con mejoras aleatorias y una paleta controlada por computadora.",
|
"settings.autoplay_help": "Comienza una sesión con mejoras aleatorias y una paleta controlada por computadora.",
|
||||||
|
@ -313,6 +315,9 @@
|
||||||
"upgrades.extra_levels.name": "5 minutos más",
|
"upgrades.extra_levels.name": "5 minutos más",
|
||||||
"upgrades.extra_levels.tooltip": "Juega {{count}} niveles en lugar de 7",
|
"upgrades.extra_levels.tooltip": "Juega {{count}} niveles en lugar de 7",
|
||||||
"upgrades.extra_levels.verbose_description": "El juego suele durar 7 niveles, tras los cuales se acaba la partida y la puntuación que hayas alcanzado es tu puntuación del juego.\n\nElegir esta mejora te permite prolongar el juego un nivel. Los últimos niveles suelen ser en los que más puntos consigues, así que la diferencia puede ser espectacular.",
|
"upgrades.extra_levels.verbose_description": "El juego suele durar 7 niveles, tras los cuales se acaba la partida y la puntuación que hayas alcanzado es tu puntuación del juego.\n\nElegir esta mejora te permite prolongar el juego un nivel. Los últimos niveles suelen ser en los que más puntos consigues, así que la diferencia puede ser espectacular.",
|
||||||
|
"upgrades.extra_life.name": "",
|
||||||
|
"upgrades.extra_life.tooltip": "",
|
||||||
|
"upgrades.extra_life.verbose_description": "",
|
||||||
"upgrades.forgiving.name": "Errar es humano",
|
"upgrades.forgiving.name": "Errar es humano",
|
||||||
"upgrades.forgiving.tooltip": "Perder los ladrillos significa perder una porción progresivamente mayor del combo",
|
"upgrades.forgiving.tooltip": "Perder los ladrillos significa perder una porción progresivamente mayor del combo",
|
||||||
"upgrades.forgiving.verbose_description": " El primer ladrillo perdido por nivel no cuesta nada, el siguiente 10%, 20% y así sucesivamente.",
|
"upgrades.forgiving.verbose_description": " El primer ladrillo perdido por nivel no cuesta nada, el siguiente 10%, 20% y así sucesivamente.",
|
||||||
|
|
|
@ -68,25 +68,26 @@
|
||||||
"lab.reset": "Réinitialiser",
|
"lab.reset": "Réinitialiser",
|
||||||
"lab.select_level": "Sélectionnez un niveau sur lequel jouer",
|
"lab.select_level": "Sélectionnez un niveau sur lequel jouer",
|
||||||
"lab.unlocks_at": "Déverrouillé à partir d'un score total de {{score}}",
|
"lab.unlocks_at": "Déverrouillé à partir d'un score total de {{score}}",
|
||||||
|
"level_up.add_perks": "",
|
||||||
|
"level_up.challenges.catchRateGood.description": "",
|
||||||
|
"level_up.challenges.catchRateGood.name": "",
|
||||||
|
"level_up.challenges.intro": "",
|
||||||
|
"level_up.challenges.levelMisses.description": "",
|
||||||
|
"level_up.challenges.levelMisses.name": "",
|
||||||
|
"level_up.challenges.levelTime.description": "",
|
||||||
|
"level_up.challenges.levelTime.name": "",
|
||||||
|
"level_up.challenges.levelWallBounces.description": "",
|
||||||
|
"level_up.challenges.levelWallBounces.name": "",
|
||||||
"level_up.go": "",
|
"level_up.go": "",
|
||||||
"level_up.instructions": "",
|
"level_up.go_with_upgrades": "",
|
||||||
|
"level_up.gold": "",
|
||||||
"level_up.maxed_upgrade": "",
|
"level_up.maxed_upgrade": "",
|
||||||
"level_up.missed.best": "",
|
"level_up.no": "",
|
||||||
"level_up.missed.catchRate.best": "",
|
|
||||||
"level_up.missed.catchRate.good": "",
|
|
||||||
"level_up.missed.good": "",
|
|
||||||
"level_up.missed.levelMisses.best": "",
|
|
||||||
"level_up.missed.levelMisses.good": "",
|
|
||||||
"level_up.missed.levelTime.best": "",
|
|
||||||
"level_up.missed.levelTime.good": "",
|
|
||||||
"level_up.missed.levelWallBounces.best": "",
|
|
||||||
"level_up.missed.levelWallBounces.good": "",
|
|
||||||
"level_up.no_points": "",
|
|
||||||
"level_up.pick": "",
|
"level_up.pick": "",
|
||||||
"level_up.pick_upgrade": "",
|
"level_up.silver": "",
|
||||||
"level_up.title": "Vous venez de terminer le niveau {{level}}/{{max}}.",
|
"level_up.title": "Vous venez de terminer le niveau {{level}}/{{max}}.",
|
||||||
"level_up.upgrade": "",
|
"level_up.upgrade": "",
|
||||||
"level_up.upgrade_perk_to_level": "",
|
"level_up.upgrade_perks": "",
|
||||||
"main_menu.basic": "",
|
"main_menu.basic": "",
|
||||||
"main_menu.basic_help": "",
|
"main_menu.basic_help": "",
|
||||||
"main_menu.colorful_coins": "",
|
"main_menu.colorful_coins": "",
|
||||||
|
@ -169,11 +170,12 @@
|
||||||
"play.stats.levelTime": "Durée du niveau",
|
"play.stats.levelTime": "Durée du niveau",
|
||||||
"play.stats.levelWallBounces": "Rebonds sur les murs",
|
"play.stats.levelWallBounces": "Rebonds sur les murs",
|
||||||
"score_panel.close_to_unlock": "Prochain niveau débloqué : ",
|
"score_panel.close_to_unlock": "Prochain niveau débloqué : ",
|
||||||
"score_panel.extra_lives_count": "",
|
|
||||||
"score_panel.get_upgrades_to_unlock": "Obtenez {{missingUpgrades}} et attrapez {{points}} pièces supplémentaires pour débloquer le niveau « {{level}} »",
|
"score_panel.get_upgrades_to_unlock": "Obtenez {{missingUpgrades}} et attrapez {{points}} pièces supplémentaires pour débloquer le niveau « {{level}} »",
|
||||||
"score_panel.score_to_unlock": "Attrapez {{points}} pièces supplémentaires pour débloquer le niveau « {{level}} »",
|
"score_panel.score_to_unlock": "Attrapez {{points}} pièces supplémentaires pour débloquer le niveau « {{level}} »",
|
||||||
"score_panel.title": "{{score}} points au niveau {{level}}/{{max}} ",
|
"score_panel.title": "{{score}} points au niveau {{level}}/{{max}} ",
|
||||||
"score_panel.upcoming_levels": "Niveaux de la parties : ",
|
"score_panel.upcoming_levels": "",
|
||||||
|
"score_panel.upgrade_point_count": "",
|
||||||
|
"score_panel.upgrade_points_count": "Niveaux de la parties : ",
|
||||||
"score_panel.upgrades_picked": "Améliorations choisies :",
|
"score_panel.upgrades_picked": "Améliorations choisies :",
|
||||||
"settings.autoplay": "Lecture automatique",
|
"settings.autoplay": "Lecture automatique",
|
||||||
"settings.autoplay_help": "Démarrez une session avec des mises à niveau aléatoires et une pagaie contrôlée par ordinateur",
|
"settings.autoplay_help": "Démarrez une session avec des mises à niveau aléatoires et une pagaie contrôlée par ordinateur",
|
||||||
|
@ -313,6 +315,9 @@
|
||||||
"upgrades.extra_levels.name": "Encore 5 minutes",
|
"upgrades.extra_levels.name": "Encore 5 minutes",
|
||||||
"upgrades.extra_levels.tooltip": "Jouer {{count}} niveaux au lieu de 7",
|
"upgrades.extra_levels.tooltip": "Jouer {{count}} niveaux au lieu de 7",
|
||||||
"upgrades.extra_levels.verbose_description": "La partie dure normalement 7 niveaux, après quoi le jeu est terminé et le score que vous avez atteint est votre score de partie.\n\nChoisir cette amélioration vous permet de prolonger la partie d'un niveau. Les derniers niveaux sont souvent ceux où vous faites le plus de points, la différence peut donc être spectaculaire.",
|
"upgrades.extra_levels.verbose_description": "La partie dure normalement 7 niveaux, après quoi le jeu est terminé et le score que vous avez atteint est votre score de partie.\n\nChoisir cette amélioration vous permet de prolonger la partie d'un niveau. Les derniers niveaux sont souvent ceux où vous faites le plus de points, la différence peut donc être spectaculaire.",
|
||||||
|
"upgrades.extra_life.name": "",
|
||||||
|
"upgrades.extra_life.tooltip": "",
|
||||||
|
"upgrades.extra_life.verbose_description": "",
|
||||||
"upgrades.forgiving.name": "L'erreur est humaine",
|
"upgrades.forgiving.name": "L'erreur est humaine",
|
||||||
"upgrades.forgiving.tooltip": "Rater les briques fait perdre un portion progressivement plu importante du combo",
|
"upgrades.forgiving.tooltip": "Rater les briques fait perdre un portion progressivement plu importante du combo",
|
||||||
"upgrades.forgiving.verbose_description": " La première brique ratée par niveau ne coûte rien, la suivante 10%, 20%, etc.",
|
"upgrades.forgiving.verbose_description": " La première brique ratée par niveau ne coûte rien, la suivante 10%, 20%, etc.",
|
||||||
|
|
|
@ -68,25 +68,26 @@
|
||||||
"lab.reset": "Перезагрузить",
|
"lab.reset": "Перезагрузить",
|
||||||
"lab.select_level": "Выберите уровень для игры",
|
"lab.select_level": "Выберите уровень для игры",
|
||||||
"lab.unlocks_at": "Открывается при общем количестве очков {{score}}",
|
"lab.unlocks_at": "Открывается при общем количестве очков {{score}}",
|
||||||
|
"level_up.add_perks": "",
|
||||||
|
"level_up.challenges.catchRateGood.description": "",
|
||||||
|
"level_up.challenges.catchRateGood.name": "",
|
||||||
|
"level_up.challenges.intro": "",
|
||||||
|
"level_up.challenges.levelMisses.description": "",
|
||||||
|
"level_up.challenges.levelMisses.name": "",
|
||||||
|
"level_up.challenges.levelTime.description": "",
|
||||||
|
"level_up.challenges.levelTime.name": "",
|
||||||
|
"level_up.challenges.levelWallBounces.description": "",
|
||||||
|
"level_up.challenges.levelWallBounces.name": "",
|
||||||
"level_up.go": "",
|
"level_up.go": "",
|
||||||
"level_up.instructions": "",
|
"level_up.go_with_upgrades": "",
|
||||||
|
"level_up.gold": "",
|
||||||
"level_up.maxed_upgrade": "",
|
"level_up.maxed_upgrade": "",
|
||||||
"level_up.missed.best": "",
|
"level_up.no": "",
|
||||||
"level_up.missed.catchRate.best": "",
|
|
||||||
"level_up.missed.catchRate.good": "",
|
|
||||||
"level_up.missed.good": "",
|
|
||||||
"level_up.missed.levelMisses.best": "",
|
|
||||||
"level_up.missed.levelMisses.good": "",
|
|
||||||
"level_up.missed.levelTime.best": "",
|
|
||||||
"level_up.missed.levelTime.good": "",
|
|
||||||
"level_up.missed.levelWallBounces.best": "",
|
|
||||||
"level_up.missed.levelWallBounces.good": "",
|
|
||||||
"level_up.no_points": "",
|
|
||||||
"level_up.pick": "",
|
"level_up.pick": "",
|
||||||
"level_up.pick_upgrade": "",
|
"level_up.silver": "",
|
||||||
"level_up.title": "Вы только что закончили уровень {{level}}/{{max}}.",
|
"level_up.title": "Вы только что закончили уровень {{level}}/{{max}}.",
|
||||||
"level_up.upgrade": "",
|
"level_up.upgrade": "",
|
||||||
"level_up.upgrade_perk_to_level": "",
|
"level_up.upgrade_perks": "",
|
||||||
"main_menu.basic": "",
|
"main_menu.basic": "",
|
||||||
"main_menu.basic_help": "",
|
"main_menu.basic_help": "",
|
||||||
"main_menu.colorful_coins": "",
|
"main_menu.colorful_coins": "",
|
||||||
|
@ -169,11 +170,12 @@
|
||||||
"play.stats.levelTime": "Время уровня",
|
"play.stats.levelTime": "Время уровня",
|
||||||
"play.stats.levelWallBounces": "Отскоки от стены",
|
"play.stats.levelWallBounces": "Отскоки от стены",
|
||||||
"score_panel.close_to_unlock": "Разблокировка следующего уровня:",
|
"score_panel.close_to_unlock": "Разблокировка следующего уровня:",
|
||||||
"score_panel.extra_lives_count": "",
|
|
||||||
"score_panel.get_upgrades_to_unlock": "Наберите {{missingUpgrades}} и наберите {{points}} больше очков, чтобы разблокировать уровень \"{{level}}\"",
|
"score_panel.get_upgrades_to_unlock": "Наберите {{missingUpgrades}} и наберите {{points}} больше очков, чтобы разблокировать уровень \"{{level}}\"",
|
||||||
"score_panel.score_to_unlock": "Наберите {{points}} больше очков, чтобы разблокировать уровень \"{{level}}\"",
|
"score_panel.score_to_unlock": "Наберите {{points}} больше очков, чтобы разблокировать уровень \"{{level}}\"",
|
||||||
"score_panel.title": "{{score}} очков на уровне {{level}}/{{max}} ",
|
"score_panel.title": "{{score}} очков на уровне {{level}}/{{max}} ",
|
||||||
"score_panel.upcoming_levels": "Предстоящие уровни :",
|
"score_panel.upcoming_levels": "",
|
||||||
|
"score_panel.upgrade_point_count": "",
|
||||||
|
"score_panel.upgrade_points_count": "Предстоящие уровни :",
|
||||||
"score_panel.upgrades_picked": "Обновления, выбранные в этой игре, запускаются :",
|
"score_panel.upgrades_picked": "Обновления, выбранные в этой игре, запускаются :",
|
||||||
"settings.autoplay": "Автоматическое воспроизведение",
|
"settings.autoplay": "Автоматическое воспроизведение",
|
||||||
"settings.autoplay_help": "Начните сеанс со случайными улучшениями и компьютерным веслом",
|
"settings.autoplay_help": "Начните сеанс со случайными улучшениями и компьютерным веслом",
|
||||||
|
@ -313,6 +315,9 @@
|
||||||
"upgrades.extra_levels.name": "Еще 5 минут",
|
"upgrades.extra_levels.name": "Еще 5 минут",
|
||||||
"upgrades.extra_levels.tooltip": "Играйте {{count}} уровней вместо 7",
|
"upgrades.extra_levels.tooltip": "Играйте {{count}} уровней вместо 7",
|
||||||
"upgrades.extra_levels.verbose_description": "По умолчанию игра может длиться максимум 7 уровней, после чего игра заканчивается.\n\nКаждый уровень этой привилегии позволяет вам подняться на один уровень выше. Последние уровни часто являются теми, где вы набираете больше всего очков, так что разница может быть значительной.",
|
"upgrades.extra_levels.verbose_description": "По умолчанию игра может длиться максимум 7 уровней, после чего игра заканчивается.\n\nКаждый уровень этой привилегии позволяет вам подняться на один уровень выше. Последние уровни часто являются теми, где вы набираете больше всего очков, так что разница может быть значительной.",
|
||||||
|
"upgrades.extra_life.name": "",
|
||||||
|
"upgrades.extra_life.tooltip": "",
|
||||||
|
"upgrades.extra_life.verbose_description": "",
|
||||||
"upgrades.forgiving.name": "Прощение",
|
"upgrades.forgiving.name": "Прощение",
|
||||||
"upgrades.forgiving.tooltip": "Пропущенные паузы уменьшают комбо постепенно, а не все сразу.",
|
"upgrades.forgiving.tooltip": "Пропущенные паузы уменьшают комбо постепенно, а не все сразу.",
|
||||||
"upgrades.forgiving.verbose_description": "Первый промах за уровень - бесплатно, затем 10% от комбо, затем 20%.",
|
"upgrades.forgiving.verbose_description": "Первый промах за уровень - бесплатно, затем 10% от комбо, затем 20%.",
|
||||||
|
|
|
@ -68,25 +68,26 @@
|
||||||
"lab.reset": "Sıfırla",
|
"lab.reset": "Sıfırla",
|
||||||
"lab.select_level": "Oynamak için bir seviye seçin",
|
"lab.select_level": "Oynamak için bir seviye seçin",
|
||||||
"lab.unlocks_at": "Toplam puan {{score}}olduğunda açılır",
|
"lab.unlocks_at": "Toplam puan {{score}}olduğunda açılır",
|
||||||
|
"level_up.add_perks": "",
|
||||||
|
"level_up.challenges.catchRateGood.description": "",
|
||||||
|
"level_up.challenges.catchRateGood.name": "",
|
||||||
|
"level_up.challenges.intro": "",
|
||||||
|
"level_up.challenges.levelMisses.description": "",
|
||||||
|
"level_up.challenges.levelMisses.name": "",
|
||||||
|
"level_up.challenges.levelTime.description": "",
|
||||||
|
"level_up.challenges.levelTime.name": "",
|
||||||
|
"level_up.challenges.levelWallBounces.description": "",
|
||||||
|
"level_up.challenges.levelWallBounces.name": "",
|
||||||
"level_up.go": "",
|
"level_up.go": "",
|
||||||
"level_up.instructions": "",
|
"level_up.go_with_upgrades": "",
|
||||||
|
"level_up.gold": "",
|
||||||
"level_up.maxed_upgrade": "",
|
"level_up.maxed_upgrade": "",
|
||||||
"level_up.missed.best": "",
|
"level_up.no": "",
|
||||||
"level_up.missed.catchRate.best": "",
|
|
||||||
"level_up.missed.catchRate.good": "",
|
|
||||||
"level_up.missed.good": "",
|
|
||||||
"level_up.missed.levelMisses.best": "",
|
|
||||||
"level_up.missed.levelMisses.good": "",
|
|
||||||
"level_up.missed.levelTime.best": "",
|
|
||||||
"level_up.missed.levelTime.good": "",
|
|
||||||
"level_up.missed.levelWallBounces.best": "",
|
|
||||||
"level_up.missed.levelWallBounces.good": "",
|
|
||||||
"level_up.no_points": "",
|
|
||||||
"level_up.pick": "",
|
"level_up.pick": "",
|
||||||
"level_up.pick_upgrade": "",
|
"level_up.silver": "",
|
||||||
"level_up.title": " {{level}}/{{max}}seviyesini yeni bitirdiniz.",
|
"level_up.title": " {{level}}/{{max}}seviyesini yeni bitirdiniz.",
|
||||||
"level_up.upgrade": "",
|
"level_up.upgrade": "",
|
||||||
"level_up.upgrade_perk_to_level": "",
|
"level_up.upgrade_perks": "",
|
||||||
"main_menu.basic": "",
|
"main_menu.basic": "",
|
||||||
"main_menu.basic_help": "",
|
"main_menu.basic_help": "",
|
||||||
"main_menu.colorful_coins": "",
|
"main_menu.colorful_coins": "",
|
||||||
|
@ -169,11 +170,12 @@
|
||||||
"play.stats.levelTime": "Seviye zamanı",
|
"play.stats.levelTime": "Seviye zamanı",
|
||||||
"play.stats.levelWallBounces": "Duvar sıçramaları",
|
"play.stats.levelWallBounces": "Duvar sıçramaları",
|
||||||
"score_panel.close_to_unlock": "Sonraki seviyenin kilidini aç:",
|
"score_panel.close_to_unlock": "Sonraki seviyenin kilidini aç:",
|
||||||
"score_panel.extra_lives_count": "",
|
|
||||||
"score_panel.get_upgrades_to_unlock": " {{missingUpgrades}} alın ve \"{{level}}\" seviyesinin kilidini açmak için {{points}} puan daha kazanın",
|
"score_panel.get_upgrades_to_unlock": " {{missingUpgrades}} alın ve \"{{level}}\" seviyesinin kilidini açmak için {{points}} puan daha kazanın",
|
||||||
"score_panel.score_to_unlock": "\"{{level}}\" seviyesini açmak için {{points}} puan daha kazanın",
|
"score_panel.score_to_unlock": "\"{{level}}\" seviyesini açmak için {{points}} puan daha kazanın",
|
||||||
"score_panel.title": " {{level}}/{{max}} seviyesinde{{score}} puan",
|
"score_panel.title": " {{level}}/{{max}} seviyesinde{{score}} puan",
|
||||||
"score_panel.upcoming_levels": "Yaklaşan seviyeler :",
|
"score_panel.upcoming_levels": "",
|
||||||
|
"score_panel.upgrade_point_count": "",
|
||||||
|
"score_panel.upgrade_points_count": "Yaklaşan seviyeler :",
|
||||||
"score_panel.upgrades_picked": "Bu oyun çalışmasında seçilen yükseltmeler:",
|
"score_panel.upgrades_picked": "Bu oyun çalışmasında seçilen yükseltmeler:",
|
||||||
"settings.autoplay": "Otomatik oynatma",
|
"settings.autoplay": "Otomatik oynatma",
|
||||||
"settings.autoplay_help": "Rastgele yükseltmeler ve bilgisayar kontrollü bir kürekle bir oturum başlatın",
|
"settings.autoplay_help": "Rastgele yükseltmeler ve bilgisayar kontrollü bir kürekle bir oturum başlatın",
|
||||||
|
@ -313,6 +315,9 @@
|
||||||
"upgrades.extra_levels.name": "5 dakika daha",
|
"upgrades.extra_levels.name": "5 dakika daha",
|
||||||
"upgrades.extra_levels.tooltip": "7 yerine {{count}} seviye oyna",
|
"upgrades.extra_levels.tooltip": "7 yerine {{count}} seviye oyna",
|
||||||
"upgrades.extra_levels.verbose_description": "Varsayılan oyun en fazla 7 seviye sürebilir, ardından oyun biter. \n\nBu avantajın her seviyesi bir seviye daha yukarı çıkmanızı sağlar. Son seviyeler genellikle en fazla puanı aldığınız seviyelerdir, bu yüzden fark dramatik olabilir.",
|
"upgrades.extra_levels.verbose_description": "Varsayılan oyun en fazla 7 seviye sürebilir, ardından oyun biter. \n\nBu avantajın her seviyesi bir seviye daha yukarı çıkmanızı sağlar. Son seviyeler genellikle en fazla puanı aldığınız seviyelerdir, bu yüzden fark dramatik olabilir.",
|
||||||
|
"upgrades.extra_life.name": "",
|
||||||
|
"upgrades.extra_life.tooltip": "",
|
||||||
|
"upgrades.extra_life.verbose_description": "",
|
||||||
"upgrades.forgiving.name": "Bağışlayıcı",
|
"upgrades.forgiving.name": "Bağışlayıcı",
|
||||||
"upgrades.forgiving.tooltip": "Molaları kaçırmak, komboyu bir kerede azaltmak yerine kademeli olarak azaltır.",
|
"upgrades.forgiving.tooltip": "Molaları kaçırmak, komboyu bir kerede azaltmak yerine kademeli olarak azaltır.",
|
||||||
"upgrades.forgiving.verbose_description": "Her seviyede ilk ıskalama bedava, sonra kombonun %10'u, sonra %20'si...",
|
"upgrades.forgiving.verbose_description": "Her seviyede ilk ıskalama bedava, sonra kombonun %10'u, sonra %20'si...",
|
||||||
|
|
|
@ -144,7 +144,7 @@ export function newGameState(params: RunParams): GameState {
|
||||||
needsRender: true,
|
needsRender: true,
|
||||||
autoCleanUses: 0,
|
autoCleanUses: 0,
|
||||||
...defaultSounds(),
|
...defaultSounds(),
|
||||||
extra_lives: 0,
|
upgrade_points: 0,
|
||||||
creative:
|
creative:
|
||||||
params?.computer_controlled ||
|
params?.computer_controlled ||
|
||||||
sumOfValues(params.perks) > 1 ||
|
sumOfValues(params.perks) > 1 ||
|
||||||
|
|
|
@ -28,8 +28,10 @@ export async function openScorePanel(gameState: GameState) {
|
||||||
pickedUpgradesHTMl(gameState),
|
pickedUpgradesHTMl(gameState),
|
||||||
levelsListHTMl(gameState, gameState.currentLevel),
|
levelsListHTMl(gameState, gameState.currentLevel),
|
||||||
getNearestUnlockHTML(gameState),
|
getNearestUnlockHTML(gameState),
|
||||||
gameState.extra_lives
|
gameState.upgrade_points
|
||||||
? t("score_panel.extra_lives_count", { count: gameState.extra_lives })
|
? t("score_panel.upgrade_point_count", {
|
||||||
|
count: gameState.upgrade_points,
|
||||||
|
})
|
||||||
: "",
|
: "",
|
||||||
],
|
],
|
||||||
allowClose: true,
|
allowClose: true,
|
||||||
|
@ -90,7 +92,7 @@ export function getNearestUnlockHTML(gameState: GameState) {
|
||||||
|
|
||||||
return `
|
return `
|
||||||
<p>${t("score_panel.close_to_unlock")}</p>
|
<p>${t("score_panel.close_to_unlock")}</p>
|
||||||
<div class="upgrade used">
|
<div class="upgrade">
|
||||||
${icons[firstUnlockable.l.name]}
|
${icons[firstUnlockable.l.name]}
|
||||||
<p>
|
<p>
|
||||||
<strong>${title}</strong>
|
<strong>${title}</strong>
|
||||||
|
|
|
@ -11,7 +11,7 @@ import {
|
||||||
} from "./pure_functions";
|
} from "./pure_functions";
|
||||||
import { t } from "./i18n/i18n";
|
import { t } from "./i18n/i18n";
|
||||||
import { icons, upgrades } from "./loadGameData";
|
import { icons, upgrades } from "./loadGameData";
|
||||||
import { asyncAlert } from "./asyncAlert";
|
import { asyncAlert, requiredAsyncAlert } from "./asyncAlert";
|
||||||
import {
|
import {
|
||||||
escapeAttribute,
|
escapeAttribute,
|
||||||
getPossibleUpgrades,
|
getPossibleUpgrades,
|
||||||
|
@ -26,100 +26,82 @@ export async function openUpgradesPicker(gameState: GameState) {
|
||||||
gameState.levelCoughtCoins / (gameState.levelSpawnedCoins || 1);
|
gameState.levelCoughtCoins / (gameState.levelSpawnedCoins || 1);
|
||||||
|
|
||||||
let choices = 3;
|
let choices = 3;
|
||||||
let livesWon = 1;
|
let upgradesWon = 1;
|
||||||
let missedOpportunities = [];
|
let medals = [];
|
||||||
const good = ""; // '<strong>'+t('level_up.missed.good')+'</strong>: '
|
function challengeResult(
|
||||||
const best = ""; //'<strong>'+t('level_up.missed.best')+'</strong>: '
|
name: String,
|
||||||
|
description: String,
|
||||||
if (gameState.levelWallBounces < wallBouncedGood) {
|
medal: "gold" | "silver" | "no",
|
||||||
choices++;
|
) {
|
||||||
livesWon++;
|
if (medal === "gold") {
|
||||||
} else {
|
choices++;
|
||||||
missedOpportunities.push(
|
upgradesWon++;
|
||||||
good +
|
}
|
||||||
t("level_up.missed.levelWallBounces.good", {
|
if (medal === "silver") {
|
||||||
target: wallBouncedGood,
|
upgradesWon++;
|
||||||
}),
|
}
|
||||||
);
|
medals.push(`<div class="upgrade" data-tooltip="${escapeAttribute(description)}">
|
||||||
}
|
${icons["icon:" + medal + "_medal"]}
|
||||||
if (gameState.levelWallBounces < wallBouncedBest) {
|
<p>
|
||||||
choices++;
|
<strong>${name}</strong><br/>
|
||||||
} else {
|
${{gold:t('level_up.gold'),silver:t('level_up.silver'),no:t('level_up.no'),}[medal] }
|
||||||
missedOpportunities.push(
|
</p>
|
||||||
best +
|
</div>`);
|
||||||
t("level_up.missed.levelWallBounces.best", {
|
|
||||||
target: wallBouncedBest,
|
|
||||||
}),
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (gameState.levelTime < levelTimeGood * 1000) {
|
challengeResult(
|
||||||
choices++;
|
t("level_up.challenges.levelWallBounces.name", {
|
||||||
livesWon++;
|
value: gameState.levelWallBounces,
|
||||||
} else {
|
}),
|
||||||
missedOpportunities.push(
|
t("level_up.challenges.levelWallBounces.description", {
|
||||||
good +
|
silver: wallBouncedGood,
|
||||||
t("level_up.missed.levelTime.good", {
|
gold: wallBouncedBest,
|
||||||
target: levelTimeGood,
|
}),
|
||||||
}),
|
(gameState.levelWallBounces < wallBouncedBest && "gold") ||
|
||||||
);
|
(gameState.levelWallBounces < wallBouncedGood && "silver") ||
|
||||||
}
|
"no",
|
||||||
if (gameState.levelTime < levelTimeBest * 1000) {
|
);
|
||||||
choices++;
|
|
||||||
} else {
|
|
||||||
missedOpportunities.push(
|
|
||||||
best +
|
|
||||||
t("level_up.missed.levelTime.best", {
|
|
||||||
target: levelTimeBest,
|
|
||||||
}),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (catchRate > catchRateGood / 100) {
|
challengeResult(
|
||||||
choices++;
|
t("level_up.challenges.levelTime.name", {
|
||||||
livesWon++;
|
value: Math.ceil(gameState.levelTime / 1000),
|
||||||
} else {
|
}),
|
||||||
missedOpportunities.push(
|
t("level_up.challenges.levelTime.description", {
|
||||||
good +
|
silver: levelTimeGood,
|
||||||
t("level_up.missed.catchRate.good", {
|
gold: levelTimeBest,
|
||||||
target: catchRateGood,
|
}),
|
||||||
}),
|
(gameState.levelTime < levelTimeBest * 1000 && "gold") ||
|
||||||
);
|
(gameState.levelTime < levelTimeGood * 1000 && "silver") ||
|
||||||
}
|
"no",
|
||||||
if (catchRate > catchRateBest / 100) {
|
);
|
||||||
choices++;
|
|
||||||
} else {
|
|
||||||
missedOpportunities.push(
|
|
||||||
best +
|
|
||||||
t("level_up.missed.catchRate.best", {
|
|
||||||
target: catchRateBest,
|
|
||||||
}),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (gameState.levelMisses < missesGood) {
|
challengeResult(
|
||||||
choices++;
|
t("level_up.challenges.catchRateGood.name", {
|
||||||
livesWon++;
|
value: Math.floor(catchRate * 100),
|
||||||
} else {
|
}),
|
||||||
missedOpportunities.push(
|
t("level_up.challenges.catchRateGood.description", {
|
||||||
good +
|
silver: catchRateGood,
|
||||||
t("level_up.missed.levelMisses.good", {
|
gold: catchRateBest,
|
||||||
target: missesGood,
|
caught: gameState.levelCoughtCoins,
|
||||||
}),
|
total: gameState.levelSpawnedCoins,
|
||||||
);
|
}),
|
||||||
}
|
(catchRate > catchRateBest / 100 && "gold") ||
|
||||||
if (gameState.levelMisses < missesBest) {
|
(catchRate > catchRateGood / 100 && "silver") ||
|
||||||
choices++;
|
"no",
|
||||||
} else {
|
);
|
||||||
missedOpportunities.push(
|
|
||||||
best +
|
|
||||||
t("level_up.missed.levelMisses.best", {
|
|
||||||
target: missesBest,
|
|
||||||
}),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
gameState.extra_lives += livesWon;
|
challengeResult(
|
||||||
|
t("level_up.challenges.levelMisses.name", { value: gameState.levelMisses }),
|
||||||
|
t("level_up.challenges.levelMisses.description", {
|
||||||
|
silver: missesGood,
|
||||||
|
gold: missesBest,
|
||||||
|
}),
|
||||||
|
(gameState.levelMisses < missesBest && "gold") ||
|
||||||
|
(gameState.levelMisses < missesGood && "silver") ||
|
||||||
|
"no",
|
||||||
|
);
|
||||||
|
|
||||||
|
gameState.upgrade_points += upgradesWon;
|
||||||
|
|
||||||
let offered: PerkId[] = getPossibleUpgrades(gameState)
|
let offered: PerkId[] = getPossibleUpgrades(gameState)
|
||||||
.map((u) => ({
|
.map((u) => ({
|
||||||
|
@ -150,60 +132,68 @@ export async function openUpgradesPicker(gameState: GameState) {
|
||||||
dontOfferTooSoon(gameState, u.id);
|
dontOfferTooSoon(gameState, u.id);
|
||||||
});
|
});
|
||||||
|
|
||||||
const upgradeId = await asyncAlert<PerkId | null>({
|
const actions = list.map((u) => {
|
||||||
|
const max = u.max + gameState.perks.limitless;
|
||||||
|
const lvl = gameState.perks[u.id];
|
||||||
|
|
||||||
|
const button =
|
||||||
|
!gameState.upgrade_points || gameState.perks[u.id] >= max
|
||||||
|
? ""
|
||||||
|
: ` <button data-resolve-to="${u.id}">${
|
||||||
|
lvl ? t("level_up.upgrade") : t("level_up.pick")
|
||||||
|
}</button>`;
|
||||||
|
|
||||||
|
const lvlInfo = lvl ? upgradeLevelAndMaxDisplay(u, gameState) : "";
|
||||||
|
const help =u.help(Math.max(1, lvl))
|
||||||
|
|
||||||
|
return {
|
||||||
|
u,button,
|
||||||
|
html: `<div class="upgrade choice ${
|
||||||
|
(!lvl && gameState.upgrade_points && " ") ||
|
||||||
|
(lvl && "used") ||
|
||||||
|
"greyed-out"
|
||||||
|
}" >
|
||||||
|
${icons["icon:" + u.id]}
|
||||||
|
<p data-tooltip="${escapeAttribute(lvl ? help: u.fullHelp(Math.max(1, lvl)))}">
|
||||||
|
<strong>${u.name}</strong> ${lvlInfo}
|
||||||
|
${lvl ? '':help}
|
||||||
|
</p>
|
||||||
|
${button}
|
||||||
|
</div>`,
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
|
const forcePick = gameState.upgrade_points>0 && !!actions.find(a=>a.button!=='')
|
||||||
|
|
||||||
|
const upgradeId = await requiredAsyncAlert<PerkId | null>({
|
||||||
title: t("level_up.title", {
|
title: t("level_up.title", {
|
||||||
level: gameState.currentLevel,
|
level: gameState.currentLevel,
|
||||||
max: max_levels(gameState),
|
max: max_levels(gameState),
|
||||||
}),
|
}),
|
||||||
content: [
|
content: [
|
||||||
{
|
{
|
||||||
|
disabled:forcePick,
|
||||||
text: t("level_up.go", { name: gameState.level.name }),
|
text: t("level_up.go", { name: gameState.level.name }),
|
||||||
|
help: forcePick
|
||||||
|
? t("level_up.go_with_upgrades", {
|
||||||
|
count: gameState.upgrade_points,
|
||||||
|
})
|
||||||
|
: "",
|
||||||
icon: icons[gameState.level.name],
|
icon: icons[gameState.level.name],
|
||||||
value: null,
|
value: null,
|
||||||
},
|
},
|
||||||
|
|
||||||
gameState.extra_lives
|
t("level_up.upgrade_perks"),
|
||||||
? `<p>${t("level_up.instructions", {
|
|
||||||
count: gameState.extra_lives,
|
|
||||||
gain: livesWon,
|
|
||||||
})}</p>`
|
|
||||||
: `<p>${t("level_up.no_points")}</p>`,
|
|
||||||
...list.map((u) => {
|
|
||||||
const max = u.max + gameState.perks.limitless;
|
|
||||||
const lvl = gameState.perks[u.id];
|
|
||||||
|
|
||||||
const button =
|
...actions.filter((a) => gameState.perks[a.u.id]).map((a) => a.html),
|
||||||
!gameState.extra_lives || gameState.perks[u.id] >= max
|
|
||||||
? ""
|
|
||||||
: ` <button data-resolve-to="${u.id}">${
|
|
||||||
lvl ? t("level_up.upgrade") : t("level_up.pick")
|
|
||||||
}</button>`;
|
|
||||||
|
|
||||||
const lvlInfo = lvl ? upgradeLevelAndMaxDisplay(u, gameState) : "";
|
t("level_up.add_perks"),
|
||||||
return `<div class="upgrade choice ${
|
...actions.filter((a) => !gameState.perks[a.u.id]).map((a) => a.html),
|
||||||
(!lvl && gameState.extra_lives && "free") ||
|
|
||||||
(lvl && "used") ||
|
t("level_up.challenges.intro"),
|
||||||
"greyed-out"
|
...medals,
|
||||||
}" >
|
|
||||||
${icons["icon:" + u.id]}
|
|
||||||
<p data-tooltip="${escapeAttribute(u.fullHelp(Math.max(1, lvl)))}">
|
|
||||||
<strong>${u.name}</strong> ${lvlInfo}
|
|
||||||
${u.help(Math.max(1, lvl))}
|
|
||||||
</p>
|
|
||||||
${button}
|
|
||||||
</div>`;
|
|
||||||
}),
|
|
||||||
...missedOpportunities.map(
|
|
||||||
(reason) =>
|
|
||||||
`<div class="upgrade choice greyed-out" >
|
|
||||||
${icons["icon:locked"]}
|
|
||||||
<p>
|
|
||||||
${reason}
|
|
||||||
</p>
|
|
||||||
</div>`,
|
|
||||||
),
|
|
||||||
levelsListHTMl(gameState, gameState.currentLevel),
|
|
||||||
getNearestUnlockHTML(gameState),
|
getNearestUnlockHTML(gameState),
|
||||||
|
levelsListHTMl(gameState, gameState.currentLevel),
|
||||||
`<div id="level-recording-container"></div>`,
|
`<div id="level-recording-container"></div>`,
|
||||||
],
|
],
|
||||||
});
|
});
|
||||||
|
@ -211,7 +201,7 @@ export async function openUpgradesPicker(gameState: GameState) {
|
||||||
if (upgradeId) {
|
if (upgradeId) {
|
||||||
gameState.perks[upgradeId]++;
|
gameState.perks[upgradeId]++;
|
||||||
gameState.runStatistics.upgrades_picked++;
|
gameState.runStatistics.upgrades_picked++;
|
||||||
gameState.extra_lives--;
|
gameState.upgrade_points--;
|
||||||
} else {
|
} else {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -368,11 +368,11 @@ export function render(gameState: GameState) {
|
||||||
});
|
});
|
||||||
//
|
//
|
||||||
startWork("render:extra_life");
|
startWork("render:extra_life");
|
||||||
if (gameState.extra_lives) {
|
if (gameState.perks.extra_life) {
|
||||||
ctx.globalAlpha = gameState.balls.length > 1 ? 0.2 : 1;
|
ctx.globalAlpha = gameState.balls.length > 1 ? 0.2 : 1;
|
||||||
ctx.globalCompositeOperation = "source-over";
|
ctx.globalCompositeOperation = "source-over";
|
||||||
ctx.fillStyle = gameState.puckColor;
|
ctx.fillStyle = gameState.puckColor;
|
||||||
for (let i = 0; i < gameState.extra_lives; i++) {
|
for (let i = 0; i < gameState.perks.extra_life; i++) {
|
||||||
ctx.fillRect(
|
ctx.fillRect(
|
||||||
gameState.offsetXRoundedDown,
|
gameState.offsetXRoundedDown,
|
||||||
gameState.gameZoneHeight - gameState.puckHeight / 2 + 2 * i,
|
gameState.gameZoneHeight - gameState.puckHeight / 2 + 2 * i,
|
||||||
|
|
2
src/types.d.ts
vendored
2
src/types.d.ts
vendored
|
@ -280,7 +280,7 @@ export type GameState = {
|
||||||
plouf: { vol: number; x: number };
|
plouf: { vol: number; x: number };
|
||||||
colorChange: { vol: number; x: number };
|
colorChange: { vol: number; x: number };
|
||||||
};
|
};
|
||||||
extra_lives: number;
|
upgrade_points: number;
|
||||||
creative: boolean;
|
creative: boolean;
|
||||||
startParams: RunParams;
|
startParams: RunParams;
|
||||||
};
|
};
|
||||||
|
|
|
@ -31,6 +31,19 @@ export const rawUpgrades = [
|
||||||
fullHelp: (lvl: number) =>
|
fullHelp: (lvl: number) =>
|
||||||
t("upgrades.slow_down.verbose_description", { lvl }),
|
t("upgrades.slow_down.verbose_description", { lvl }),
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
category: categories.beginner,
|
||||||
|
requires: "",
|
||||||
|
threshold: 0,
|
||||||
|
gift: false,
|
||||||
|
id: "extra_life",
|
||||||
|
max: 7,
|
||||||
|
name: t("upgrades.extra_life.name"),
|
||||||
|
help: (lvl: number) => t("upgrades.extra_life.tooltip"),
|
||||||
|
fullHelp: (lvl: number) =>
|
||||||
|
t("upgrades.extra_life.verbose_description", { lvl }),
|
||||||
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
category: categories.beginner,
|
category: categories.beginner,
|
||||||
requires: "",
|
requires: "",
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue