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:
@@ -42,7 +42,7 @@ import {
|
||||
} from '@ai-tycoon/shared';
|
||||
import {
|
||||
emptyDCNetworkSummary, emptyCampusNetworkSummary, emptyClusterNetworkSummary,
|
||||
BENCHMARKS,
|
||||
BENCHMARKS, TECH_TREE,
|
||||
} from '@ai-tycoon/game-engine';
|
||||
import { INITIAL_RIVALS } from '@ai-tycoon/game-engine';
|
||||
|
||||
@@ -1117,8 +1117,15 @@ export const useGameStore = create<Store>()(
|
||||
|
||||
startResearch: (research) => set((s) => {
|
||||
if (s.research.activeResearch) return s;
|
||||
const node = TECH_TREE.find(n => n.id === research.researchId);
|
||||
const rpCost = node?.cost.researchPoints ?? 0;
|
||||
if (rpCost > s.research.researchPoints) return s;
|
||||
return {
|
||||
research: { ...s.research, activeResearch: research },
|
||||
research: {
|
||||
...s.research,
|
||||
activeResearch: research,
|
||||
researchPoints: s.research.researchPoints - rpCost,
|
||||
},
|
||||
};
|
||||
}),
|
||||
|
||||
@@ -1202,8 +1209,9 @@ export const useGameStore = create<Store>()(
|
||||
acquireCompetitor: (competitorId) => set((s) => {
|
||||
const rival = s.competitors.rivals.find(r => r.id === competitorId);
|
||||
if (!rival || rival.status === 'acquired') return s;
|
||||
const cost = rival.estimatedRevenue * 500 + rival.estimatedCapability * 100_000;
|
||||
const cost = rival.estimatedRevenue * 50 + rival.estimatedCapability * 20_000;
|
||||
if (s.economy.money < cost) return s;
|
||||
const rpGain = Math.floor(rival.estimatedCapability / 15);
|
||||
return {
|
||||
economy: { ...s.economy, money: s.economy.money - cost },
|
||||
competitors: {
|
||||
@@ -1217,9 +1225,18 @@ export const useGameStore = create<Store>()(
|
||||
departments: {
|
||||
...s.talent.departments,
|
||||
research: { ...s.talent.departments.research, headcount: s.talent.departments.research.headcount + 5 },
|
||||
engineering: { ...s.talent.departments.engineering, headcount: s.talent.departments.engineering.headcount + 3 },
|
||||
engineering: { ...s.talent.departments.engineering, headcount: s.talent.departments.engineering.headcount + 5 },
|
||||
sales: { ...s.talent.departments.sales, headcount: s.talent.departments.sales.headcount + 3 },
|
||||
},
|
||||
},
|
||||
research: {
|
||||
...s.research,
|
||||
researchPoints: s.research.researchPoints + rpGain,
|
||||
},
|
||||
reputation: {
|
||||
...s.reputation,
|
||||
publicPerception: Math.min(100, s.reputation.publicPerception + 5),
|
||||
},
|
||||
};
|
||||
}),
|
||||
|
||||
|
||||
Reference in New Issue
Block a user