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