diff --git a/UXAssist/Common/GameConstants/DysonSphereConstants.cs b/UXAssist/Common/GameConstants/DysonSphereConstants.cs
new file mode 100644
index 0000000..ebae0b1
--- /dev/null
+++ b/UXAssist/Common/GameConstants/DysonSphereConstants.cs
@@ -0,0 +1,49 @@
+namespace UXAssist.Common.GameConstants;
+
+///
+/// Geometric and pool constants used by Dyson Sphere helper functions.
+///
+public static class DysonSphereConstants
+{
+ /* Angle conversion. */
+ public const float RadiansToDegrees = 57.2957802f;
+
+ /* Default capacity for newly reset Dyson sphere layer pools. */
+ public const int DefaultLayerPoolCapacity = 64;
+
+ /* Maximum allowed vertices for a custom Dyson shell. */
+ public const int MaxShellVertices = 32767;
+
+ /* Minimum vertex count used as a quality guard in quick shell creation. */
+ public const int MinShellVertexThreshold = 32000;
+
+ /* Maximum orbit radius supported by precalculated shell triangles (m). */
+ public const int MaxOrbitRadius = 250000;
+
+ /* Minimum radius considered when searching for a free layer radius. */
+ public const int MinOrbitRadiusSearch = 4000;
+
+ /* Layer radius decrement step when looking for a free slot. */
+ public const int OrbitRadiusSearchStep = 10;
+
+ /* Base grid size used for shell vertex tessellation. */
+ public const float GridSizeBase = 80f;
+
+ /* Base radius used to derive shell grid scale (gridScale ~ (radius / base)^0.75). */
+ public const double GridScaleBaseRadius = 4000.0;
+
+ /* Cell point cost per vertex (cpPerVertex = gridScale^2 * 2). */
+ public const int CpPerVertexFactor = 2;
+
+ /* Number of candidate node positions around the orbit for max-output shell search. */
+ public const int MaxShellSearchNodeCount = 60;
+
+ /* Maximum triangle combinations evaluated in brute-force shell search. */
+ public const int MaxShellSearchCombinations = 60 * 59 * 58;
+
+ /* Seed multiplier for shell randomization. */
+ public const int ShellRandSeedMultiplier = 10000;
+
+ /* int.MaxValue, used as a total-cp ceiling before forcing new nodes. */
+ public const int TotalCpMaxCeiling = int.MaxValue;
+}
diff --git a/UXAssist/Common/GameConstants/ItemIds.cs b/UXAssist/Common/GameConstants/ItemIds.cs
new file mode 100644
index 0000000..ad4c2af
--- /dev/null
+++ b/UXAssist/Common/GameConstants/ItemIds.cs
@@ -0,0 +1,120 @@
+using System.Collections.Generic;
+
+namespace UXAssist.Common.GameConstants;
+
+///
+/// Hard-coded item IDs used across factory and logistics patches.
+///
+public static class ItemIds
+{
+ /* Ores and basic resources */
+ public const int Water = 1000;
+ public const int Coal = 1006;
+ public const int SulfuricAcid = 1116;
+ public const int Hydrogen = 1120;
+ public const int Deuterium = 1121;
+ public const int Photon = 1208;
+
+ /* Materials used by recipes */
+ public const int OrganicCrystal = 1015;
+ public const int FireIce = 1012;
+ public const int CriticalPhoton = 1124;
+ public const int CircuitBoard = 1112; // used in proliferator mk.III recipe
+ public const int Steel = 1107;
+ public const int TitaniumGlass = 1111;
+ public const int GravitonLens = 1125;
+
+ /* Proliferators */
+ public const int ProliferatorMkI = 1141;
+ public const int ProliferatorMkII = 1142;
+ public const int ProliferatorMkIII = 1143;
+
+ /* Logistics carriers */
+ public const int SpaceWarper = 1126;
+
+ /* Matrices */
+ public const int ElectromagneticMatrix = 1202;
+ public const int EnergyMatrix = 1203;
+ public const int StructureMatrix = 1204;
+ public const int InformationMatrix = 1205;
+ public const int UniverseMatrix = 1209;
+ public const int Antimatter = 1210;
+
+ /* Components */
+ public const int PlasmaExciter = 1301;
+ public const int ParticleBroadband = 1305;
+ public const int Processor = 1401;
+ public const int QuantumChip = 1402;
+ public const int MicrocrystallineComponent = 1403;
+ public const int PlaneFilter = 1405;
+ public const int ParticleContainer = 1406;
+
+ /* Dyson sphere materials */
+ public const int SolarSail = 1502;
+ public const int FrameMaterial = 1503;
+ public const int DysonSphereComponent = 1802;
+
+ /* Power generators */
+ public const int WindTurbine = 2203;
+
+ /* Dark Fog items (combat expansion) */
+ public const int DarkFogMemoryUnit = 5201;
+ public const int DarkFogEnergyFragment = 5202;
+ public const int DarkFogSiliconNeuron = 5203;
+ public const int DarkFogNegentropySingularity = 5204;
+ public const int DarkFogMatterReassembler = 5205;
+ public const int DarkFogVirtualParticle = 5206;
+
+ /* Fuel and advanced items */
+ public const int HydrogenFuelRod = 6001;
+ public const int DeuteronFuelRod = 6002;
+ public const int AntimatterFuelRod = 6003;
+ public const int StrangeMatter = 6004;
+ public const int Foundation = 6005;
+ public const int Metaverse = 6006; // also called property/meta-data item
+
+ /* Item groups used by belt signal recipe calculations. */
+ public static readonly int[] ExtraOreItemIds =
+ [
+ Water, SulfuricAcid, Hydrogen, Deuterium, Photon,
+ DarkFogMemoryUnit, DarkFogEnergyFragment, DarkFogSiliconNeuron,
+ DarkFogNegentropySingularity, DarkFogMatterReassembler, DarkFogVirtualParticle
+ ];
+
+ public static readonly HashSet ExtraProliferationItemIds =
+ [
+ Steel, TitaniumGlass, GravitonLens, ProliferatorMkII, ProliferatorMkIII,
+ ElectromagneticMatrix, EnergyMatrix, StructureMatrix, InformationMatrix,
+ UniverseMatrix, Antimatter, PlasmaExciter, ParticleBroadband,
+ Processor, QuantumChip, MicrocrystallineComponent, PlaneFilter, ParticleContainer,
+ SolarSail, FrameMaterial, DysonSphereComponent,
+ HydrogenFuelRod, AntimatterFuelRod, StrangeMatter, Foundation, Metaverse
+ ];
+
+ public static readonly HashSet NoProliferationItemIds =
+ [
+ SpaceWarper, DeuteronFuelRod
+ ];
+
+ ///
+ /// All source items used to create 25 proliferators mk.III (not self-sprayed).
+ ///
+ public static readonly List<(int ItemId, float Count)> ProliferatorSources =
+ [
+ (OrganicCrystal, 60f),
+ (CriticalPhoton, 20f),
+ (Coal, 64f),
+ (FireIce, 16f),
+ (CircuitBoard, 32f),
+ (ProliferatorMkI, 64f),
+ (ProliferatorMkII, 40f),
+ (ProliferatorMkIII, 25f)
+ ];
+
+ /* Aliases used by UXAssist belt signal buy-out logic. */
+ public static readonly int[] DarkFogItemIds =
+ [
+ DarkFogMemoryUnit, DarkFogVirtualParticle, DarkFogEnergyFragment,
+ DarkFogNegentropySingularity, DarkFogSiliconNeuron, DarkFogMatterReassembler
+ ];
+}
diff --git a/UXAssist/Common/GameConstants/LogisticsConstants.cs b/UXAssist/Common/GameConstants/LogisticsConstants.cs
new file mode 100644
index 0000000..8f1e1da
--- /dev/null
+++ b/UXAssist/Common/GameConstants/LogisticsConstants.cs
@@ -0,0 +1,52 @@
+namespace UXAssist.Common.GameConstants;
+
+///
+/// Constants used by logistics capacity and station UI patches.
+///
+public static class LogisticsConstants
+{
+ /* Default base storage capacity used by the real-time logistics panel. */
+ public const int DefaultLocalStorageMax = 5000;
+ public const int DefaultRemoteStorageMax = 10000;
+
+ /* Maximum storage when overflow-in-logistics is enabled. */
+ public const int OverflowStorageMax = 90000000;
+
+ /* Station storage slot limits. */
+ public const int DefaultStorageSlotCount = 5;
+
+ /* Key-repeat timing for keyboard-based max adjustment (in game ticks). */
+ public const long KeyRepeatInitialDelay = 30;
+ public const long KeyRepeatInterval = 4;
+
+ /* Keyboard adjustment deltas for storage max values. */
+ public const int SmallAdjustment = 10;
+ public const int MediumAdjustment = 100;
+ public const int LargeAdjustment = 1000;
+ public const int HugeAdjustment = 10000;
+ public const int MassiveAdjustment = 100000;
+ public const int GargantuanAdjustment = 1000000;
+
+ /* Rounding divisors used when scaling storage on tech unlock. */
+ public const int LocalStorageRounding = 50;
+ public const int RemoteStorageRounding = 100;
+
+ /* Charge power slider scaling factors. */
+ public const long ChargePowerSliderScale = 50000L;
+ public const long ChargePowerSliderMinScale = 500000L;
+
+ /* Mining speed slider ranges. */
+ public const int MinMiningSpeedBase = 10000;
+ public const int MaxMiningSpeedBase = 30000;
+ public const int MiningSpeedFineStep = 1000;
+ public const int MiningSpeedCoarseStep = 10000;
+ public const float MiningSpeedSliderMaxDefault = 20f;
+ public const float MiningSpeedSliderMaxExtended = 27f;
+
+ /* Dispenser / battle base charge power multiplier. */
+ public const double DispenserChargePowerMultiplier = 5000.0;
+
+ /* Real-time logistics panel UI dimensions. */
+ public const float StorageSliderWidth = 70f;
+ public const float StorageSliderHeight = 5f;
+}
diff --git a/UXAssist/Common/GameConstants/TechIds.cs b/UXAssist/Common/GameConstants/TechIds.cs
new file mode 100644
index 0000000..2ef4232
--- /dev/null
+++ b/UXAssist/Common/GameConstants/TechIds.cs
@@ -0,0 +1,72 @@
+using System.Collections.Generic;
+
+namespace UXAssist.Common.GameConstants;
+
+///
+/// Hard-coded technology IDs used across tech patches.
+///
+public static class TechIds
+{
+ ///
+ /// Base game tech for "Sorter Cargo Stacking" upgrades.
+ ///
+ public const int SorterCargoStacking = 3608;
+
+ /* Custom sorter cargo stacking techs used by UXAssist (repositioned clones). */
+ public const int SorterCargoStackingCustomStart = 3301;
+ public const int SorterCargoStackingCustomEnd = 3306;
+
+ /* Combat-related tech ranges disabled in peace mode. */
+ public static readonly HashSet CombatTechs = CreateCombatTechs();
+
+ private static HashSet CreateCombatTechs()
+ {
+ (int Start, int End)[] ranges =
+ [
+ // Explosive Unit, Crystal Explosive Unit
+ (1803, 1804),
+ // Implosion Cannon
+ (1807, 1807),
+ // Signal Tower, Planetary Defense System, Jammer Tower, Plasma Turret,
+ // ammo boxes, shell/missile sets, capsules, drones, corvettes, destroyers, suppressing/EM capsules
+ (1809, 1825),
+ // Auto Reconstruction Marking
+ (2951, 2956),
+ // Energy Shield
+ (2801, 2807),
+ // Kinetic Weapon Damage
+ (5001, 5006),
+ // Energy Weapon Damage
+ (5101, 5106),
+ // Explosive Weapon Damage
+ (5201, 5206),
+ // Combat Drone Damage
+ (5301, 5305),
+ // Combat Drone Attack Speed
+ (5401, 5405),
+ // Combat Drone Engine
+ (5601, 5605),
+ // Combat Drone Durability
+ (5701, 5705),
+ // Ground Squadron Expansion
+ (5801, 5807),
+ // Space Fleet Expansion
+ (5901, 5907),
+ // Enhanced Structure
+ (6001, 6006),
+ // Planetary Shield
+ (6101, 6106)
+ ];
+
+ var set = new HashSet();
+ foreach (var (start, end) in ranges)
+ {
+ for (var id = start; id <= end; id++)
+ {
+ set.Add(id);
+ }
+ }
+
+ return set;
+ }
+}
diff --git a/UXAssist/Common/GameConstants/UniverseGenConstants.cs b/UXAssist/Common/GameConstants/UniverseGenConstants.cs
new file mode 100644
index 0000000..90ae339
--- /dev/null
+++ b/UXAssist/Common/GameConstants/UniverseGenConstants.cs
@@ -0,0 +1,52 @@
+namespace UXAssist.Common.GameConstants;
+
+///
+/// Galaxy generation defaults, slider limits and UI constants.
+///
+public static class UniverseGenConstants
+{
+ /* Default algorithm parameters for galaxy generation. */
+ public const double DefaultMinDist = 2.0;
+ public const double DefaultMinStep = 2.0;
+ public const double DefaultMaxStep = 3.2;
+ public const double DefaultFlatten = 0.18;
+
+ /* Vanilla game limits replaced by UniverseGenTweaks. */
+ public const int VanillaMaxStarCount = 80;
+ public const int VanillaGalaxyCapacity = 25700;
+ public const int VanillaSectorCapacity = 25600;
+
+ /* Expanded capacities used by UniverseGenTweaks. */
+ public const int ExpandedGalaxyCapacity = 102500;
+ public const int ExpandedSectorCapacity = 102500;
+
+ /* Maximum star count settings. */
+ public const int MinStarCount = 32;
+ public const int MaxStarCount = 1024;
+ public const int DefaultMaxStarCount = 128;
+ public const float StarCountSliderMin = 64f;
+ public const float StarCountSliderMax = 1024f;
+ public const int StarCountAlignmentMask = 7; // round up to multiple of 8
+
+ /* UIGalaxySelect custom slider limits (slider value = parameter * StepSliderScale). */
+ public const float StepSliderScale = 10f;
+
+ public const float MinDistSliderMin = 10f;
+ public const float MinDistSliderMax = 50f;
+
+ public const float MaxStepSliderMax = 100f;
+
+ public const float FlattenSliderMin = 1f;
+ public const float FlattenSliderMax = 50f;
+ public const double FlattenSliderScale = 50.0;
+
+ /* Vertical spacing between added slider rows in the galaxy select UI. */
+ public const float SliderRowSpacing = -36f;
+
+ /* Epic difficulty resource multiplier slider. */
+ public const float ResourceMultiplierSliderMax = 11f;
+
+ /* Oil multiplier thresholds used by Epic difficulty. */
+ public const float OilMultiplierThreshold = 0.05f;
+ public const float OilMultiplierBase = 0.5f;
+}