This repository has been archived on 2021-02-20. You can view files and clone it, but cannot push or open issues or pull requests.
shapez.io/src/js/game/upgrades.js

166 lines
4.6 KiB
JavaScript

import { findNiceIntegerValue } from "../core/utils";
import { ShapeDefinition } from "./shape_definition";
export const TIER_LABELS = [
"I",
"II",
"III",
"IV",
"V",
"VI",
"VII",
"VIII",
"IX",
"X",
"XI",
"XII",
"XIII",
"XIV",
"XV",
"XVI",
"XVII",
"XVIII",
"XIX",
"XX",
];
export const UPGRADES = {
belt: {
label: "Belts, Distributer & Tunnels",
description: improvement => "Speed +" + Math.floor(improvement * 100.0) + "%",
tiers: [
{
required: [{ shape: "CuCuCuCu", amount: 80 }],
improvement: 1,
},
{
required: [{ shape: "Ru----Ru", amount: 4000 }],
improvement: 2,
},
{
required: [{ shape: "CwSwCwSw", amount: 30000 }],
improvement: 4,
},
{
required: [{ shape: "RgRgSpSp:CwSwCwSw:Cr--Sw--", amount: 80000 }],
improvement: 4,
},
],
},
miner: {
label: "Extraction",
description: improvement => "Speed +" + Math.floor(improvement * 100.0) + "%",
tiers: [
{
required: [{ shape: "RuRuRuRu", amount: 200 }],
improvement: 1,
},
{
required: [{ shape: "Cu------", amount: 4000 }],
improvement: 2,
},
{
required: [{ shape: "WyWgWyWg:CbCpCbCp", amount: 30000 }],
improvement: 4,
},
{
required: [{ shape: "WyWgWyWg:CbCpCbCp:Rp----Rp", amount: 90000 }],
improvement: 4,
},
],
},
processors: {
label: "Shape Processing",
description: improvement => "Speed +" + Math.floor(improvement * 100.0) + "%",
tiers: [
{
required: [{ shape: "RuRuRuRu", amount: 200 }],
improvement: 1,
},
{
required: [{ shape: "Cu------", amount: 4000 }],
improvement: 2,
},
{
required: [{ shape: "WyWgWyWg:CbCpCbCp", amount: 30000 }],
improvement: 4,
},
{
required: [{ shape: "WyWgWyWg:CbCpCbCp:Rp----Rp", amount: 90000 }],
improvement: 4,
},
],
},
painting: {
label: "Mixing & Painting",
description: improvement => "Speed +" + Math.floor(improvement * 100.0) + "%",
tiers: [
{
required: [{ shape: "RuRuRuRu", amount: 200 }],
improvement: 1,
},
{
required: [{ shape: "Cu------", amount: 4000 }],
improvement: 2,
},
{
required: [{ shape: "WyWgWyWg:CbCpCbCp", amount: 30000 }],
improvement: 4,
},
{
required: [{ shape: "WyWgWyWg:CbCpCbCp:Rp----Rp", amount: 90000 }],
improvement: 4,
},
],
},
};
// Tiers need % of the previous tier as requirement too
const tierGrowth = 2;
// Automatically generate tier levels
for (const upgradeId in UPGRADES) {
const upgrade = UPGRADES[upgradeId];
let currentTierRequirements = [];
for (let i = 0; i < upgrade.tiers.length; ++i) {
const tierHandle = upgrade.tiers[i];
const originalRequired = tierHandle.required.slice();
for (let k = currentTierRequirements.length - 1; k >= 0; --k) {
const oldTierRequirement = currentTierRequirements[k];
tierHandle.required.unshift({
shape: oldTierRequirement.shape,
amount: oldTierRequirement.amount,
});
}
currentTierRequirements.push(
...originalRequired.map(req => ({
amount: req.amount,
shape: req.shape,
}))
);
currentTierRequirements.forEach(tier => {
tier.amount = findNiceIntegerValue(tier.amount * tierGrowth);
});
}
}
if (G_IS_DEV) {
for (const upgradeId in UPGRADES) {
const upgrade = UPGRADES[upgradeId];
upgrade.tiers.forEach(tier => {
tier.required.forEach(({ shape }) => {
try {
ShapeDefinition.fromShortKey(shape);
} catch (ex) {
throw new Error("Invalid upgrade goal: '" + ex + "' for shape" + shape);
}
});
});
}
}