Game balance audit: wire research effects, rework capability formula, fix dead systems
CI / build-and-push (push) Successful in 32s

- Create researchBonuses utility to aggregate tech tree effects into all game systems
  (infrastructure energy costs, compute efficiency, training speed, model capability, reputation)
- Rework model capability from sqrt(compute) to 4-pillar formula (params + compute + data + research)
- Make context window affect benchmarks and inference speed
- Add MoE tradeoffs: 1.5x VRAM, 0.8x training speed
- Enforce research point costs as a gate for unlocking research
- Add real consequences to data contamination events (reputation hit, legal costs)
- Scale talent costs from $0.03 to $5/tick per headcount
- Scale compliance costs 100x to be meaningful
- Rework competitor acquisition: cheaper but grants headcount, RP, and reputation
- Remove dead code: sfxVolume, autoSaveInterval, notificationsEnabled,
  FAST_FORWARD_BATCH_SIZE, CHINCHILLA_OPTIMAL_RATIO

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-25 09:36:31 -04:00
parent 8d650fefae
commit 00e790591e
14 changed files with 205 additions and 54 deletions
@@ -0,0 +1,80 @@
import { TECH_TREE } from '../data/techTree';
export interface ResearchBonuses {
energyCostReduction: number;
pipelineSpeedBonus: number;
trainingSpeedBonus: number;
inferenceEfficiencyBonus: number;
tokensPerFlopBonus: number;
dataQualityBonus: number;
sdkCoverageBonus: number;
globalCapabilityBonus: number;
reasoningBonus: number;
codingBonus: number;
creativeBonus: number;
multimodalBonus: number;
agentsBonus: number;
reputationBonus: number;
safetyBonus: number;
}
export function getResearchBonuses(completedResearch: string[]): ResearchBonuses {
const bonuses: ResearchBonuses = {
energyCostReduction: 0,
pipelineSpeedBonus: 0,
trainingSpeedBonus: 0,
inferenceEfficiencyBonus: 0,
tokensPerFlopBonus: 0,
dataQualityBonus: 0,
sdkCoverageBonus: 0,
globalCapabilityBonus: 0,
reasoningBonus: 0,
codingBonus: 0,
creativeBonus: 0,
multimodalBonus: 0,
agentsBonus: 0,
reputationBonus: 0,
safetyBonus: 0,
};
for (const id of completedResearch) {
const node = TECH_TREE.find(n => n.id === id);
if (!node) continue;
for (const effect of node.effects) {
switch (effect.type) {
case 'efficiency_boost':
switch (effect.target) {
case 'training_speed': bonuses.trainingSpeedBonus += effect.value; break;
case 'inference': bonuses.inferenceEfficiencyBonus += effect.value; break;
case 'tokens_per_flop': bonuses.tokensPerFlopBonus += effect.value; break;
case 'pipeline_speed': bonuses.pipelineSpeedBonus += effect.value; break;
case 'data_quality': bonuses.dataQualityBonus += effect.value; break;
case 'sdk_coverage': bonuses.sdkCoverageBonus += effect.value; break;
}
break;
case 'capability_boost':
switch (effect.target) {
case 'all': bonuses.globalCapabilityBonus += effect.value; break;
case 'reasoning': bonuses.reasoningBonus += effect.value; break;
case 'coding': bonuses.codingBonus += effect.value; break;
case 'creative': bonuses.creativeBonus += effect.value; break;
case 'multimodal': bonuses.multimodalBonus += effect.value; break;
case 'agents': bonuses.agentsBonus += effect.value; break;
case 'reputation': bonuses.reputationBonus += effect.value; break;
}
break;
case 'cost_reduction':
if (effect.target === 'energy') bonuses.energyCostReduction += effect.value;
break;
case 'safety_boost':
bonuses.safetyBonus += effect.value;
break;
}
}
}
return bonuses;
}