diff --git a/src/css/ingame_hud/standalone_advantages.scss b/src/css/ingame_hud/standalone_advantages.scss index 0e8de09c..9b8dc0fd 100644 --- a/src/css/ingame_hud/standalone_advantages.scss +++ b/src/css/ingame_hud/standalone_advantages.scss @@ -142,20 +142,15 @@ > .discount { position: absolute; - @include S(top, -7px); - @include S(right, -5px); + @include S(top, -12px); + @include S(right, -15px); background: #4c6b22; color: #c5ea3f; @include S(border-radius, $globalBorderRadius); @include S(padding, 1px, 3px, 1px, 4px); - @include SuperSmallText; + @include PlainText; text-transform: uppercase; - transform: rotate(1deg); - @include InlineAnimation(1.3s ease-in-out infinite) { - 50% { - transform: rotate(4deg) scale(1.1); - } - } + transform: rotate(3deg); } } } diff --git a/src/css/states/main_menu.scss b/src/css/states/main_menu.scss index d817b6c1..3f2e469e 100644 --- a/src/css/states/main_menu.scss +++ b/src/css/states/main_menu.scss @@ -327,14 +327,9 @@ color: #c5ea3f; @include S(border-radius, $globalBorderRadius); @include S(padding, 1px, 3px, 1px, 4px); - @include SuperSmallText; + @include PlainText; text-transform: uppercase; - transform: rotate(1deg); - @include InlineAnimation(1.3s ease-in-out infinite) { - 50% { - transform: rotate(4deg) scale(1.1); - } - } + transform: rotate(5deg); } } diff --git a/src/js/core/config.js b/src/js/core/config.js index 344c673e..7c814486 100644 --- a/src/js/core/config.js +++ b/src/js/core/config.js @@ -22,9 +22,10 @@ export const THIRDPARTY_URLS = { twitter: "https://twitter.com/tobspr", privacyPolicy: "https://tobspr.io/privacy.html", - standaloneCampaignLink: G_IS_STANDALONE - ? "https://get.shapez.io/bundle/$campaign" - : "https://get.shapez.io/$campaign", + standaloneCampaignLink: + G_IS_STANDALONE || true + ? "https://get.shapez.io/bundle/$campaign" + : "https://get.shapez.io/$campaign", puzzleDlcStorePage: "https://get.shapez.io/mm_puzzle_dlc?target=dlc", levelTutorialVideos: { diff --git a/src/js/game/hud/parts/standalone_advantages.js b/src/js/game/hud/parts/standalone_advantages.js index 4879ac82..81eccb29 100644 --- a/src/js/game/hud/parts/standalone_advantages.js +++ b/src/js/game/hud/parts/standalone_advantages.js @@ -42,7 +42,10 @@ export class HUDStandaloneAdvantages extends BaseHUDPart { diff --git a/src/js/game/hud/parts/watermark.js b/src/js/game/hud/parts/watermark.js index eb877261..c9be8058 100644 --- a/src/js/game/hud/parts/watermark.js +++ b/src/js/game/hud/parts/watermark.js @@ -13,7 +13,10 @@ export class HUDWatermark extends BaseHUDPart { globalConfig.currentDiscount > 0 ? ["withDiscount"] : [], linkText + (globalConfig.currentDiscount > 0 - ? `-${globalConfig.currentDiscount}%!` + ? `${T.global.discount.replace( + "", + String(globalConfig.currentDiscount) + )}` : "") ); this.trackClicks(this.linkElement, () => { diff --git a/src/js/game/modes/levels.js b/src/js/game/modes/levels.js index 085b456f..d6533448 100644 --- a/src/js/game/modes/levels.js +++ b/src/js/game/modes/levels.js @@ -16,8 +16,6 @@ const chinaShapes = G_WEGAME_VERSION || G_CHINA_VERSION; * @returns */ const WEB_DEMO_LEVELS = app => { - const variant = app.gameAnalytics.abtVariant; - const levels = [ // 1 // Circle @@ -39,7 +37,7 @@ const WEB_DEMO_LEVELS = app => { // Rectangle { shape: "RuRuRuRu", // miners t1 - required: variant === "0" ? 50 : 30, + required: 30, reward: enumHubGoalRewards.reward_balancer, }, @@ -57,48 +55,34 @@ const WEB_DEMO_LEVELS = app => { required: 75, reward: enumHubGoalRewards.reward_tunnel, }, - ]; - - if (["0", "1", "2", "3"].includes(variant)) { - levels.push( - // 6 - // Painter - { - shape: "Cu------", // miners t2 - required: variant === "0" ? 75 : 50, - reward: enumHubGoalRewards.reward_painter, - } - ); - } - if (["0", "1", "2"].includes(variant)) { - levels.push( - // 7 - { - shape: "CrCrCrCr", // unused - required: variant === "0" ? 120 : 85, - reward: enumHubGoalRewards.reward_rotater_ccw, - } - ); - } + // 6 + // Painter + { + shape: "Cu------", // miners t2 + required: 50, + reward: enumHubGoalRewards.reward_painter, + }, - if (["0", "1"].includes(variant)) { - levels.push( - // 8 - { - shape: "RbRb----", // painter t2 - required: variant === "0" ? 170 : 100, - reward: enumHubGoalRewards.reward_mixer, - } - ); - } + // 7 + { + shape: "CrCrCrCr", // unused + required: 85, + reward: enumHubGoalRewards.reward_rotater_ccw, + }, - // End of demo - levels.push({ - shape: levels[levels.length - 1].shape, - required: 0, - reward: enumHubGoalRewards.reward_demo_end, - }); + // 8 + { + shape: "RbRb----", // painter t2 + required: 100, + reward: enumHubGoalRewards.reward_mixer, + }, + { + shape: "RpRp----", + required: 0, + reward: enumHubGoalRewards.reward_demo_end, + }, + ]; return levels; }; @@ -168,7 +152,7 @@ const STEAM_DEMO_LEVELS = () => [ }, // End of demo { - shape: "RbRb----", + shape: "CpCpCpCp", required: 0, reward: enumHubGoalRewards.reward_demo_end, }, diff --git a/src/js/platform/browser/game_analytics.js b/src/js/platform/browser/game_analytics.js index 30a518f6..54d9fc90 100644 --- a/src/js/platform/browser/game_analytics.js +++ b/src/js/platform/browser/game_analytics.js @@ -36,8 +36,8 @@ const analyticsUrl = G_IS_DEV ? "http://localhost:8001" : "https://analytics.sha // Be sure to increment the ID whenever it changes const analyticsLocalFile = G_IS_STEAM_DEMO ? "shapez_token_steamdemo.bin" : "shapez_token_123.bin"; -const CURRENT_ABT = "abt_lvcp"; -const CURRENT_ABT_COUNT = 4; +const CURRENT_ABT = "abt_dsct"; +const CURRENT_ABT_COUNT = 2; export class ShapezGameAnalytics extends GameAnalyticsInterface { constructor(app) { diff --git a/src/js/states/main_menu.js b/src/js/states/main_menu.js index 656446ff..4f847d23 100644 --- a/src/js/states/main_menu.js +++ b/src/js/states/main_menu.js @@ -103,7 +103,10 @@ export class MainMenuState extends GameState { ${ globalConfig.currentDiscount > 0 - ? `-${globalConfig.currentDiscount}%!` + ? `${T.global.discount.replace( + "", + String(globalConfig.currentDiscount) + )}` : "" } Play shapez on Steam diff --git a/src/js/states/preload.js b/src/js/states/preload.js index e4a0d11e..18046300 100644 --- a/src/js/states/preload.js +++ b/src/js/states/preload.js @@ -46,13 +46,16 @@ export class PreloadState extends GameState { } async fetchDiscounts() { + // Bundle is always -10% off + let baseDiscount = this.app.gameAnalytics.abtVariant === "0" ? 1 : 0.9; + await timeoutPromise( fetch("https://analytics.shapez.io/v1/discounts") .then(res => res.json()) .then(data => { - globalConfig.currentDiscount = Number( - data["1318690"].data.price_overview.discount_percent - ); + globalConfig.currentDiscount = + 100 - + baseDiscount * (100 - Number(data["1318690"].data.price_overview.discount_percent)); logger.log("Fetched current discount:", globalConfig.currentDiscount); }), 2000 diff --git a/translations/base-en.yaml b/translations/base-en.yaml index 8bf66e23..6a1f638a 100644 --- a/translations/base-en.yaml +++ b/translations/base-en.yaml @@ -58,6 +58,8 @@ global: # What symbol to use to separate the integer part from the fractional part of a number, e.g. "0.4" decimalSeparator: "." + discount: -% off! + # The suffix for large numbers, e.g. 1.3k, 400.2M, etc. suffix: thousands: k