Remove events system entirely
CI / build-and-push (push) Successful in 36s

The random events (GPU shortages, regulatory hearings, PR crises, etc.)
added interruption without enough gameplay value. Removed all event
types, definitions (~1800 lines of event data), the event processor,
EventModal UI, store actions, and tick integration. Updated docs to
reflect the removal. Bundle size drops ~47kB.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-24 19:54:44 -04:00
parent 0005e580a7
commit 95f2f97121
16 changed files with 16 additions and 2191 deletions
@@ -7,7 +7,6 @@ export const FAST_FORWARD_BATCH_SIZE = 100;
export const AUTO_SAVE_INTERVAL_TICKS = 60;
export const FINANCIAL_SNAPSHOT_INTERVAL = 60;
export const MAX_FINANCIAL_HISTORY = 1000;
export const MAX_EVENT_HISTORY = 50;
export const MAX_REPUTATION_HISTORY = 500;
export const STARTING_MONEY = 50_000;
-1
View File
@@ -9,7 +9,6 @@ export * from './types/competitors';
export * from './types/talent';
export * from './types/data';
export * from './types/reputation';
export * from './types/events';
export * from './types/achievements';
export * from './utils/formatting';
export * from './constants/gameBalance';
-74
View File
@@ -1,74 +0,0 @@
import type { Era } from './gameState';
export interface EventState {
activeEvents: ActiveEvent[];
eventHistory: EventHistoryEntry[];
eventCooldowns: Record<string, number>;
eventOccurrences: Record<string, number>;
}
export interface ActiveEvent {
eventId: string;
instanceId: string;
triggeredAtTick: number;
expiresAtTick: number;
title: string;
description: string;
category: EventCategory;
choices: EventChoice[];
defaultChoiceIndex: number;
}
export type EventCategory = 'industry' | 'regulatory' | 'pr' | 'internal' | 'market';
export interface EventChoice {
label: string;
description: string;
consequences: EventConsequence[];
}
export interface EventConsequence {
type: 'money' | 'reputation' | 'compute' | 'talent' | 'research_speed'
| 'regulation' | 'competitor' | 'unlock' | 'lock' | 'chain_event';
value: number;
target?: string;
delay?: number;
}
export interface EventHistoryEntry {
eventId: string;
instanceId: string;
title: string;
category: EventCategory;
tick: number;
chosenOptionIndex: number;
}
export interface EventDefinition {
id: string;
title: string;
descriptionTemplate: string;
category: EventCategory;
eras: Era[];
weight: number;
cooldownTicks: number;
maxOccurrences: number;
prerequisites: string[];
conditions: EventCondition[];
choices: EventChoice[];
defaultChoiceIndex: number;
expiryTicks: number;
}
export interface EventCondition {
field: string;
operator: 'gt' | 'lt' | 'gte' | 'lte' | 'eq';
value: number;
}
export const INITIAL_EVENTS: EventState = {
activeEvents: [],
eventHistory: [],
eventCooldowns: {},
eventOccurrences: {},
};
-2
View File
@@ -8,7 +8,6 @@ import type { CompetitorState } from './competitors';
import type { TalentState } from './talent';
import type { DataState } from './data';
import type { ReputationState } from './reputation';
import type { EventState } from './events';
import type { AchievementState } from './achievements';
export interface GameState {
@@ -23,7 +22,6 @@ export interface GameState {
talent: TalentState;
data: DataState;
reputation: ReputationState;
events: EventState;
achievements: AchievementState;
}