Game balance audit: wire research effects, rework capability formula, fix dead systems
CI / build-and-push (push) Successful in 32s
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:
@@ -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;
|
||||
}
|
||||
Reference in New Issue
Block a user