From 05847add71fa00a9dcf707627b70dc84cdf4e00b Mon Sep 17 00:00:00 2001 From: tobspr Date: Tue, 22 Sep 2020 20:21:09 +0200 Subject: [PATCH] Re-balance --- src/js/changelog.js | 1 + src/js/core/config.js | 4 +- src/js/game/hub_goals.js | 2 +- src/js/game/tutorial_goals.js | 113 ++++++++++++++++++++++--- src/js/game/tutorial_goals_mappings.js | 11 +++ src/js/game/upgrades.js | 8 +- translations/base-en.yaml | 62 ++++++++++++-- 7 files changed, 174 insertions(+), 27 deletions(-) diff --git a/src/js/changelog.js b/src/js/changelog.js index 6f38ae81..141a02cf 100644 --- a/src/js/changelog.js +++ b/src/js/changelog.js @@ -31,6 +31,7 @@ export const CHANGELOG = [ "Show mouse and camera tile on debug overlay (F4) (by dengr)", "Fix belt planner placing the belt when a dialog opens in the meantime", "Added confirmation when deleting a savegame", + "Make chained mainer the default and only option after unlocking it", "Fixed tunnels entrances connecting to exits sometimes when they shouldn't", "You can now pan the map with your mouse by moving the cursor to the edges of the screen!", "Added setting to auto select the extractor when pipetting a resource patch (by Exund)", diff --git a/src/js/core/config.js b/src/js/core/config.js index b15fb672..14c39ab1 100644 --- a/src/js/core/config.js +++ b/src/js/core/config.js @@ -65,13 +65,13 @@ export const globalConfig = { buildingSpeeds: { cutter: 1 / 4, - cutterQuad: 1 / 4, + cutterQuad: 1 / 3, rotater: 1 / 1, rotaterCCW: 1 / 1, rotater180: 1 / 1, painter: 1 / 6, painterDouble: 1 / 8, - painterQuad: 1 / 8, + painterQuad: 1 / 2, mixer: 1 / 5, stacker: 1 / 6, }, diff --git a/src/js/game/hub_goals.js b/src/js/game/hub_goals.js index 16947f24..2debeb5d 100644 --- a/src/js/game/hub_goals.js +++ b/src/js/game/hub_goals.js @@ -212,7 +212,7 @@ export class HubGoals extends BasicSerializableObject { this.currentGoal = { /** @type {ShapeDefinition} */ definition: this.createRandomShape(), - required: findNiceIntegerValue(5000 + Math.pow(this.level * 2000, 0.75)), + required: findNiceIntegerValue(1000 + Math.pow(this.level * 2000, 0.8)), reward: enumHubGoalRewards.no_reward_freeplay, }; } diff --git a/src/js/game/tutorial_goals.js b/src/js/game/tutorial_goals.js index 3a5cf807..d83bd04d 100644 --- a/src/js/game/tutorial_goals.js +++ b/src/js/game/tutorial_goals.js @@ -18,12 +18,19 @@ export const enumHubGoalRewards = { reward_rotater_180: "reward_rotater_180", reward_miner_chainable: "reward_miner_chainable", reward_underground_belt_tier_2: "reward_underground_belt_tier_2", + reward_belt_reader: "reward_belt_reader", reward_splitter: "reward_splitter", reward_cutter_quad: "reward_cutter_quad", reward_painter_double: "reward_painter_double", reward_painter_quad: "reward_painter_quad", reward_storage: "reward_storage", reward_merger: "reward_merger", + reward_wires_filters_and_levers: "reward_wires_filters_and_levers", + reward_display: "reward_display", + reward_constant_signal: "reward_constant_signal", + reward_logic_gates: "reward_logic_gates", + reward_virtual_processing: "reward_virtual_processing", + reward_second_wire: "reward_second_wire", reward_blueprints: "reward_blueprints", reward_freeplay: "reward_freeplay", @@ -99,11 +106,11 @@ export const tutorialGoals = [ { shape: "CpCpCpCp", // belts t3 required: 800, - reward: enumHubGoalRewards.reward_splitter, + reward: enumHubGoalRewards.reward_merger, }, // 10 - // Star shape + cyan + // STACKER: Star shape + cyan { shape: "ScScScSc", // miners t3 required: 900, @@ -111,7 +118,7 @@ export const tutorialGoals = [ }, // 11 - // Stacker + // Chainable miner { shape: "CgScScCg", // processors t3 required: 1000, @@ -127,6 +134,7 @@ export const tutorialGoals = [ }, // 13 + // Tunnel Tier 2 { shape: "RpRpRpRp:CwCwCwCw", // painting t3 required: 5000, @@ -134,44 +142,121 @@ export const tutorialGoals = [ }, // 14 + // Belt reader + { + // @todo + shape: "CuCuCuCu", + required: 7000, + reward: enumHubGoalRewards.reward_belt_reader, + }, + + // 15 + // Storage { shape: "SrSrSrSr:CyCyCyCy", // unused required: 7500, reward: enumHubGoalRewards.reward_storage, }, - // 15 + // 16 + // Quad Cutter { shape: "SrSrSrSr:CyCyCyCy:SwSwSwSw", // belts t4 (two variants) - required: 15000, + required: 12500, reward: enumHubGoalRewards.reward_cutter_quad, }, - // 16 + // 17 + // Double painter { shape: "CbRbRbCb:CwCwCwCw:WbWbWbWb", // miner t4 (two variants) - required: 20000, + required: 15000, reward: enumHubGoalRewards.reward_painter_double, }, - // 17 + // 18 + // Rotater (180deg) { - shape: "CbRbRbCb:CwCwCwCw:WbWbWbWb", // rotater 180 - required: 25000, + // @TODO + shape: "CuCuCuCu", + required: 20000, reward: enumHubGoalRewards.reward_rotater_180, }, - // 18 + // 19 + // Compact splitter + { + // @TODO + shape: "CuCuCuCu", + required: 25000, + reward: enumHubGoalRewards.reward_splitter, + }, + + // 20 + // WIRES { - shape: "WrRgWrRg:CwCrCwCr:SgSgSgSg", // processors t4 (two variants) + shape: finalGameShape, + required: 50000, + reward: enumHubGoalRewards.reward_wires_filters_and_levers, + }, + + // 21 + // Display + { + // @TODO + shape: "CuCuCuCu", + required: 25000, + reward: enumHubGoalRewards.reward_display, + }, + + // 22 + // Constant signal + { + // @TODO + shape: "CuCuCuCu", required: 30000, + reward: enumHubGoalRewards.reward_constant_signal, + }, + + // 23 + // Quad Painter + { + // @TODO + shape: "CuCuCuCu", + // shape: "WrRgWrRg:CwCrCwCr:SgSgSgSg", // processors t4 (two variants) + required: 35000, reward: enumHubGoalRewards.reward_painter_quad, }, - // 19 + // 24 Logic gates { - shape: finalGameShape, + // @TODO + shape: "CuCuCuCu", + required: 40000, + reward: enumHubGoalRewards.reward_logic_gates, + }, + + // 25 Virtual Processing + { + // @TODO + shape: "CuCuCuCu", + required: 45000, + reward: enumHubGoalRewards.reward_virtual_processing, + }, + + // 26 Secondary type of wire + { + // @TODO + shape: "CuCuCuCu", required: 50000, + reward: enumHubGoalRewards.reward_second_wire, + }, + + // 27 Freeplay + { + // @TODO + shape: "CuCuCuCu", + required: 100000, reward: enumHubGoalRewards.reward_freeplay, }, ]; diff --git a/src/js/game/tutorial_goals_mappings.js b/src/js/game/tutorial_goals_mappings.js index 1257cad9..aefdb172 100644 --- a/src/js/game/tutorial_goals_mappings.js +++ b/src/js/game/tutorial_goals_mappings.js @@ -12,6 +12,9 @@ import { MetaTrashBuilding, enumTrashVariants } from "./buildings/trash"; /** @typedef {Array<[typeof MetaBuilding, string]>} TutorialGoalReward */ import { enumHubGoalRewards } from "./tutorial_goals"; +import { MetaReaderBuilding } from "./buildings/reader"; +import { MetaDisplayBuilding } from "./buildings/display"; +import { MetaConstantSignalBuilding } from "./buildings/constant_signal"; /** * Helper method for proper types @@ -45,6 +48,14 @@ export const enumHubGoalRewardsToContentUnlocked = { [enumHubGoalRewards.reward_painter_quad]: typed([[MetaPainterBuilding, enumPainterVariants.quad]]), [enumHubGoalRewards.reward_storage]: typed([[MetaTrashBuilding, enumTrashVariants.storage]]), + [enumHubGoalRewards.reward_belt_reader]: typed([[MetaReaderBuilding, defaultBuildingVariant]]), + [enumHubGoalRewards.reward_display]: typed([[MetaDisplayBuilding, defaultBuildingVariant]]), + [enumHubGoalRewards.reward_constant_signal]: typed([ + [MetaConstantSignalBuilding, defaultBuildingVariant], + ]), + [enumHubGoalRewards.reward_second_wire]: null, // @TODO! + + [enumHubGoalRewards.reward_wires_filters_and_levers]: null, [enumHubGoalRewards.reward_freeplay]: null, [enumHubGoalRewards.no_reward]: null, [enumHubGoalRewards.no_reward_freeplay]: null, diff --git a/src/js/game/upgrades.js b/src/js/game/upgrades.js index 4735592b..c764ae88 100644 --- a/src/js/game/upgrades.js +++ b/src/js/game/upgrades.js @@ -38,7 +38,7 @@ export const UPGRADES = { required: [{ shape: "SrSrSrSr:CyCyCyCy:SwSwSwSw", amount: 20000 }], }, { - required: [{ shape: finalGameShape, amount: 75000 }], + required: [{ shape: finalGameShape, amount: 50000 }], excludePrevious: true, }, ], @@ -60,7 +60,7 @@ export const UPGRADES = { required: [{ shape: "CbRbRbCb:CwCwCwCw:WbWbWbWb", amount: 30000 }], }, { - required: [{ shape: finalGameShape, amount: 85000 }], + required: [{ shape: finalGameShape, amount: 65000 }], excludePrevious: true, }, ], @@ -82,7 +82,7 @@ export const UPGRADES = { required: [{ shape: "WrRgWrRg:CwCrCwCr:SgSgSgSg", amount: 30000 }], }, { - required: [{ shape: finalGameShape, amount: 100000 }], + required: [{ shape: finalGameShape, amount: 75000 }], excludePrevious: true, }, ], @@ -104,7 +104,7 @@ export const UPGRADES = { required: [{ shape: "WpWpWpWp:CwCwCwCw:WpWpWpWp:CwCwCwCw", amount: 30000 }], }, { - required: [{ shape: finalGameShape, amount: 125000 }], + required: [{ shape: finalGameShape, amount: 100000 }], excludePrevious: true, }, ], diff --git a/translations/base-en.yaml b/translations/base-en.yaml index 193a2d04..d8546ba9 100644 --- a/translations/base-en.yaml +++ b/translations/base-en.yaml @@ -687,7 +687,9 @@ storyRewards: reward_miner_chainable: title: Chaining Extractor - desc: You have unlocked the chaining extractor! It can forward its resources to other extractors so you can more efficiently extract resources! + desc: >- + You have unlocked the chained extractor! It can forward its resources to other extractors so you can more efficiently extract resources!

+ PS: The old extractor has been replaced in your toolbar now! reward_underground_belt_tier_2: title: Tunnel Tier II @@ -703,6 +705,11 @@ storyRewards: desc: >- You have unlocked a merger variant of the balancer - It accepts one input and splits them into two! + reward_belt_reader: + title: Belt reader + desc: >- + You have now unlocked the belt reader! It allows you to measure the throughput of a belt.

And wait until you unlock wires - then it gets really useful! + reward_cutter_quad: title: Quad Cutting desc: You have unlocked a variant of the cutter - It allows you to cut shapes in four parts instead of just two! @@ -713,16 +720,14 @@ storyRewards: reward_painter_quad: title: Quad Painting - desc: You have unlocked a variant of the painter - It allows you to paint each part of the shape individually! + desc: >- + You have unlocked a variant of the painter - It allows you to paint each part of the shape individually!

+ To use it, connect each slot which should be painted on the wires layer! reward_storage: title: Storage Buffer desc: You have unlocked a variant of the trash - It allows you to store items up to a given capacity! - reward_freeplay: - title: Freeplay - desc: You did it! You unlocked the free-play mode! This means that shapes are now randomly generated! (No worries, more content is planned for the standalone!) - reward_blueprints: title: Blueprints desc: You can now copy and paste parts of your factory! Select an area (Hold CTRL, then drag with your mouse), and press 'C' to copy it.

Pasting it is not free, you need to produce blueprint shapes to afford it! (Those you just delivered). @@ -731,6 +736,45 @@ storyRewards: title: Rotater (180 degrees) desc: You just unlocked the 180 degress rotater! - It allows you to rotate a shape by 180 degress (Surprise! :D) + reward_wires_filters_and_levers: + title: >- + Wires: Filters & Levers + desc: >- + You just unlocked the wires layer! It is a separate layer on top of the regular layer and introduces a lot of new mechanics!

+ Since it can be overwhelming a bit, I added a small tutorial - Be sure to have tutorials enabled in the settings! + + reward_display: + title: Display + desc: >- + You have unlocked the Display! Connect a wires signal to it to present a color, shape or boolean! + + reward_constant_signal: + title: Constant Signal + desc: >- + You can now emit a constant signal on the wires layer! This is useful to connect it to item filters for example! + + reward_logic_gates: + title: Logic Gates + desc: >- + You unlocked logic gates! You don't have to be excited about this, but it's actually super cool!

+ With those gates you can now perform AND, OR, XOR and NOT boolean operations! + + reward_virtual_processing: + title: Virtual Processing + desc: >- + I just gave a whole bunch of new buildings which allow you to simulate the processing of shapes!

+ You can now simulate a cutter, rotater, stacker and more on the wires layer!

+ With this you now have three options to continue the game:

+ - Build an automated machine to create any possible shape requested by the hub (This is cool, I swear!).

+ - Build something cool with wires.

+ - Continue to play regulary. + + reward_second_wire: + title: Second Wire Type + desc: >- + Annoyed by wires automatically connecting? I just gave you another type of wire!

+ Different types of wires do not connect to each other, so you can now build much compacter circuits. + # Special reward, which is shown when there is no reward actually no_reward: title: Next level @@ -742,6 +786,12 @@ storyRewards: desc: >- Congratulations! By the way, more content is planned for the standalone! + reward_freeplay: + title: Freeplay + desc: >- + You did it! You unlocked the free-play mode! This means that shapes are now randomly generated!

+ Since the hub will only require low quantities, I highly recommend to build a machine which automatically delivers the requested shape! + settings: title: Settings categories: