feat: New features (research, invest, gambling, new game+, trophies)
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
// Gathers every source of bonuses for the current state and folds them.
|
||||
|
||||
import { foldEffects } from './effects.js';
|
||||
import { chipDemandBonus } from './formulas.js';
|
||||
|
||||
/** All `{ effect, times }` entries that apply to `state`. */
|
||||
export function collectEffects(state, ctx) {
|
||||
const entries = [];
|
||||
|
||||
for (const id of state.upgrades) entries.push({ effect: ctx.upgradesById.get(id)?.effect });
|
||||
for (const id of state.research) entries.push({ effect: ctx.researchById.get(id)?.effect });
|
||||
for (const id of state.achievements) entries.push({ effect: ctx.achievementsById.get(id)?.effect });
|
||||
|
||||
for (const [id, level] of Object.entries(state.legacy.perks)) {
|
||||
entries.push({ effect: ctx.perksById.get(id)?.effect, times: level });
|
||||
}
|
||||
|
||||
// Every legacy point ever earned gives a small passive bonus.
|
||||
const passive = 1 + ctx.rules.legacy.passivePerPoint;
|
||||
entries.push({ effect: { type: 'global_mult', value: passive }, times: state.legacy.earned });
|
||||
entries.push({ effect: { type: 'demand_mult', value: passive }, times: state.legacy.earned });
|
||||
|
||||
// Chips make the brand more attractive, with diminishing returns.
|
||||
entries.push({
|
||||
effect: { type: 'demand_mult', value: chipDemandBonus(state.chips, ctx.rules.gamble) },
|
||||
});
|
||||
|
||||
// Temporary buffs from events and contracts.
|
||||
for (const buff of state.events.buffs) entries.push({ effect: { type: buff.type, value: buff.value } });
|
||||
|
||||
return entries;
|
||||
}
|
||||
|
||||
export function modifiersFor(state, ctx) {
|
||||
return foldEffects(collectEffects(state, ctx));
|
||||
}
|
||||
Reference in New Issue
Block a user