79 lines
3.0 KiB
TypeScript
79 lines
3.0 KiB
TypeScript
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();
|
|
// }
|
|
// }
|
|
],
|
|
});
|