idle-economy/engine/src/rulesets/rules.ts

63 lines
2.6 KiB
TypeScript

import Decimal from "break_eternity.js";
import type { GameRules } from "../rules/GameRules";
import { simpleResGen, resourceGen } from './utils';
import { ResourceSet } from "../game";
export const rules: GameRules = {
startResources: { prestigeMul: new Decimal(1) },
generators: [
{
name: 'white',
startingLevel: 1,
resetProgressOnUpgrade: true,
manualGeneration: true,
period: (level) => level ? 3 : 0,
isVisible: () => true,
upgradePrice: () => ResourceSet.zero,
isUpgradable: () => false,
generationGain: (level, game) => resourceGen({ RED: { offset: 14, power: 2, factor: 1 } }, level),
onGenerate: (level, game, gain) => game.resources.add(gain),
},
simpleResGen({
name: 'red',
startingLevel: 1,
period: 1,
upgradePrice: { RED: { offset: 3, power: 2.1, factor: 10 } },
generatesResources: { RED: { offset: 3, power: 1.5, factor: 1 } },
}),
...['orange', 'yellow', 'green', 'cyan', 'blue', 'violet']
.map((color, idx) => simpleResGen({
name: color,
period: idx + 2,
generatesResources: { RED: { power: 1.5, factor: (idx + 2) ** 2 } },
// visibilityPrice: { RED: { offset: 5 * 10 ** (idx + 1) } },
upgradePrice: { RED: { offset: 10 ** (idx + 2), power: 2.1, factor: 10 * 5 ** (idx + 1) } }
})),
// {
// name: 'prestige',
// startingLevel: 0,
// period: () => 0,
// // generation: resourceGen({ prestigeMul: { offset: 0, power: 0.2, factor: 1 } }),
// openPrice: (level) => ({ RED: new Decimal(50) }),
// upgradePrice: () => ({}),
// visibilityPrice: () => ({}),
// manualProgressReset: true,
// resetProgressOnUpgrade: true,
// generation: (level, game, dryRun) => {
// if (!dryRun) {
// console.log('prestige ' + level);
// game.generators.filter((gen) => gen.rule.name !== 'prestige').forEach((gen) => gen.reset());
// ResourceSet.transform(
// game.resources.keys().filter((res) => res != 'prestigeMul'),
// game.resources,
// () => Decimal.dZero,
// );
// }
// return resourceGen({ prestigeMul: { offset: 0, power: 1, factor: 1 } })(level, game);
// // game.resources.clear();
// }
// }
],
}