mirror of
				https://github.com/tobspr/shapez.io.git
				synced 2025-06-13 13:04:03 +00:00 
			
		
		
		
	Rebalance whole game
This commit is contained in:
		
							parent
							
								
									bd71caba0a
								
							
						
					
					
						commit
						17c1cd1b91
					
				
										
											Binary file not shown.
										
									
								
							| 
		 Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 806 B  | 
@ -42,7 +42,7 @@
 | 
			
		||||
                    color: #fff;
 | 
			
		||||
                    text-align: center;
 | 
			
		||||
                    font-weight: bold;
 | 
			
		||||
                    @include S(width, 45px);
 | 
			
		||||
                    @include S(width, 50px);
 | 
			
		||||
                    @include S(padding, 0px, 5px);
 | 
			
		||||
 | 
			
		||||
                    &[data-tier="0"] {
 | 
			
		||||
@ -61,10 +61,10 @@
 | 
			
		||||
                        background-color: rgb(243, 77, 48);
 | 
			
		||||
                    }
 | 
			
		||||
                    &[data-tier="5"] {
 | 
			
		||||
                        background-color: rgb(219, 184, 29);
 | 
			
		||||
                        background-color: rgb(255, 209, 6);
 | 
			
		||||
                    }
 | 
			
		||||
                    &[data-tier="6"] {
 | 
			
		||||
                        background-color: rgb(190, 73, 73);
 | 
			
		||||
                        background-color: rgb(44, 41, 46);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
@ -105,15 +105,16 @@
 | 
			
		||||
                    display: flex;
 | 
			
		||||
                    flex-direction: column;
 | 
			
		||||
                    align-items: center;
 | 
			
		||||
                    @include S(width, 75px);
 | 
			
		||||
                    @include S(width, 70px);
 | 
			
		||||
                    overflow: hidden;
 | 
			
		||||
 | 
			
		||||
                    button.pin {
 | 
			
		||||
                        @include S(width, 12px);
 | 
			
		||||
                        @include S(height, 12px);
 | 
			
		||||
                        background: uiResource("icons/pin.png") center center / 95% no-repeat;
 | 
			
		||||
                        position: absolute;
 | 
			
		||||
                        @include S(top, -2px);
 | 
			
		||||
                        @include S(right, -2px);
 | 
			
		||||
                        @include S(top, 2px);
 | 
			
		||||
                        @include S(right, 2px);
 | 
			
		||||
                        opacity: 0.6;
 | 
			
		||||
                        cursor: pointer;
 | 
			
		||||
                        pointer-events: all;
 | 
			
		||||
 | 
			
		||||
@ -38,7 +38,7 @@ export const globalConfig = {
 | 
			
		||||
 | 
			
		||||
    // Belt speeds
 | 
			
		||||
    // NOTICE: Update webpack.production.config too!
 | 
			
		||||
    beltSpeedItemsPerSecond: 1,
 | 
			
		||||
    beltSpeedItemsPerSecond: 5,
 | 
			
		||||
    itemSpacingOnBelts: 0.63,
 | 
			
		||||
    minerSpeedItemsPerSecond: 0, // COMPUTED
 | 
			
		||||
 | 
			
		||||
@ -76,8 +76,8 @@ export const globalConfig = {
 | 
			
		||||
 | 
			
		||||
    debug: {
 | 
			
		||||
        /* dev:start */
 | 
			
		||||
        // fastGameEnter: true,
 | 
			
		||||
        // noArtificialDelays: true,
 | 
			
		||||
        fastGameEnter: true,
 | 
			
		||||
        noArtificialDelays: true,
 | 
			
		||||
        // disableSavegameWrite: true,
 | 
			
		||||
        showEntityBounds: false,
 | 
			
		||||
        showAcceptorEjectors: false,
 | 
			
		||||
@ -87,9 +87,9 @@ export const globalConfig = {
 | 
			
		||||
        disableZoomLimits: false,
 | 
			
		||||
        showChunkBorders: false,
 | 
			
		||||
        rewardsInstant: false,
 | 
			
		||||
        allBuildingsUnlocked: true,
 | 
			
		||||
        // allBuildingsUnlocked: true,
 | 
			
		||||
        upgradesNoCost: true,
 | 
			
		||||
        disableUnlockDialog: false,
 | 
			
		||||
        disableUnlockDialog: true,
 | 
			
		||||
        // testTranslations: true,
 | 
			
		||||
        /* dev:end */
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
@ -19,6 +19,7 @@ export class MetaCutterBuilding extends MetaBuilding {
 | 
			
		||||
    getSilhouetteColor() {
 | 
			
		||||
        return "#7dcda2";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    getDimensions(variant) {
 | 
			
		||||
        switch (variant) {
 | 
			
		||||
            case defaultBuildingVariant:
 | 
			
		||||
@ -30,8 +31,14 @@ export class MetaCutterBuilding extends MetaBuilding {
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param {GameRoot} root
 | 
			
		||||
     */
 | 
			
		||||
    getAvailableVariants(root) {
 | 
			
		||||
        return [defaultBuildingVariant, enumCutterVariants.quad];
 | 
			
		||||
        if (root.hubGoals.isRewardUnlocked(enumHubGoalRewards.reward_cutter_quad)) {
 | 
			
		||||
            return [defaultBuildingVariant, enumCutterVariants.quad];
 | 
			
		||||
        }
 | 
			
		||||
        return super.getAvailableVariants(root);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
 | 
			
		||||
@ -4,6 +4,7 @@ import { MinerComponent } from "../components/miner";
 | 
			
		||||
import { Entity } from "../entity";
 | 
			
		||||
import { MetaBuilding, defaultBuildingVariant } from "../meta_building";
 | 
			
		||||
import { GameRoot } from "../root";
 | 
			
		||||
import { enumHubGoalRewards } from "../tutorial_goals";
 | 
			
		||||
 | 
			
		||||
/** @enum {string} */
 | 
			
		||||
export const enumMinerVariants = { chainable: "chainable" };
 | 
			
		||||
@ -17,8 +18,15 @@ export class MetaMinerBuilding extends MetaBuilding {
 | 
			
		||||
        return "#b37dcd";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     *
 | 
			
		||||
     * @param {GameRoot} root
 | 
			
		||||
     */
 | 
			
		||||
    getAvailableVariants(root) {
 | 
			
		||||
        return [defaultBuildingVariant, enumMinerVariants.chainable];
 | 
			
		||||
        if (root.hubGoals.isRewardUnlocked(enumHubGoalRewards.reward_miner_chainable)) {
 | 
			
		||||
            return [defaultBuildingVariant, enumMinerVariants.chainable];
 | 
			
		||||
        }
 | 
			
		||||
        return super.getAvailableVariants(root);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
 | 
			
		||||
@ -33,8 +33,18 @@ export class MetaPainterBuilding extends MetaBuilding {
 | 
			
		||||
        return "#cd9b7d";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param {GameRoot} root
 | 
			
		||||
     */
 | 
			
		||||
    getAvailableVariants(root) {
 | 
			
		||||
        return [defaultBuildingVariant, enumPainterVariants.double, enumPainterVariants.quad];
 | 
			
		||||
        let variants = [defaultBuildingVariant];
 | 
			
		||||
        if (root.hubGoals.isRewardUnlocked(enumHubGoalRewards.reward_painter_double)) {
 | 
			
		||||
            variants.push(enumPainterVariants.double);
 | 
			
		||||
        }
 | 
			
		||||
        if (root.hubGoals.isRewardUnlocked(enumHubGoalRewards.reward_painter_quad)) {
 | 
			
		||||
            variants.push(enumPainterVariants.quad);
 | 
			
		||||
        }
 | 
			
		||||
        return variants;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
 | 
			
		||||
@ -20,8 +20,15 @@ export class MetaRotaterBuilding extends MetaBuilding {
 | 
			
		||||
        return "#7dc6cd";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     *
 | 
			
		||||
     * @param {GameRoot} root
 | 
			
		||||
     */
 | 
			
		||||
    getAvailableVariants(root) {
 | 
			
		||||
        return [defaultBuildingVariant, enumRotaterVariants.ccw];
 | 
			
		||||
        if (root.hubGoals.isRewardUnlocked(enumHubGoalRewards.reward_rotater_ccw)) {
 | 
			
		||||
            return [defaultBuildingVariant, enumRotaterVariants.ccw];
 | 
			
		||||
        }
 | 
			
		||||
        return super.getAvailableVariants(root);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
 | 
			
		||||
@ -32,8 +32,18 @@ export class MetaSplitterBuilding extends MetaBuilding {
 | 
			
		||||
        return "#444";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param {GameRoot} root
 | 
			
		||||
     */
 | 
			
		||||
    getAvailableVariants(root) {
 | 
			
		||||
        return [defaultBuildingVariant, enumSplitterVariants.compact, enumSplitterVariants.compactInverse];
 | 
			
		||||
        if (root.hubGoals.isRewardUnlocked(enumHubGoalRewards.reward_splitter_compact)) {
 | 
			
		||||
            return [
 | 
			
		||||
                defaultBuildingVariant,
 | 
			
		||||
                enumSplitterVariants.compact,
 | 
			
		||||
                enumSplitterVariants.compactInverse,
 | 
			
		||||
            ];
 | 
			
		||||
        }
 | 
			
		||||
        return super.getAvailableVariants(root);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
 | 
			
		||||
@ -40,8 +40,14 @@ export class MetaUndergroundBeltBuilding extends MetaBuilding {
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param {GameRoot} root
 | 
			
		||||
     */
 | 
			
		||||
    getAvailableVariants(root) {
 | 
			
		||||
        return [defaultBuildingVariant, enumUndergroundBeltVariants.tier2];
 | 
			
		||||
        if (root.hubGoals.isRewardUnlocked(enumHubGoalRewards.reward_underground_belt_tier_2)) {
 | 
			
		||||
            return [defaultBuildingVariant, enumUndergroundBeltVariants.tier2];
 | 
			
		||||
        }
 | 
			
		||||
        return super.getAvailableVariants(root);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    getPreviewSprite(rotationVariant, variant) {
 | 
			
		||||
 | 
			
		||||
@ -53,7 +53,7 @@ export class Camera extends BasicSerializableObject {
 | 
			
		||||
        this.clampZoomLevel();
 | 
			
		||||
 | 
			
		||||
        /** @type {Vector} */
 | 
			
		||||
        this.center = new Vector(2 * globalConfig.tileSize, 2 * globalConfig.tileSize);
 | 
			
		||||
        this.center = new Vector(0, 0);
 | 
			
		||||
 | 
			
		||||
        // Input handling
 | 
			
		||||
        this.currentlyMoving = false;
 | 
			
		||||
 | 
			
		||||
@ -69,6 +69,8 @@ export class HUDBuildingPlacer extends BaseHUDPart {
 | 
			
		||||
         * @type {Vector}
 | 
			
		||||
         */
 | 
			
		||||
        this.initialDragTile = null;
 | 
			
		||||
 | 
			
		||||
        this.root.signals.storyGoalCompleted.add(this.rerenderVariants, this);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    createElements(parent) {
 | 
			
		||||
 | 
			
		||||
@ -159,11 +159,11 @@ export class MapChunk {
 | 
			
		||||
        weights = {
 | 
			
		||||
            [enumSubShape.rect]: 100,
 | 
			
		||||
            [enumSubShape.circle]: Math_round(50 + clamp(distanceToOriginInChunks * 2, 0, 50)),
 | 
			
		||||
            [enumSubShape.star]: Math_round(9 + clamp(distanceToOriginInChunks, 0, 30)),
 | 
			
		||||
            [enumSubShape.star]: Math_round(20 + clamp(distanceToOriginInChunks, 0, 30)),
 | 
			
		||||
            [enumSubShape.windmill]: Math_round(6 + clamp(distanceToOriginInChunks / 2, 0, 20)),
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        if (distanceToOriginInChunks < 5) {
 | 
			
		||||
        if (distanceToOriginInChunks < 4) {
 | 
			
		||||
            // Initial chunks can not spawn the good stuff
 | 
			
		||||
            weights[enumSubShape.star] = 0;
 | 
			
		||||
            weights[enumSubShape.windmill] = 0;
 | 
			
		||||
@ -188,6 +188,18 @@ export class MapChunk {
 | 
			
		||||
            ];
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Makes sure windmills never spawn as whole
 | 
			
		||||
        let windmillCount = 0;
 | 
			
		||||
        for (let i = 0; i < subShapes.length; ++i) {
 | 
			
		||||
            if (subShapes[i] === enumSubShape.windmill) {
 | 
			
		||||
                ++windmillCount;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        if (windmillCount > 1) {
 | 
			
		||||
            subShapes[0] = enumSubShape.rect;
 | 
			
		||||
            subShapes[1] = enumSubShape.rect;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        const definition = this.root.shapeDefinitionMgr.getDefinitionFromSimpleShapes(subShapes);
 | 
			
		||||
        this.internalGeneratePatch(rng, shapePatchSize, new ShapeItem(definition));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -12,142 +12,122 @@ export const enumHubGoalRewards = {
 | 
			
		||||
    reward_splitter: "reward_splitter",
 | 
			
		||||
    reward_tunnel: "reward_tunnel",
 | 
			
		||||
 | 
			
		||||
    reward_rotater_ccw: "reward_rotater_ccw",
 | 
			
		||||
    reward_miner_chainable: "reward_miner_chainable",
 | 
			
		||||
    reward_underground_belt_tier_2: "reward_underground_belt_tier_2",
 | 
			
		||||
    reward_splitter_compact: "reward_splitter_compact",
 | 
			
		||||
    reward_cutter_quad: "reward_cutter_quad",
 | 
			
		||||
    reward_painter_double: "reward_painter_double",
 | 
			
		||||
    reward_painter_quad: "reward_painter_quad",
 | 
			
		||||
 | 
			
		||||
    reward_freeplay: "reward_freeplay",
 | 
			
		||||
 | 
			
		||||
    no_reward: "no_reward",
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
export const tutorialGoals = [
 | 
			
		||||
    // Circle
 | 
			
		||||
    {
 | 
			
		||||
        shape: "CuCuCuCu",
 | 
			
		||||
        required: 40,
 | 
			
		||||
        shape: "CuCuCuCu", // belts t1
 | 
			
		||||
        required: 60,
 | 
			
		||||
        reward: enumHubGoalRewards.reward_cutter_and_trash,
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    // Cutter
 | 
			
		||||
    {
 | 
			
		||||
        shape: "CuCu----",
 | 
			
		||||
        required: 150,
 | 
			
		||||
        reward: enumHubGoalRewards.no_reward,
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    {
 | 
			
		||||
        shape: "----CuCu",
 | 
			
		||||
        required: 200,
 | 
			
		||||
        reward: enumHubGoalRewards.reward_splitter,
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    // Rectangle
 | 
			
		||||
    {
 | 
			
		||||
        shape: "RuRuRuRu",
 | 
			
		||||
        shape: "----CuCu", //
 | 
			
		||||
        required: 80,
 | 
			
		||||
        reward: enumHubGoalRewards.no_reward,
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    // Rectangle
 | 
			
		||||
    {
 | 
			
		||||
        shape: "RuRu----",
 | 
			
		||||
        required: 250,
 | 
			
		||||
        shape: "RuRuRuRu", // miners t1
 | 
			
		||||
        required: 100,
 | 
			
		||||
        reward: enumHubGoalRewards.reward_splitter,
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    {
 | 
			
		||||
        shape: "RuRu----", // processors t2
 | 
			
		||||
        required: 350,
 | 
			
		||||
        reward: enumHubGoalRewards.reward_rotater,
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    // Rotater
 | 
			
		||||
    {
 | 
			
		||||
        shape: "--CuCu--",
 | 
			
		||||
        shape: "--CuCu--", // belts t2
 | 
			
		||||
        required: 300,
 | 
			
		||||
        reward: enumHubGoalRewards.no_reward,
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    {
 | 
			
		||||
        shape: "Ru----Ru",
 | 
			
		||||
        required: 400,
 | 
			
		||||
        reward: enumHubGoalRewards.reward_tunnel,
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    {
 | 
			
		||||
        shape: "Cu------",
 | 
			
		||||
        required: 800,
 | 
			
		||||
        reward: enumHubGoalRewards.no_reward,
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    {
 | 
			
		||||
        shape: "------Ru",
 | 
			
		||||
        shape: "Cu------", // miners t2
 | 
			
		||||
        required: 1000,
 | 
			
		||||
        reward: enumHubGoalRewards.reward_painter,
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    // Painter
 | 
			
		||||
    {
 | 
			
		||||
        shape: "CrCrCrCr",
 | 
			
		||||
        shape: "CrCrCrCr", // unused
 | 
			
		||||
        required: 1500,
 | 
			
		||||
        reward: enumHubGoalRewards.no_reward,
 | 
			
		||||
        reward: enumHubGoalRewards.reward_rotater_ccw,
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    {
 | 
			
		||||
        shape: "RbRb----",
 | 
			
		||||
        shape: "RbRb----", // painter t2
 | 
			
		||||
        required: 2500,
 | 
			
		||||
        reward: enumHubGoalRewards.reward_mixer,
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    // Mixing (purple)
 | 
			
		||||
    {
 | 
			
		||||
        shape: "CpCpCpCp",
 | 
			
		||||
        shape: "CpCpCpCp", // belts t3
 | 
			
		||||
        required: 4000,
 | 
			
		||||
        reward: enumHubGoalRewards.no_reward,
 | 
			
		||||
        reward: enumHubGoalRewards.reward_splitter_compact,
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    // Star shape + cyan
 | 
			
		||||
    {
 | 
			
		||||
        shape: "ScScScSc",
 | 
			
		||||
        required: 500,
 | 
			
		||||
        shape: "ScScScSc", // miners t3
 | 
			
		||||
        required: 5000,
 | 
			
		||||
        reward: enumHubGoalRewards.reward_stacker,
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    // Stacker
 | 
			
		||||
    {
 | 
			
		||||
        shape: "CgScScCg",
 | 
			
		||||
        required: 3000,
 | 
			
		||||
        reward: enumHubGoalRewards.no_reward,
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    {
 | 
			
		||||
        shape: "RpRpRpRp:CcCcCcCc",
 | 
			
		||||
        required: 4000,
 | 
			
		||||
        reward: enumHubGoalRewards.no_reward,
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    {
 | 
			
		||||
        shape: "RgCwRgCw:CpCpCpCp",
 | 
			
		||||
        shape: "CgScScCg", // processors t3
 | 
			
		||||
        required: 6000,
 | 
			
		||||
        reward: enumHubGoalRewards.no_reward,
 | 
			
		||||
        reward: enumHubGoalRewards.reward_miner_chainable,
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    {
 | 
			
		||||
        shape: "CwSwCwSw:CpCrCpCr",
 | 
			
		||||
        required: 6000,
 | 
			
		||||
        reward: enumHubGoalRewards.no_reward,
 | 
			
		||||
        shape: "RpRpRpRp:CwCwCwCw", // painting t3
 | 
			
		||||
        required: 7000,
 | 
			
		||||
        reward: enumHubGoalRewards.reward_underground_belt_tier_2,
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    {
 | 
			
		||||
        shape: "WyWyWyWy",
 | 
			
		||||
        required: 2000,
 | 
			
		||||
        reward: enumHubGoalRewards.no_reward,
 | 
			
		||||
        shape: "SrSrSrSr:CyCyCyCy:SwSwSwSw", // belts t4 (two variants)
 | 
			
		||||
        required: 8000,
 | 
			
		||||
        reward: enumHubGoalRewards.reward_cutter_quad,
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    {
 | 
			
		||||
        shape: "WyWgWyWg:CbCpCbCp",
 | 
			
		||||
        required: 4000,
 | 
			
		||||
        reward: enumHubGoalRewards.no_reward,
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    {
 | 
			
		||||
        shape: "WyRgWyRg:CbCpCbCp:CpCgCpCg",
 | 
			
		||||
        shape: "CbRbRbCb:CwCwCwCw:WbWbWbWb", // miner t4 (two variants)
 | 
			
		||||
        required: 9000,
 | 
			
		||||
        reward: enumHubGoalRewards.no_reward,
 | 
			
		||||
        reward: enumHubGoalRewards.reward_painter_double,
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    {
 | 
			
		||||
        shape: "CwRrCbRy:ScSrSpSb:CwCwCwCw:RgRgRgRg",
 | 
			
		||||
        required: 15000,
 | 
			
		||||
        reward: enumHubGoalRewards.no_reward,
 | 
			
		||||
        shape: "WrRgWrRg:CwCrCwCr:SgSgSgSg", // processors t4 (two varinats)
 | 
			
		||||
        required: 10000,
 | 
			
		||||
        reward: enumHubGoalRewards.reward_painter_quad,
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    {
 | 
			
		||||
        shape: "RuCw--Cw:----Ru--",
 | 
			
		||||
        required: 50000,
 | 
			
		||||
        reward: enumHubGoalRewards.reward_freeplay,
 | 
			
		||||
    },
 | 
			
		||||
];
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,94 +1,132 @@
 | 
			
		||||
import { findNiceIntegerValue } from "../core/utils";
 | 
			
		||||
import { ShapeDefinition } from "./shape_definition";
 | 
			
		||||
 | 
			
		||||
const finalShape = "RuCw--Cw:----Ru--";
 | 
			
		||||
 | 
			
		||||
export const UPGRADES = {
 | 
			
		||||
    belt: {
 | 
			
		||||
        tiers: [
 | 
			
		||||
            {
 | 
			
		||||
                required: [{ shape: "CuCuCuCu", amount: 80 }],
 | 
			
		||||
                required: [{ shape: "CuCuCuCu", amount: 150 }],
 | 
			
		||||
                improvement: 1,
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
                required: [{ shape: "Ru----Ru", amount: 4000 }],
 | 
			
		||||
                required: [{ shape: "--CuCu--", amount: 1500 }],
 | 
			
		||||
                improvement: 2,
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
                required: [{ shape: "CwSwCwSw", amount: 30000 }],
 | 
			
		||||
                required: [{ shape: "CpCpCpCp", amount: 15000 }],
 | 
			
		||||
                improvement: 4,
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
                required: [{ shape: "RgRgSpSp:CwSwCwSw:Cr--Sw--", amount: 80000 }],
 | 
			
		||||
                required: [{ shape: "SrSrSrSr:CyCyCyCy", amount: 40000 }],
 | 
			
		||||
                improvement: 4,
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
                required: [{ shape: "SrSrSrSr:CyCyCyCy:SwSwSwSw", amount: 40000 }],
 | 
			
		||||
                improvement: 4,
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
                required: [{ shape: finalShape, amount: 150000 }],
 | 
			
		||||
                improvement: 4,
 | 
			
		||||
                excludePrevious: true,
 | 
			
		||||
            },
 | 
			
		||||
        ],
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    miner: {
 | 
			
		||||
        tiers: [
 | 
			
		||||
            {
 | 
			
		||||
                required: [{ shape: "RuRuRuRu", amount: 200 }],
 | 
			
		||||
                required: [{ shape: "RuRuRuRu", amount: 400 }],
 | 
			
		||||
                improvement: 1,
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
                required: [{ shape: "Cu------", amount: 4000 }],
 | 
			
		||||
                required: [{ shape: "Cu------", amount: 5500 }],
 | 
			
		||||
                improvement: 2,
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
                required: [{ shape: "WyWgWyWg:CbCpCbCp", amount: 30000 }],
 | 
			
		||||
                required: [{ shape: "ScScScSc", amount: 20000 }],
 | 
			
		||||
                improvement: 4,
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
                required: [{ shape: "WyWgWyWg:CbCpCbCp:Rp----Rp", amount: 90000 }],
 | 
			
		||||
                required: [{ shape: "CwCwCwCw:WbWbWbWb", amount: 40000 }],
 | 
			
		||||
                improvement: 4,
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
                required: [{ shape: "CbRbRbCb:CwCwCwCw:WbWbWbWb", amount: 40000 }],
 | 
			
		||||
                improvement: 4,
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
                required: [{ shape: finalShape, amount: 150000 }],
 | 
			
		||||
                improvement: 4,
 | 
			
		||||
                excludePrevious: true,
 | 
			
		||||
            },
 | 
			
		||||
        ],
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    processors: {
 | 
			
		||||
        tiers: [
 | 
			
		||||
            {
 | 
			
		||||
                required: [{ shape: "SuSuSuSu", amount: 200 }],
 | 
			
		||||
                required: [{ shape: "SuSuSuSu", amount: 1000 }],
 | 
			
		||||
                improvement: 1,
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
                required: [{ shape: "Cu------", amount: 4000 }],
 | 
			
		||||
                required: [{ shape: "RuRu----", amount: 2000 }],
 | 
			
		||||
                improvement: 2,
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
                required: [{ shape: "WyWgWyWg:CbCpCbCp", amount: 30000 }],
 | 
			
		||||
                required: [{ shape: "CgScScCg", amount: 25000 }],
 | 
			
		||||
                improvement: 4,
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
                required: [{ shape: "WyWgWyWg:CbCpCbCp:Rp----Rp", amount: 90000 }],
 | 
			
		||||
                required: [{ shape: "CwCrCwCr:SgSgSgSg", amount: 40000 }],
 | 
			
		||||
                improvement: 4,
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
                required: [{ shape: "WrRgWrRg:CwCrCwCr:SgSgSgSg", amount: 40000 }],
 | 
			
		||||
                improvement: 4,
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
                required: [{ shape: finalShape, amount: 150000 }],
 | 
			
		||||
                improvement: 4,
 | 
			
		||||
                excludePrevious: true,
 | 
			
		||||
            },
 | 
			
		||||
        ],
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    painting: {
 | 
			
		||||
        tiers: [
 | 
			
		||||
            {
 | 
			
		||||
                required: [{ shape: "WuWuWuWu", amount: 200 }],
 | 
			
		||||
                required: [{ shape: "WrWrWrWr", amount: 2000 }],
 | 
			
		||||
                improvement: 1,
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
                required: [{ shape: "Cu------", amount: 4000 }],
 | 
			
		||||
                required: [{ shape: "RbRb----", amount: 4000 }],
 | 
			
		||||
                improvement: 2,
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
                required: [{ shape: "WyWgWyWg:CbCpCbCp", amount: 30000 }],
 | 
			
		||||
                required: [{ shape: "RpRpRpRp:CwCwCwCw", amount: 30000 }],
 | 
			
		||||
                improvement: 4,
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
                required: [{ shape: "WyWgWyWg:CbCpCbCp:Rp----Rp", amount: 90000 }],
 | 
			
		||||
                required: [{ shape: "WpWpWpWp:CwCwCwCw:WpWpWpWp", amount: 40000 }],
 | 
			
		||||
                improvement: 4,
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
                required: [{ shape: "WpWpWpWp:CwCwCwCw:WpWpWpWp:CwCwCwCw", amount: 40000 }],
 | 
			
		||||
                improvement: 4,
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
                required: [{ shape: finalShape, amount: 150000 }],
 | 
			
		||||
                improvement: 4,
 | 
			
		||||
                excludePrevious: true,
 | 
			
		||||
            },
 | 
			
		||||
        ],
 | 
			
		||||
    },
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// Tiers need % of the previous tier as requirement too
 | 
			
		||||
const tierGrowth = 2;
 | 
			
		||||
const tierGrowth = 2.5;
 | 
			
		||||
 | 
			
		||||
// Automatically generate tier levels
 | 
			
		||||
for (const upgradeId in UPGRADES) {
 | 
			
		||||
@ -101,10 +139,12 @@ for (const upgradeId in UPGRADES) {
 | 
			
		||||
 | 
			
		||||
        for (let k = currentTierRequirements.length - 1; k >= 0; --k) {
 | 
			
		||||
            const oldTierRequirement = currentTierRequirements[k];
 | 
			
		||||
            tierHandle.required.unshift({
 | 
			
		||||
                shape: oldTierRequirement.shape,
 | 
			
		||||
                amount: oldTierRequirement.amount,
 | 
			
		||||
            });
 | 
			
		||||
            if (!tierHandle.excludePrevious) {
 | 
			
		||||
                tierHandle.required.unshift({
 | 
			
		||||
                    shape: oldTierRequirement.shape,
 | 
			
		||||
                    amount: oldTierRequirement.amount,
 | 
			
		||||
                });
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        currentTierRequirements.push(
 | 
			
		||||
            ...originalRequired.map(req => ({
 | 
			
		||||
 | 
			
		||||
@ -266,6 +266,16 @@ storyRewards:
 | 
			
		||||
    reward_splitter: Splitter/Merger
 | 
			
		||||
    reward_tunnel: Tunnel
 | 
			
		||||
 | 
			
		||||
    reward_rotater_ccw: CCW Rotating
 | 
			
		||||
    reward_miner_chainable: Chaining Extractor
 | 
			
		||||
    reward_underground_belt_tier_2: Tunnel Tier II
 | 
			
		||||
    reward_splitter_compact: Compact Balancer
 | 
			
		||||
    reward_cutter_quad: Quad Cutting
 | 
			
		||||
    reward_painter_double: Double Painting
 | 
			
		||||
    reward_painter_quad: Quad Painting
 | 
			
		||||
 | 
			
		||||
    reward_freeplay: Freeplay
 | 
			
		||||
 | 
			
		||||
    # Special reward, which is shown when there is no reward actually
 | 
			
		||||
    no_reward: Next level
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user