import Decimal from "break_eternity.js"; import type { GameRules } from "../rules/GameRules"; import { resourceGen, classicResGen } from './utils'; import { ResourceSet } from "../game"; export type GameRulesOptions = { startingResources: number, upgradeBasePrice: number, generationBasePrice: number, upgradeFactor: number, generationPower: number, } export const defaultGameRulesOptions: GameRulesOptions = { startingResources: 100, generationBasePrice: 0.2, generationPower: 0.3, upgradeBasePrice: 100, upgradeFactor: 1.01, } export const rules: (options: GameRulesOptions) => GameRules = (options) => ({ startResources: { RED: new Decimal(options.startingResources), 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: (level) => level === 0 ? 0 : Math.pow(0.95, level - 1), // upgradePrice: { RED: { offset: 3, power: 2.1, factor: 10 } }, // generatesResources: { RED: { offset: 3, power: 1.5, factor: 1 } }, // }), // ...['red', 'orange', 'yellow', 'green', 'cyan', 'blue', 'violet'] ...['red'] .map((color, idx) => classicResGen(options, { name: color, startingLevel: 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(); // } // } ], });