Core Layer File Registry

January 24, 2026 · View on GitHub

Namespace: Core.* Purpose: Deterministic simulation - game state, logic, commands Rules: FixedPoint64 only, deterministic ops, command pattern for state changes


Systems/

  • Core.Systems.GameSystem - Base class for all game systems with lifecycle hooks
  • Core.Systems.SystemRegistry - Type-based system registry with dependency ordering
  • Core.Systems.TimeManager - Tick-based time, game speed, 360-day calendar, emits tick events
  • Core.Systems.AdjacencySystem - Province neighbor management with NativeParallelMultiHashMap; exposes NativeAdjacencyData for Burst jobs via GetNativeData()
  • Core.Systems.NativeAdjacencyData - Read-only struct for Burst-compatible neighbor queries (GetNeighbors enumerator, IsAdjacent)
  • Core.Systems.PathfindingSystem - Burst-compiled A* pathfinding with NativeMinHeap; managed fallback when MovementValidator needed
  • Core.Systems.BurstPathfindingJob - IJob implementing A* with binary heap, NativeHashSet closed set, NativeHashMap gScore/cameFrom
  • Core.Systems.ProvinceSystem - Facade for province data; exposes NativeProvinceData for Burst jobs via GetNativeData()
  • Core.Systems.NativeProvinceData - Read-only struct for Burst-compatible province queries (GetProvinceOwner, GetProvinceIdAtIndex)
  • Core.Systems.ProvinceSimulation - Province-level simulation logic (development, economy)
  • Core.Systems.CountrySystem - Facade for country data (delegates to DataManager, StateLoader)

Systems/Province/

  • Core.Systems.Province.ProvinceDataManager - NativeArray operations for province data
  • Core.Systems.Province.ProvinceStateLoader - Load and apply province initial states
  • Core.Systems.Province.ProvinceEvents - Events: SystemInitialized, OwnershipChanged, DevelopmentChanged

Systems/Country/

  • Core.Systems.Country.CountryDataManager - Hot/cold country data with SoA for colors
  • Core.Systems.Country.CountryStateLoader - Load and initialize country data from files
  • Core.Systems.Country.CountryEvents - Events: SystemInitialized, ColorChanged

Data/

  • Core.Data.ProvinceState - 8-byte ENGINE state: ownerID, controllerID, terrainType, gameDataSlot
  • Core.Data.ProvinceColdData - Rarely-accessed data: Name, Color, Bounds, RecentHistory, Modifiers
  • Core.Data.ProvinceInitialState - Initial province data from scenarios
  • Core.Data.ProvinceStateSerializer - Network serialization for ProvinceState
  • Core.Data.ProvinceHistoryDatabase - Bounded history storage (recent + compressed + stats)
  • Core.Data.CountryData - Hot (8-byte) + cold data structures
  • Core.Data.CountryDataLoadResult - Data transfer object for country loading results
  • Core.Data.Json5CountryData - JSON5 deserialization model for country data files
  • Core.Data.Json5ProvinceData - JSON5 deserialization model for province history files
  • Core.Data.FixedPoint64 - 32.32 fixed-point math (8 bytes), ALL simulation math uses this
  • Core.Data.DeterministicRandom - xorshift128+ RNG for deterministic random

Data/Ids/

  • Core.Data.Ids.ProvinceId - Type-safe province ID wrapper (ushort)
  • Core.Data.Ids.CountryId - Type-safe country ID wrapper (ushort)
  • Core.Data.Ids.TerrainId - Type-safe terrain ID wrapper (ushort)
  • Core.Data.Ids.BuildingId - Type-safe building ID wrapper (ushort)

Data/Math/

  • Core.Data.Math.FixedPointMath - FixedPoint32 (16.16 format), FixedPoint2 (2D vector)

Data/SparseData/

  • Core.Data.SparseData.IDefinition - Base interface for definitions (buildings, modifiers, etc.)
  • Core.Data.SparseData.ISparseCollection - Non-generic interface for sparse collection management
  • Core.Data.SparseData.SparseCollectionManager - Generic sparse storage with NativeParallelMultiHashMap

Commands/

  • Core.Commands.ICommand - Base command interface: Validate, Execute, Undo, Serialize/Deserialize
  • Core.Commands.BaseCommand - Abstract base with common utilities and logging
  • Core.Commands.SimpleCommand - Simplified command base with auto-serialization via [Arg] attributes
  • Core.Commands.CommandResult - Execution result struct with success/error info
  • Core.Commands.ICommandFactory - Factory interface for creating commands from string input
  • Core.Commands.CommandMetadataAttribute - Attribute for auto-discovery (name, aliases, description, examples)
  • Core.Commands.CommandRegistry - Auto-discovery registry with multi-assembly support
  • Core.Commands.ProvinceCommands - Collection of common province commands
  • Core.Commands.CommandProcessor - Command validation and execution with network sync; auto-registers commands, routes client→host→broadcast
  • Core.Commands.CommandLogger - Ring buffer for command history (last 6000 commands)

Diplomacy/ [FACADE_PATTERN]

  • Core.Diplomacy.DiplomacySystem - Facade for diplomatic relations (284 lines, delegates to managers)
  • Core.Diplomacy.DiplomacyRelationManager - Opinion calculations and modifiers (stateless, 255 lines)
  • Core.Diplomacy.DiplomacyWarManager - War state management (stateless, 226 lines)
  • Core.Diplomacy.DiplomacyTreatyManager - Treaty management (stateless, 423 lines)
  • Core.Diplomacy.DiplomacyModifierProcessor - Burst-compiled modifier decay (stateless, 126 lines)
  • Core.Diplomacy.DiplomacySaveLoadHandler - Save/load serialization (stateless, 204 lines)
  • Core.Diplomacy.DiplomacyKeyHelper - Key packing/unpacking utilities (46 lines)
  • Core.Diplomacy.RelationData - Hot relation state: baseOpinion, atWar, treatyFlags
  • Core.Diplomacy.OpinionModifier - Time-decaying modifier with FixedPoint64 value
  • Core.Diplomacy.ModifierWithKey - Flat storage struct (modifier + relationshipKey for Burst)
  • Core.Diplomacy.DecayModifiersJob - Burst IJobParallelFor for parallel decay processing
  • Core.Diplomacy.DiplomacyCommands - Commands: DeclareWar, MakePeace
  • Core.Diplomacy.TreatyCommands - Commands: ProposeTreaty, AcceptTreaty, BreakTreaty
  • Core.Diplomacy.DiplomacyEvents - Events: WarDeclared, PeaceMade, OpinionChanged

AI/

  • Core.AI.AISystem - Manages AI for all countries (tier-based scheduling, distance calculation)
  • Core.AI.AIState - 8-byte struct per country: countryID, tier, flags, activeGoalID, lastProcessedHour
  • Core.AI.AIGoal - Base class for AI goals (Evaluate/Execute pattern); Initialize(EventBus) for cache invalidation
  • Core.AI.AIScheduler - Hourly goal evaluation (tier-based intervals, year-wrap handling)
  • Core.AI.AIGoalRegistry - Plug-and-play goal registration; passes EventBus to goals for event subscription
  • Core.AI.AISchedulingConfig - Configurable tier definitions (distance thresholds, intervals)
  • Core.AI.AIDistanceCalculator - Burst-compiled BFS distance calculation via BurstBFSDistanceJob
  • Core.AI.BurstBFSDistanceJob - IJob for province graph traversal using NativeAdjacencyData and NativeProvinceData

Modifiers/

  • Core.Modifiers.ModifierSystem - Generic modifier system for gameplay bonuses/penalties
  • Core.Modifiers.ModifierValue - Modifier value with FixedPoint64 (Additive/Multiplicative)
  • Core.Modifiers.ModifierSet - Container for multiple modifiers by type
  • Core.Modifiers.ModifierSource - Source tracking for modifiers (building, trait, event)
  • Core.Modifiers.ActiveModifierList - Active modifiers with expiration tracking
  • Core.Modifiers.ScopedModifierContainer - Scoped modifier management (province/country level)

Resources/

  • Core.Resources.ResourceSystem - Multi-resource treasury management with FixedPoint64
  • Core.Resources.ResourceDefinition - Resource definition from JSON5

Units/

  • Core.Units.UnitSystem - Military unit management with movement, combat, organization
  • Core.Units.UnitState - 16-byte fixed state: unitID, ownerID, provinceID, typeID, organization, morale, strength, movementQueue
  • Core.Units.UnitColdData - Cold unit data: Name, Experience, CombatHistory, Equipment
  • Core.Units.UnitCommands - Commands: CreateUnit, MoveUnit, DisbandUnit
  • Core.Units.UnitMovementQueue - Movement queue for pathfinding and multi-province movement
  • Core.Units.UnitEvents - Events: UnitCreated, UnitMoved, UnitDisbanded, CombatResolved

Queries/

  • Core.Queries.Query - Static entry point for fluent query builders: Query.Provinces(gameState), Query.Countries(gameState), Query.Units(unitSystem)
  • Core.Queries.ProvinceQueryBuilder - Fluent province filtering: OwnedBy, WithTerrain, IsLand, AdjacentTo, BorderingCountry, WithinDistance; terminal ops Execute, Count, Any, FirstOrDefault
  • Core.Queries.CountryQueryBuilder - Fluent country filtering: WithMinProvinces, WithMaxProvinces, BorderingCountry, HasProvinces, WithGraphicalCulture
  • Core.Queries.UnitQueryBuilder - Fluent unit filtering: OwnedBy, NotOwnedBy, InProvince, OfType, WithMinTroops, WithMaxTroops; terminal ops Execute, Count, Any, FirstOrDefault, TotalTroops
  • Core.Queries.ProvinceQueries - Read-only province operations; includes distance queries (GetDistanceBetween, GetProvincesWithinDistance), connected region queries (GetConnectedLandmasses, GetLandmassCount), and border queries (GetProvincesBorderingCountry)
  • Core.Queries.CountryQueries - High-performance country access with frame-coherent caching; includes relationship queries (SharesBorder, GetBorderingCountries)

Registries/

  • Core.Registries.IRegistry - Registry interface: Register, Get, GetAll
  • Core.Registries.Registry - Generic registry implementation
  • Core.Registries.ProvinceRegistry - Province definitions
  • Core.Registries.CountryRegistry - Country definitions
  • Core.Registries.GameRegistries - Container for all game registries

Loaders/

Loader Factory Pattern

  • Core.Loaders.ILoaderFactory - Interface for auto-discoverable loaders; implement Load(LoaderContext)
  • Core.Loaders.LoaderMetadataAttribute - Attribute for loader metadata (name, priority, required flag)
  • Core.Loaders.LoaderRegistry - Auto-discovery registry; scans assemblies, executes in priority order
  • Core.Loaders.LoaderContext - Context passed to loaders (registries, data path, settings)

Loader Implementations

  • Core.Loaders.TerrainLoader - [LoaderMetadata] Load terrain definitions (priority 10, required)

Other Loaders (not yet using factory pattern)

  • Core.Loaders.ScenarioLoader - Load scenario data (provinces, countries, initial state)
  • Core.Loaders.BurstProvinceHistoryLoader - Parallel province history loading with Burst
  • Core.Loaders.BurstCountryLoader - Parallel country data loading with Burst
  • Core.Loaders.Json5Loader - JSON5 parsing utilities
  • Core.Loaders.Json5ProvinceConverter - Convert JSON5 province history with dated events
  • Core.Loaders.Json5CountryConverter - Convert JSON5 country data
  • Core.Loaders.DefinitionLoader - Load ALL provinces from definition.csv
  • Core.Loaders.CountryTagLoader - Load country tag definitions
  • Core.Loaders.ManifestLoader - Load scenario manifests

SaveLoad/

  • Core.SaveLoad.SaveManager - Orchestrates save/load across all systems (F6 quicksave, F7 quickload)
  • Core.SaveLoad.SaveGameData - Save file data structure with header and system data dictionary
  • Core.SaveLoad.SerializationHelper - Binary serialization for primitives, FixedPoint64, NativeArray
  • Core.SaveLoad.SystemSerializer - Generic serialization interface for game systems
  • Core.SaveLoad.SaveFileSerializer - Main save file serialization coordinator
  • Core.SaveLoad.CustomSystemSerializers - Custom serializers for specific systems

Linking/

  • Core.Linking.CrossReferenceBuilder - Resolve string references to numeric IDs (e.g. "ENG" → CountryId)
  • Core.Linking.DataValidator - Validate data integrity after loading
  • Core.Linking.ReferenceResolver - Resolve cross-references between data

Jobs/

  • Core.Jobs.ProvinceProcessingJob - Burst-compiled province processing (IJobParallelFor)
  • Core.Jobs.CountryProcessingJob - Burst-compiled country processing
  • Core.Jobs.LoadBalancedScheduler - Victoria 3 pattern: Split expensive/affordable workloads
  • Core.Jobs.GameStateSnapshot - Double-buffer pattern for zero-blocking UI reads

Events/

  • Core.Events.TimeEvents - Time event structs: HourlyTick, DailyTick, WeeklyTick, MonthlyTick, YearlyTick
  • Core.Events.SaveLoadEvents - Events: GameLoaded, GameSaved

Initialization/

  • Core.Initialization.IInitializationPhase - Interface for phase-based initialization
  • Core.Initialization.InitializationContext - Shared state container between phases

Initialization/Phases/

  • Core.Initialization.Phases.CoreSystemsInitializationPhase - Phase 1: Core systems (0-5%)
  • Core.Initialization.Phases.StaticDataLoadingPhase - Phase 2: Static data (5-15%)
  • Core.Initialization.Phases.ProvinceDataLoadingPhase - Phase 3: Province data (15-40%)
  • Core.Initialization.Phases.CountryDataLoadingPhase - Phase 4: Country data (40-60%)
  • Core.Initialization.Phases.ReferenceLinkingPhase - Phase 5: Link references (60-65%)
  • Core.Initialization.Phases.ScenarioLoadingPhase - Phase 6: Scenario data (65-75%)
  • Core.Initialization.Phases.SystemsWarmupPhase - Phase 7-8: System warmup (75-100%)

Root/

  • Core.GameState - Root game state container with ProvinceSystem, CountrySystem, TimeManager
  • Core.GameSettings - Game configuration and settings
  • Core.EventBus - Decoupled system communication with EventQueue for zero-allocation
  • Core.EngineInitializer - ENGINE orchestrator for phase-based initialization
  • Core.GameStateSnapshot - Double-buffer pattern for zero-blocking UI reads

Collections/

  • Core.Collections.NativeMinHeap - Burst-compatible binary min-heap for priority queues (O(log n) Push/Pop)
  • Core.Collections.PathfindingNode - A* node struct with provinceID and FixedPoint64 fScore (IComparable for heap ordering)

Graph/

  • Core.Graph.GraphDistanceCalculator - General-purpose BFS distance calculator for province graph; Burst-compiled via BFSDistanceJob; tracks both province and country distances
  • Core.Graph.BFSDistanceJob - Burst IJob for parallel BFS traversal using NativeAdjacencyData and NativeProvinceData

Common/

  • Core.Common.Result - Lightweight result type for success/failure operations (implicit bool conversion)
  • Core.Common.Result - Generic result type carrying a value on success; includes Map, Then, OnSuccess, OnFailure
  • Core.Common.ResultExtensions - Combine, CombineAll, Try utilities for result composition
  • Core.Common.FrameCache<TKey,TValue> - Frame-coherent cache, auto-clears on frame change; use for multi-query-per-frame scenarios
  • Core.Common.FrameCacheValue - Single-value frame cache (no key)
  • Core.Common.TimedCache<TKey,TValue> - Time-based cache with configurable lifetime; use for expensive calculations that change infrequently
  • Core.Common.TimedCacheValue - Single-value timed cache (no key)

Result Pattern Convention: All result types use Success(...) and Failure(...) factory methods. Domain-specific result types (e.g., ScenarioLoadResult, ProvinceInitialStateLoadResult) follow this naming.


Localization/

  • Core.Localization.LocalizationManager - Static facade for localization (Get, HasKey, SetLanguage)
  • Core.Localization.YAMLTokenizer - Burst-compatible YAML tokenizer for Paradox-style localization files
  • Core.Localization.YAMLParser - Parse tokenized YAML into key-value pairs with FNV-1a hashing
  • Core.Localization.MultiLanguageExtractor - Extract all languages from localization directory
  • Core.Localization.LocalizationFallbackChain - Language fallback (e.g., french → english)
  • Core.Localization.StringReplacementSystem - Replace PARAMPARAM placeholders in localized strings
  • Core.Localization.DynamicKeyResolver - Resolve dynamic keys like PROV[id] or [scope.key]
  • Core.Localization.ColoredTextMarkup - Parse Paradox color tags (#Y, #R) to Unity rich text

Validation/

  • Core.Validation.Validate - Fluent validation entry point: Validate.For(gameState)
  • Core.Validation.ValidationBuilder - Chainable validation builder for commands
  • Core.Validation.ProvinceValidationExtensions - Province validations: Exists, OwnedBy, NotOwnedBy
  • Core.Validation.CountryValidationExtensions - Country validations: Exists, IsAtWarWith
  • Core.Validation.CommonValidationExtensions - Common: IsPositive, IsInRange, NotNull

Network/

  • Core.Network.INetworkBridge - Interface for network layer integration; SendCommandToHost, BroadcastCommand, OnCommandReceived

Modding/

  • Core.Modding.ModLoader - Mod discovery and loading from StreamingAssets/Mods; loads mod.json manifests

Updated: 2026-01-24 Added: GameCommandProcessor for GAME layer network sync; INetworkBridge interface; ModLoader for mod support

Note: Lua scripting is in separate Scripting assembly (optional, requires MOONSHARP_ENABLED). See Scripts/Scripting/FILE_REGISTRY.md.