2025-03-16 17:45:29 +01:00
|
|
|
import { t } from "./i18n/i18n";
|
2025-03-29 21:22:19 +01:00
|
|
|
|
|
|
|
import {comboKeepingRate} from "./pure_functions";
|
2025-03-15 21:29:38 +01:00
|
|
|
|
2025-03-06 16:46:25 +01:00
|
|
|
export const rawUpgrades = [
|
|
|
|
{
|
|
|
|
requires: "",
|
2025-03-28 10:21:14 +01:00
|
|
|
|
2025-03-06 16:46:25 +01:00
|
|
|
threshold: 0,
|
2025-03-06 14:06:02 +01:00
|
|
|
giftable: false,
|
2025-03-06 16:46:25 +01:00
|
|
|
id: "extra_life",
|
2025-03-19 21:58:08 +01:00
|
|
|
max: 3,
|
2025-03-16 17:45:29 +01:00
|
|
|
name: t("upgrades.extra_life.name"),
|
|
|
|
help: (lvl: number) =>
|
|
|
|
lvl === 1
|
|
|
|
? t("upgrades.extra_life.help")
|
|
|
|
: t("upgrades.extra_life.help_plural", { lvl }),
|
|
|
|
fullHelp: t("upgrades.extra_life.fullHelp"),
|
2025-03-06 16:46:25 +01:00
|
|
|
},
|
|
|
|
{
|
|
|
|
requires: "",
|
2025-03-28 10:21:14 +01:00
|
|
|
|
2025-03-06 16:46:25 +01:00
|
|
|
threshold: 0,
|
|
|
|
id: "streak_shots",
|
|
|
|
giftable: true,
|
|
|
|
max: 1,
|
2025-03-16 17:45:29 +01:00
|
|
|
name: t("upgrades.streak_shots.name"),
|
|
|
|
help: (lvl: number) => t("upgrades.streak_shots.help", { lvl }),
|
|
|
|
fullHelp: t("upgrades.streak_shots.fullHelp"),
|
2025-03-06 16:46:25 +01:00
|
|
|
},
|
2025-03-06 14:06:02 +01:00
|
|
|
|
2025-03-06 16:46:25 +01:00
|
|
|
{
|
|
|
|
requires: "",
|
2025-03-28 10:21:14 +01:00
|
|
|
|
2025-03-06 16:46:25 +01:00
|
|
|
threshold: 0,
|
|
|
|
id: "base_combo",
|
|
|
|
giftable: true,
|
|
|
|
max: 7,
|
2025-03-16 17:45:29 +01:00
|
|
|
name: t("upgrades.base_combo.name"),
|
|
|
|
help: (lvl: number) =>
|
|
|
|
t("upgrades.base_combo.help", { coins: 1 + lvl * 3 }),
|
|
|
|
fullHelp: t("upgrades.base_combo.fullHelp"),
|
2025-03-06 16:46:25 +01:00
|
|
|
},
|
|
|
|
{
|
|
|
|
requires: "",
|
2025-03-28 10:21:14 +01:00
|
|
|
|
2025-03-06 16:46:25 +01:00
|
|
|
threshold: 0,
|
|
|
|
giftable: false,
|
|
|
|
id: "slow_down",
|
|
|
|
max: 2,
|
2025-03-16 17:45:29 +01:00
|
|
|
name: t("upgrades.slow_down.name"),
|
2025-03-29 11:24:45 +01:00
|
|
|
help: (lvl:number) => t("upgrades.slow_down.help",{ lvl }),
|
2025-03-16 17:45:29 +01:00
|
|
|
fullHelp: t("upgrades.slow_down.fullHelp"),
|
2025-03-06 16:46:25 +01:00
|
|
|
},
|
|
|
|
{
|
|
|
|
requires: "",
|
2025-03-28 10:21:14 +01:00
|
|
|
|
2025-03-06 16:46:25 +01:00
|
|
|
threshold: 0,
|
|
|
|
giftable: false,
|
|
|
|
id: "bigger_puck",
|
|
|
|
max: 2,
|
2025-03-16 17:45:29 +01:00
|
|
|
name: t("upgrades.bigger_puck.name"),
|
|
|
|
help: () => t("upgrades.bigger_puck.help"),
|
|
|
|
fullHelp: t("upgrades.bigger_puck.fullHelp"),
|
2025-03-06 16:46:25 +01:00
|
|
|
},
|
|
|
|
{
|
|
|
|
requires: "",
|
2025-03-28 10:21:14 +01:00
|
|
|
|
2025-03-06 16:46:25 +01:00
|
|
|
threshold: 0,
|
|
|
|
giftable: false,
|
|
|
|
id: "viscosity",
|
|
|
|
max: 3,
|
2025-03-06 14:06:02 +01:00
|
|
|
|
2025-03-16 17:45:29 +01:00
|
|
|
name: t("upgrades.viscosity.name"),
|
|
|
|
help: () => t("upgrades.viscosity.help"),
|
|
|
|
fullHelp: t("upgrades.viscosity.fullHelp"),
|
2025-03-06 16:46:25 +01:00
|
|
|
},
|
|
|
|
{
|
|
|
|
requires: "",
|
2025-03-28 10:21:14 +01:00
|
|
|
|
2025-03-06 16:46:25 +01:00
|
|
|
threshold: 0,
|
2025-03-07 20:18:18 +01:00
|
|
|
id: "left_is_lava",
|
2025-03-06 16:46:25 +01:00
|
|
|
giftable: true,
|
|
|
|
max: 1,
|
2025-03-06 14:06:02 +01:00
|
|
|
|
2025-03-16 17:45:29 +01:00
|
|
|
name: t("upgrades.left_is_lava.name"),
|
2025-03-29 11:24:45 +01:00
|
|
|
help: (lvl:number) => t("upgrades.left_is_lava.help",{ lvl }),
|
2025-03-16 17:45:29 +01:00
|
|
|
fullHelp: t("upgrades.left_is_lava.fullHelp"),
|
2025-03-07 20:18:18 +01:00
|
|
|
},
|
|
|
|
{
|
|
|
|
requires: "",
|
2025-03-28 10:21:14 +01:00
|
|
|
|
2025-03-07 20:18:18 +01:00
|
|
|
threshold: 0,
|
|
|
|
id: "right_is_lava",
|
|
|
|
giftable: true,
|
|
|
|
max: 1,
|
2025-03-16 17:45:29 +01:00
|
|
|
name: t("upgrades.right_is_lava.name"),
|
2025-03-29 11:24:45 +01:00
|
|
|
help: (lvl:number) => t("upgrades.right_is_lava.help",{ lvl }),
|
2025-03-16 17:45:29 +01:00
|
|
|
fullHelp: t("upgrades.right_is_lava.fullHelp"),
|
2025-03-06 16:46:25 +01:00
|
|
|
},
|
|
|
|
{
|
|
|
|
requires: "",
|
2025-03-28 10:21:14 +01:00
|
|
|
|
2025-03-06 16:46:25 +01:00
|
|
|
threshold: 0,
|
|
|
|
id: "top_is_lava",
|
|
|
|
giftable: true,
|
|
|
|
max: 1,
|
2025-03-16 17:45:29 +01:00
|
|
|
name: t("upgrades.top_is_lava.name"),
|
2025-03-29 11:24:45 +01:00
|
|
|
help: (lvl:number) => t("upgrades.top_is_lava.help",{ lvl }),
|
2025-03-16 17:45:29 +01:00
|
|
|
fullHelp: t("upgrades.top_is_lava.fullHelp"),
|
2025-03-06 16:46:25 +01:00
|
|
|
},
|
|
|
|
{
|
|
|
|
requires: "",
|
2025-03-28 10:21:14 +01:00
|
|
|
|
2025-03-06 16:46:25 +01:00
|
|
|
threshold: 0,
|
|
|
|
giftable: false,
|
|
|
|
id: "skip_last",
|
|
|
|
max: 7,
|
2025-03-16 17:45:29 +01:00
|
|
|
name: t("upgrades.skip_last.name"),
|
|
|
|
help: (lvl: number) =>
|
|
|
|
lvl == 1
|
|
|
|
? t("upgrades.skip_last.help")
|
|
|
|
: t("upgrades.skip_last.help_plural", { lvl }),
|
|
|
|
fullHelp: t("upgrades.skip_last.fullHelp"),
|
2025-03-06 16:46:25 +01:00
|
|
|
},
|
|
|
|
{
|
|
|
|
requires: "",
|
2025-03-28 10:21:14 +01:00
|
|
|
|
2025-03-06 16:46:25 +01:00
|
|
|
threshold: 500,
|
|
|
|
id: "telekinesis",
|
2025-03-28 10:21:14 +01:00
|
|
|
giftable: false,
|
2025-03-06 16:46:25 +01:00
|
|
|
max: 2,
|
2025-03-16 17:45:29 +01:00
|
|
|
name: t("upgrades.telekinesis.name"),
|
|
|
|
help: (lvl: number) =>
|
|
|
|
lvl == 1
|
|
|
|
? t("upgrades.telekinesis.help")
|
|
|
|
: t("upgrades.telekinesis.help_plural"),
|
|
|
|
fullHelp: t("upgrades.telekinesis.fullHelp"),
|
2025-03-06 16:46:25 +01:00
|
|
|
},
|
|
|
|
{
|
|
|
|
requires: "",
|
2025-03-28 10:21:14 +01:00
|
|
|
|
2025-03-06 16:46:25 +01:00
|
|
|
threshold: 1000,
|
|
|
|
giftable: false,
|
|
|
|
id: "coin_magnet",
|
|
|
|
max: 3,
|
2025-03-16 17:45:29 +01:00
|
|
|
name: t("upgrades.coin_magnet.name"),
|
|
|
|
help: (lvl: number) =>
|
|
|
|
lvl == 1
|
|
|
|
? t("upgrades.coin_magnet.help")
|
|
|
|
: t("upgrades.coin_magnet.help_plural"),
|
|
|
|
fullHelp: t("upgrades.coin_magnet.fullHelp"),
|
2025-03-06 16:46:25 +01:00
|
|
|
},
|
|
|
|
{
|
|
|
|
requires: "",
|
2025-03-28 10:21:14 +01:00
|
|
|
|
2025-03-06 16:46:25 +01:00
|
|
|
threshold: 1500,
|
|
|
|
id: "multiball",
|
2025-03-28 10:21:14 +01:00
|
|
|
giftable: false,
|
2025-03-06 16:46:25 +01:00
|
|
|
max: 6,
|
2025-03-16 17:45:29 +01:00
|
|
|
name: t("upgrades.multiball.name"),
|
|
|
|
help: (lvl: number) => t("upgrades.multiball.help", { count: lvl + 1 }),
|
|
|
|
fullHelp: t("upgrades.multiball.fullHelp"),
|
2025-03-06 16:46:25 +01:00
|
|
|
},
|
|
|
|
{
|
|
|
|
requires: "",
|
2025-03-28 10:21:14 +01:00
|
|
|
|
2025-03-06 16:46:25 +01:00
|
|
|
threshold: 2000,
|
|
|
|
giftable: false,
|
|
|
|
id: "smaller_puck",
|
|
|
|
max: 2,
|
2025-03-16 17:45:29 +01:00
|
|
|
name: t("upgrades.smaller_puck.name"),
|
|
|
|
help: (lvl: number) =>
|
|
|
|
lvl == 1
|
|
|
|
? t("upgrades.smaller_puck.help")
|
|
|
|
: t("upgrades.smaller_puck.help_plural"),
|
|
|
|
fullHelp: t("upgrades.smaller_puck.fullHelp"),
|
2025-03-06 16:46:25 +01:00
|
|
|
},
|
|
|
|
{
|
|
|
|
requires: "",
|
2025-03-28 10:21:14 +01:00
|
|
|
|
2025-03-06 16:46:25 +01:00
|
|
|
threshold: 3000,
|
|
|
|
id: "pierce",
|
2025-03-28 10:21:14 +01:00
|
|
|
giftable: false,
|
2025-03-06 16:46:25 +01:00
|
|
|
max: 3,
|
2025-03-16 17:45:29 +01:00
|
|
|
name: t("upgrades.pierce.name"),
|
|
|
|
help: (lvl: number) => t("upgrades.pierce.help", { count: 3 * lvl }),
|
|
|
|
fullHelp: t("upgrades.pierce.fullHelp"),
|
2025-03-06 16:46:25 +01:00
|
|
|
},
|
|
|
|
{
|
|
|
|
requires: "",
|
2025-03-28 10:21:14 +01:00
|
|
|
|
2025-03-06 16:46:25 +01:00
|
|
|
threshold: 4000,
|
|
|
|
id: "picky_eater",
|
|
|
|
giftable: true,
|
|
|
|
max: 1,
|
2025-03-16 17:45:29 +01:00
|
|
|
name: t("upgrades.picky_eater.name"),
|
2025-03-29 11:24:45 +01:00
|
|
|
help: (lvl: number) => t("upgrades.picky_eater.help",{lvl}),
|
2025-03-16 17:45:29 +01:00
|
|
|
fullHelp: t("upgrades.picky_eater.fullHelp"),
|
2025-03-06 16:46:25 +01:00
|
|
|
},
|
|
|
|
{
|
|
|
|
requires: "",
|
2025-03-28 10:21:14 +01:00
|
|
|
|
2025-03-06 16:46:25 +01:00
|
|
|
threshold: 5000,
|
|
|
|
giftable: false,
|
|
|
|
id: "metamorphosis",
|
|
|
|
max: 1,
|
2025-03-16 17:45:29 +01:00
|
|
|
name: t("upgrades.metamorphosis.name"),
|
2025-03-29 11:24:45 +01:00
|
|
|
help: (lvl: number) => t("upgrades.metamorphosis.help",{lvl}),
|
2025-03-16 17:45:29 +01:00
|
|
|
fullHelp: t("upgrades.metamorphosis.fullHelp"),
|
2025-03-06 16:46:25 +01:00
|
|
|
},
|
|
|
|
{
|
|
|
|
requires: "",
|
2025-03-28 10:21:14 +01:00
|
|
|
|
2025-03-06 16:46:25 +01:00
|
|
|
threshold: 6000,
|
|
|
|
id: "compound_interest",
|
|
|
|
giftable: true,
|
2025-03-07 11:34:11 +01:00
|
|
|
max: 1,
|
2025-03-16 17:45:29 +01:00
|
|
|
name: t("upgrades.compound_interest.name"),
|
2025-03-29 11:24:45 +01:00
|
|
|
help: (lvl: number) => t("upgrades.compound_interest.help",{lvl}),
|
2025-03-16 17:45:29 +01:00
|
|
|
fullHelp: t("upgrades.compound_interest.fullHelp"),
|
2025-03-06 16:46:25 +01:00
|
|
|
},
|
|
|
|
{
|
|
|
|
requires: "",
|
|
|
|
threshold: 7000,
|
|
|
|
id: "hot_start",
|
|
|
|
giftable: true,
|
|
|
|
max: 3,
|
2025-03-16 17:45:29 +01:00
|
|
|
name: t("upgrades.hot_start.name"),
|
|
|
|
help: (lvl: number) =>
|
|
|
|
t("upgrades.hot_start.help", {
|
|
|
|
start: lvl * 15 + 1,
|
|
|
|
lvl,
|
|
|
|
}),
|
|
|
|
fullHelp: t("upgrades.hot_start.fullHelp"),
|
2025-03-06 16:46:25 +01:00
|
|
|
},
|
|
|
|
{
|
|
|
|
requires: "",
|
2025-03-28 10:21:14 +01:00
|
|
|
|
2025-03-06 16:46:25 +01:00
|
|
|
threshold: 9000,
|
|
|
|
id: "sapper",
|
2025-03-28 10:21:14 +01:00
|
|
|
giftable: false,
|
2025-03-06 16:46:25 +01:00
|
|
|
max: 7,
|
2025-03-16 17:45:29 +01:00
|
|
|
name: t("upgrades.sapper.name"),
|
|
|
|
help: (lvl: number) =>
|
|
|
|
lvl == 1
|
|
|
|
? t("upgrades.sapper.help")
|
|
|
|
: t("upgrades.sapper.help_plural", { lvl }),
|
|
|
|
fullHelp: t("upgrades.sapper.fullHelp"),
|
2025-03-06 16:46:25 +01:00
|
|
|
},
|
|
|
|
{
|
|
|
|
requires: "",
|
2025-03-28 10:21:14 +01:00
|
|
|
|
2025-03-06 16:46:25 +01:00
|
|
|
threshold: 11000,
|
|
|
|
id: "bigger_explosions",
|
|
|
|
giftable: false,
|
2025-03-15 21:29:38 +01:00
|
|
|
max: 1,
|
2025-03-16 17:45:29 +01:00
|
|
|
name: t("upgrades.bigger_explosions.name"),
|
|
|
|
help: (lvl: number) => t("upgrades.bigger_explosions.help"),
|
|
|
|
fullHelp: t("upgrades.bigger_explosions.fullHelp"),
|
2025-03-06 16:46:25 +01:00
|
|
|
},
|
|
|
|
{
|
|
|
|
requires: "",
|
2025-03-28 10:21:14 +01:00
|
|
|
|
2025-03-06 16:46:25 +01:00
|
|
|
threshold: 13000,
|
|
|
|
giftable: false,
|
2025-03-27 10:52:31 +01:00
|
|
|
adventure: false,
|
2025-03-06 16:46:25 +01:00
|
|
|
id: "extra_levels",
|
|
|
|
max: 3,
|
2025-03-16 17:45:29 +01:00
|
|
|
name: t("upgrades.extra_levels.name"),
|
|
|
|
help: (lvl: number) => t("upgrades.extra_levels.help", { count: lvl + 7 }),
|
|
|
|
fullHelp: t("upgrades.extra_levels.fullHelp"),
|
2025-03-06 16:46:25 +01:00
|
|
|
},
|
|
|
|
{
|
|
|
|
requires: "",
|
2025-03-28 10:21:14 +01:00
|
|
|
|
2025-03-06 16:46:25 +01:00
|
|
|
threshold: 15000,
|
|
|
|
giftable: false,
|
|
|
|
id: "pierce_color",
|
2025-03-23 19:11:01 +01:00
|
|
|
max: 4,
|
2025-03-16 17:45:29 +01:00
|
|
|
name: t("upgrades.pierce_color.name"),
|
2025-03-23 22:19:28 +01:00
|
|
|
help: (lvl: number) => t("upgrades.pierce_color.help", { lvl }),
|
2025-03-16 17:45:29 +01:00
|
|
|
fullHelp: t("upgrades.pierce_color.fullHelp"),
|
2025-03-06 16:46:25 +01:00
|
|
|
},
|
|
|
|
{
|
|
|
|
requires: "",
|
|
|
|
threshold: 18000,
|
|
|
|
giftable: false,
|
|
|
|
id: "soft_reset",
|
2025-03-29 11:24:45 +01:00
|
|
|
max: 3,
|
2025-03-16 17:45:29 +01:00
|
|
|
name: t("upgrades.soft_reset.name"),
|
2025-03-29 11:24:45 +01:00
|
|
|
help: (lvl: number) => t("upgrades.soft_reset.help", { percent: Math.round(comboKeepingRate(lvl) * 100)}),
|
2025-03-16 17:45:29 +01:00
|
|
|
fullHelp: t("upgrades.soft_reset.fullHelp"),
|
2025-03-06 16:46:25 +01:00
|
|
|
},
|
|
|
|
{
|
|
|
|
requires: "multiball",
|
|
|
|
threshold: 21000,
|
|
|
|
giftable: false,
|
|
|
|
id: "ball_repulse_ball",
|
|
|
|
max: 3,
|
2025-03-16 17:45:29 +01:00
|
|
|
name: t("upgrades.ball_repulse_ball.name"),
|
|
|
|
help: (lvl: number) =>
|
|
|
|
lvl == 1
|
|
|
|
? t("upgrades.ball_repulse_ball.help")
|
|
|
|
: t("upgrades.ball_repulse_ball.help_plural"),
|
|
|
|
fullHelp: t("upgrades.ball_repulse_ball.fullHelp"),
|
2025-03-06 16:46:25 +01:00
|
|
|
},
|
|
|
|
{
|
|
|
|
requires: "multiball",
|
|
|
|
threshold: 25000,
|
|
|
|
giftable: false,
|
|
|
|
id: "ball_attract_ball",
|
|
|
|
max: 3,
|
2025-03-16 17:45:29 +01:00
|
|
|
name: t("upgrades.ball_attract_ball.name"),
|
|
|
|
help: (lvl: number) =>
|
|
|
|
lvl == 1
|
|
|
|
? t("upgrades.ball_attract_ball.help")
|
|
|
|
: t("upgrades.ball_attract_ball.help_plural"),
|
|
|
|
fullHelp: t("upgrades.ball_attract_ball.fullHelp"),
|
2025-03-06 16:46:25 +01:00
|
|
|
},
|
|
|
|
{
|
|
|
|
requires: "",
|
2025-03-28 10:21:14 +01:00
|
|
|
|
2025-03-06 16:46:25 +01:00
|
|
|
threshold: 30000,
|
|
|
|
giftable: false,
|
|
|
|
id: "puck_repulse_ball",
|
2025-03-07 20:53:39 +01:00
|
|
|
max: 2,
|
2025-03-16 17:45:29 +01:00
|
|
|
name: t("upgrades.puck_repulse_ball.name"),
|
|
|
|
help: (lvl: number) =>
|
|
|
|
lvl == 1
|
|
|
|
? t("upgrades.puck_repulse_ball.help")
|
|
|
|
: t("upgrades.puck_repulse_ball.help_plural"),
|
|
|
|
fullHelp: t("upgrades.puck_repulse_ball.fullHelp"),
|
2025-03-06 16:46:25 +01:00
|
|
|
},
|
|
|
|
{
|
|
|
|
requires: "",
|
2025-03-28 10:21:14 +01:00
|
|
|
|
2025-03-06 16:46:25 +01:00
|
|
|
threshold: 35000,
|
|
|
|
giftable: false,
|
|
|
|
id: "wind",
|
|
|
|
max: 3,
|
2025-03-16 17:45:29 +01:00
|
|
|
name: t("upgrades.wind.name"),
|
|
|
|
help: (lvl: number) =>
|
|
|
|
lvl == 1 ? t("upgrades.wind.help") : t("upgrades.wind.help_plural"),
|
|
|
|
fullHelp: t("upgrades.wind.fullHelp"),
|
2025-03-06 16:46:25 +01:00
|
|
|
},
|
|
|
|
{
|
|
|
|
requires: "",
|
2025-03-28 10:21:14 +01:00
|
|
|
|
2025-03-06 16:46:25 +01:00
|
|
|
threshold: 40000,
|
|
|
|
giftable: false,
|
|
|
|
id: "sturdy_bricks",
|
|
|
|
max: 4,
|
2025-03-18 14:16:12 +01:00
|
|
|
name: t("upgrades.sturdy_bricks.name"),
|
2025-03-16 17:45:29 +01:00
|
|
|
help: (lvl: number) =>
|
2025-03-29 11:24:45 +01:00
|
|
|
// lvl == 1
|
|
|
|
t("upgrades.sturdy_bricks.help",{lvl, percent:lvl*10}),
|
|
|
|
// ?
|
|
|
|
// : t("upgrades.sturdy_bricks.help_plural"),
|
2025-03-18 14:16:12 +01:00
|
|
|
fullHelp: t("upgrades.sturdy_bricks.fullHelp"),
|
2025-03-06 16:46:25 +01:00
|
|
|
},
|
|
|
|
{
|
|
|
|
requires: "",
|
2025-03-28 10:21:14 +01:00
|
|
|
|
2025-03-06 16:46:25 +01:00
|
|
|
threshold: 45000,
|
|
|
|
giftable: false,
|
|
|
|
id: "respawn",
|
|
|
|
max: 4,
|
2025-03-16 17:45:29 +01:00
|
|
|
name: t("upgrades.respawn.name"),
|
|
|
|
help: (lvl: number) =>
|
2025-03-29 15:00:44 +01:00
|
|
|
t("upgrades.respawn.help",{percent:Math.floor(100*comboKeepingRate(lvl)),delay:(3/lvl).toFixed(2)}),
|
2025-03-16 17:45:29 +01:00
|
|
|
fullHelp: t("upgrades.respawn.fullHelp"),
|
2025-03-06 16:46:25 +01:00
|
|
|
},
|
|
|
|
{
|
|
|
|
requires: "",
|
|
|
|
threshold: 50000,
|
|
|
|
giftable: false,
|
|
|
|
id: "one_more_choice",
|
|
|
|
max: 3,
|
2025-03-16 17:45:29 +01:00
|
|
|
name: t("upgrades.one_more_choice.name"),
|
2025-03-29 15:00:44 +01:00
|
|
|
help: (lvl: number) => t("upgrades.one_more_choice.help", {lvl}),
|
2025-03-16 17:45:29 +01:00
|
|
|
fullHelp: t("upgrades.one_more_choice.fullHelp"),
|
2025-03-06 16:46:25 +01:00
|
|
|
},
|
|
|
|
{
|
|
|
|
requires: "",
|
2025-03-28 10:21:14 +01:00
|
|
|
|
2025-03-06 16:46:25 +01:00
|
|
|
threshold: 55000,
|
|
|
|
giftable: false,
|
|
|
|
id: "instant_upgrade",
|
|
|
|
max: 2,
|
2025-03-27 10:52:31 +01:00
|
|
|
adventure: false,
|
2025-03-16 17:45:29 +01:00
|
|
|
name: t("upgrades.instant_upgrade.name"),
|
2025-03-29 15:00:44 +01:00
|
|
|
help: (lvl: number) => t("upgrades.instant_upgrade.help",{lvl}),
|
2025-03-16 17:45:29 +01:00
|
|
|
fullHelp: t("upgrades.instant_upgrade.fullHelp"),
|
|
|
|
},
|
|
|
|
{
|
|
|
|
requires: "",
|
|
|
|
threshold: 60000,
|
|
|
|
giftable: false,
|
|
|
|
id: "concave_puck",
|
|
|
|
max: 1,
|
|
|
|
name: t("upgrades.concave_puck.name"),
|
|
|
|
help: (lvl: number) => t("upgrades.concave_puck.help"),
|
|
|
|
fullHelp: t("upgrades.concave_puck.fullHelp"),
|
2025-03-06 16:46:25 +01:00
|
|
|
},
|
2025-03-19 20:14:55 +01:00
|
|
|
{
|
|
|
|
requires: "",
|
2025-03-28 10:21:14 +01:00
|
|
|
|
2025-03-19 20:14:55 +01:00
|
|
|
threshold: 65000,
|
|
|
|
giftable: false,
|
2025-03-19 21:58:08 +01:00
|
|
|
id: "helium",
|
2025-03-19 20:14:55 +01:00
|
|
|
max: 1,
|
2025-03-19 21:58:08 +01:00
|
|
|
name: t("upgrades.helium.name"),
|
|
|
|
help: (lvl: number) => t("upgrades.helium.help"),
|
|
|
|
fullHelp: t("upgrades.helium.fullHelp"),
|
2025-03-19 20:14:55 +01:00
|
|
|
},
|
|
|
|
{
|
|
|
|
requires: "",
|
2025-03-28 10:21:14 +01:00
|
|
|
|
2025-03-19 21:58:50 +01:00
|
|
|
threshold: 70000,
|
2025-03-28 10:21:14 +01:00
|
|
|
giftable: true,
|
2025-03-19 20:14:55 +01:00
|
|
|
id: "asceticism",
|
|
|
|
max: 1,
|
|
|
|
name: t("upgrades.asceticism.name"),
|
2025-03-29 11:24:45 +01:00
|
|
|
help: (lvl: number) => t("upgrades.asceticism.help",{combo:lvl*3}),
|
2025-03-19 20:14:55 +01:00
|
|
|
fullHelp: t("upgrades.asceticism.fullHelp"),
|
|
|
|
},
|
|
|
|
{
|
|
|
|
requires: "",
|
2025-03-28 10:21:14 +01:00
|
|
|
|
2025-03-19 21:58:50 +01:00
|
|
|
threshold: 75000,
|
2025-03-19 20:14:55 +01:00
|
|
|
giftable: false,
|
|
|
|
id: "unbounded",
|
|
|
|
max: 1,
|
|
|
|
name: t("upgrades.unbounded.name"),
|
2025-03-29 11:24:45 +01:00
|
|
|
help: (lvl: number) => lvl > 1 ?
|
|
|
|
t("upgrades.unbounded.help_no_ceiling",{lvl}):
|
|
|
|
t("upgrades.unbounded.help",{lvl}),
|
2025-03-19 20:14:55 +01:00
|
|
|
fullHelp: t("upgrades.unbounded.fullHelp"),
|
|
|
|
},
|
|
|
|
{
|
|
|
|
requires: "",
|
2025-03-28 10:21:14 +01:00
|
|
|
|
2025-03-19 21:58:50 +01:00
|
|
|
threshold: 80000,
|
2025-03-19 20:14:55 +01:00
|
|
|
giftable: false,
|
|
|
|
id: "shunt",
|
2025-03-20 08:13:17 +01:00
|
|
|
max: 3,
|
2025-03-19 20:14:55 +01:00
|
|
|
name: t("upgrades.shunt.name"),
|
2025-03-29 11:24:45 +01:00
|
|
|
help: (lvl: number) => t("upgrades.shunt.help", { percent: Math.round(comboKeepingRate(lvl) * 100) }),
|
2025-03-19 20:14:55 +01:00
|
|
|
fullHelp: t("upgrades.shunt.fullHelp"),
|
|
|
|
},
|
|
|
|
{
|
|
|
|
requires: "",
|
2025-03-28 10:21:14 +01:00
|
|
|
|
2025-03-19 21:58:50 +01:00
|
|
|
threshold: 85000,
|
2025-03-19 20:14:55 +01:00
|
|
|
giftable: false,
|
|
|
|
id: "yoyo",
|
|
|
|
max: 2,
|
|
|
|
name: t("upgrades.yoyo.name"),
|
|
|
|
help: (lvl: number) => t("upgrades.yoyo.help"),
|
|
|
|
fullHelp: t("upgrades.yoyo.fullHelp"),
|
|
|
|
},
|
|
|
|
{
|
|
|
|
requires: "",
|
2025-03-28 10:21:14 +01:00
|
|
|
|
2025-03-19 21:58:50 +01:00
|
|
|
threshold: 90000,
|
2025-03-28 10:21:14 +01:00
|
|
|
giftable: true,
|
2025-03-19 20:14:55 +01:00
|
|
|
id: "nbricks",
|
|
|
|
max: 3,
|
|
|
|
name: t("upgrades.nbricks.name"),
|
2025-03-19 21:58:50 +01:00
|
|
|
help: (lvl: number) => t("upgrades.nbricks.help", { lvl }),
|
2025-03-19 20:14:55 +01:00
|
|
|
fullHelp: t("upgrades.nbricks.fullHelp"),
|
|
|
|
},
|
|
|
|
{
|
|
|
|
requires: "",
|
2025-03-28 10:21:14 +01:00
|
|
|
|
2025-03-19 21:58:50 +01:00
|
|
|
threshold: 95000,
|
2025-03-19 20:14:55 +01:00
|
|
|
giftable: false,
|
|
|
|
id: "etherealcoins",
|
|
|
|
max: 1,
|
|
|
|
name: t("upgrades.etherealcoins.name"),
|
|
|
|
help: (lvl: number) => t("upgrades.etherealcoins.help"),
|
|
|
|
fullHelp: t("upgrades.etherealcoins.fullHelp"),
|
|
|
|
},
|
2025-03-19 21:58:08 +01:00
|
|
|
{
|
|
|
|
requires: "multiball",
|
2025-03-19 21:58:50 +01:00
|
|
|
threshold: 100000,
|
2025-03-19 21:58:08 +01:00
|
|
|
giftable: false,
|
|
|
|
id: "shocks",
|
|
|
|
max: 1,
|
|
|
|
name: t("upgrades.shocks.name"),
|
|
|
|
help: (lvl: number) => t("upgrades.shocks.help"),
|
|
|
|
fullHelp: t("upgrades.shocks.fullHelp"),
|
|
|
|
},
|
|
|
|
{
|
|
|
|
requires: "",
|
2025-03-19 21:58:50 +01:00
|
|
|
threshold: 105000,
|
2025-03-28 10:21:14 +01:00
|
|
|
giftable: true,
|
2025-03-19 21:58:08 +01:00
|
|
|
id: "zen",
|
|
|
|
max: 1,
|
|
|
|
name: t("upgrades.zen.name"),
|
2025-03-29 15:00:44 +01:00
|
|
|
help: (lvl: number) => t("upgrades.zen.help",{lvl}),
|
2025-03-19 21:58:08 +01:00
|
|
|
fullHelp: t("upgrades.zen.fullHelp"),
|
|
|
|
},
|
|
|
|
{
|
|
|
|
requires: "extra_life",
|
2025-03-19 21:58:50 +01:00
|
|
|
threshold: 110000,
|
2025-03-19 21:58:08 +01:00
|
|
|
giftable: false,
|
|
|
|
id: "sacrifice",
|
|
|
|
max: 1,
|
|
|
|
name: t("upgrades.sacrifice.name"),
|
2025-03-29 15:00:44 +01:00
|
|
|
help: (lvl: number) =>
|
|
|
|
lvl==1 ?
|
|
|
|
t("upgrades.sacrifice.help_l1"):
|
|
|
|
t("upgrades.sacrifice.help_over",{lvl}),
|
2025-03-19 21:58:08 +01:00
|
|
|
fullHelp: t("upgrades.sacrifice.fullHelp"),
|
|
|
|
},
|
|
|
|
|
|
|
|
{
|
|
|
|
requires: "",
|
2025-03-19 21:58:50 +01:00
|
|
|
threshold: 115000,
|
2025-03-28 10:21:14 +01:00
|
|
|
giftable: true,
|
2025-03-19 21:58:08 +01:00
|
|
|
id: "trampoline",
|
2025-03-20 21:24:25 +01:00
|
|
|
max: 1,
|
2025-03-19 21:58:08 +01:00
|
|
|
name: t("upgrades.trampoline.name"),
|
2025-03-19 21:58:50 +01:00
|
|
|
help: (lvl: number) => t("upgrades.trampoline.help", { lvl }),
|
2025-03-19 21:58:08 +01:00
|
|
|
fullHelp: t("upgrades.trampoline.fullHelp"),
|
|
|
|
},
|
|
|
|
{
|
|
|
|
requires: "",
|
2025-03-28 10:21:14 +01:00
|
|
|
|
2025-03-19 21:58:50 +01:00
|
|
|
threshold: 120000,
|
2025-03-19 21:58:08 +01:00
|
|
|
giftable: false,
|
|
|
|
id: "ghost_coins",
|
|
|
|
max: 1,
|
|
|
|
name: t("upgrades.ghost_coins.name"),
|
2025-03-19 21:58:50 +01:00
|
|
|
help: (lvl: number) => t("upgrades.ghost_coins.help", { lvl }),
|
2025-03-19 21:58:08 +01:00
|
|
|
fullHelp: t("upgrades.ghost_coins.fullHelp"),
|
|
|
|
},
|
|
|
|
{
|
|
|
|
requires: "",
|
2025-03-19 21:58:50 +01:00
|
|
|
threshold: 125000,
|
2025-03-19 21:58:08 +01:00
|
|
|
giftable: false,
|
|
|
|
id: "forgiving",
|
|
|
|
max: 1,
|
|
|
|
name: t("upgrades.forgiving.name"),
|
|
|
|
help: (lvl: number) => t("upgrades.forgiving.help"),
|
|
|
|
fullHelp: t("upgrades.forgiving.fullHelp"),
|
|
|
|
},
|
|
|
|
{
|
|
|
|
requires: "",
|
2025-03-28 10:21:14 +01:00
|
|
|
|
2025-03-19 21:58:50 +01:00
|
|
|
threshold: 130000,
|
2025-03-19 21:58:08 +01:00
|
|
|
giftable: false,
|
|
|
|
id: "ball_attracts_coins",
|
|
|
|
max: 3,
|
|
|
|
name: t("upgrades.ball_attracts_coins.name"),
|
|
|
|
help: (lvl: number) => t("upgrades.ball_attracts_coins.help"),
|
|
|
|
fullHelp: t("upgrades.ball_attracts_coins.fullHelp"),
|
|
|
|
},
|
2025-03-20 21:02:51 +01:00
|
|
|
{
|
|
|
|
requires: "",
|
|
|
|
threshold: 135000,
|
2025-03-28 10:21:14 +01:00
|
|
|
// a bit too hard when starting up
|
2025-03-20 21:02:51 +01:00
|
|
|
giftable: false,
|
|
|
|
id: "reach",
|
2025-03-20 21:07:54 +01:00
|
|
|
max: 1,
|
2025-03-20 21:02:51 +01:00
|
|
|
name: t("upgrades.reach.name"),
|
|
|
|
help: (lvl: number) => t("upgrades.reach.help", { lvl }),
|
|
|
|
fullHelp: t("upgrades.reach.fullHelp"),
|
|
|
|
},
|
2025-03-22 16:04:25 +01:00
|
|
|
{
|
|
|
|
requires: "",
|
2025-03-28 10:21:14 +01:00
|
|
|
|
2025-03-22 16:04:25 +01:00
|
|
|
threshold: 140000,
|
2025-03-28 10:21:14 +01:00
|
|
|
giftable: true,
|
2025-03-22 16:04:25 +01:00
|
|
|
id: "passive_income",
|
2025-03-24 10:19:15 +01:00
|
|
|
max: 4,
|
2025-03-22 16:04:25 +01:00
|
|
|
name: t("upgrades.passive_income.name"),
|
2025-03-24 10:42:48 +01:00
|
|
|
help: (lvl: number) =>
|
2025-03-25 08:22:58 +01:00
|
|
|
t("upgrades.passive_income.help", { time: lvl * 0.25, lvl }),
|
2025-03-22 16:04:25 +01:00
|
|
|
fullHelp: t("upgrades.passive_income.fullHelp"),
|
|
|
|
},
|
2025-03-23 19:11:01 +01:00
|
|
|
{
|
|
|
|
requires: "",
|
|
|
|
threshold: 145000,
|
|
|
|
giftable: false,
|
|
|
|
id: "clairvoyant",
|
|
|
|
max: 1,
|
|
|
|
name: t("upgrades.clairvoyant.name"),
|
|
|
|
help: (lvl: number) => t("upgrades.clairvoyant.help"),
|
|
|
|
fullHelp: t("upgrades.clairvoyant.fullHelp"),
|
|
|
|
},
|
2025-03-23 22:19:11 +01:00
|
|
|
{
|
|
|
|
requires: "",
|
2025-03-28 10:21:14 +01:00
|
|
|
|
2025-03-23 22:19:11 +01:00
|
|
|
threshold: 150000,
|
|
|
|
giftable: true,
|
|
|
|
id: "side_kick",
|
|
|
|
max: 3,
|
|
|
|
name: t("upgrades.side_kick.name"),
|
2025-03-23 22:19:28 +01:00
|
|
|
help: (lvl: number) => t("upgrades.side_kick.help", { lvl }),
|
2025-03-23 22:19:11 +01:00
|
|
|
fullHelp: t("upgrades.side_kick.fullHelp"),
|
|
|
|
},
|
|
|
|
{
|
|
|
|
requires: "",
|
|
|
|
threshold: 155000,
|
|
|
|
giftable: false,
|
|
|
|
id: "implosions",
|
|
|
|
max: 1,
|
|
|
|
name: t("upgrades.implosions.name"),
|
|
|
|
help: (lvl: number) => t("upgrades.implosions.help"),
|
|
|
|
fullHelp: t("upgrades.implosions.fullHelp"),
|
|
|
|
},
|
|
|
|
{
|
|
|
|
requires: "",
|
|
|
|
threshold: 160000,
|
|
|
|
giftable: false,
|
|
|
|
id: "corner_shot",
|
|
|
|
max: 1,
|
|
|
|
name: t("upgrades.corner_shot.name"),
|
|
|
|
help: (lvl: number) => t("upgrades.corner_shot.help"),
|
|
|
|
fullHelp: t("upgrades.corner_shot.fullHelp"),
|
|
|
|
},
|
2025-03-06 16:46:25 +01:00
|
|
|
] as const;
|